Mybatis基础
MyBatis入门
MyBatis概述
- MyBatis 是一款基于Java的优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
- 它封装了JDBC操作的很多细节,使开发者只需要关注SQL语句本身,而无需关注驱动、创建连接等繁杂过程
- 它使用了ORM思想实现了结果集的封装
MyBatis环境搭建
创建Maven工程
- 小技巧:为了避免每次不同的模块都要编写一遍pom.xml的依赖,可以第一次创建一个父Maven项目,引入依赖,以后的Maven项目直接继承这个父项目就可以简化重复的依赖:
- 建立的Maven项目删除掉src文件夹,然后配置好依赖后直接新建模块,选择Maven项目时就有继承选项了,继承的父项目在此项目的pom.xml的
parent标签里
- 建立的Maven项目删除掉src文件夹,然后配置好依赖后直接新建模块,选择Maven项目时就有继承选项了,继承的父项目在此项目的pom.xml的
- 小技巧:为了避免每次不同的模块都要编写一遍pom.xml的依赖,可以第一次创建一个父Maven项目,引入依赖,以后的Maven项目直接继承这个父项目就可以简化重复的依赖:
导入依赖:MyBatis和MySQL连接器
1
2
3
4
5
6
7
8
9
10<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>创建domain里的实体类和dao层的接口,定义好接口的方法
- 创建User实体类,成员属性名要和数据库字段名一一对应
- 创建dao层的接口和方法
创建MyBatis的主配置文件并进行配置
在Maven项目的
resources目录下创建一个xml文件引入约束和环境配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!--引入配置文件的约束-->
<configuration>
<!--配置环境-->
<environments default="mysql"> <!--为这个环境起个名字-->
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager><!--配置事务类型-->
<dataSource type="POOLED"> <!--配置数据源/连接池-->
<!--配置连接数据库的4个信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///db1/mybatisuser"/>
<property name="username" value="root"/>
<property name="password" value="199988"/>
</dataSource>
</environment>
</environments>
</configuration>
创建MyBatis与dao层接口的映射文件:
在上一步的MyBatis配置文件的
configuration标签中添加一个mappers标签,指定映射配置文件位置1
2
3
4<mappers>
<mapper resource="com/taoyyz/dao/UserDao.xml"></mapper>
<!--注意这个路径默认是maven项目的resources目录而不是java目录-->
</mappers>根据映射文件的位置,在
resources目录下创建对应的xml映射文件并编写SQL语句1
2
3
4
5
6
7
8
9
10
<!--引入Mapper的约束-->
<mapper namespace="com.taoyyz.dao.UserDao"> <!--命名空间为接口全类名-->
<!--配置查询所有select,这里的id为对应mapper命名空间那个接口里的方法名称,结果集类型为实体类全类名-->
<select id="findAll" resultType="com.taoyyz.domain.User">
select * from mybatisuser #在这里编写SQL
</select>
</mapper>
- 注意事项:遵从以下约定就可以无需编写dao层实现类(约定大于配置)
- UserDao接口对应的映射
xml文件为UserDao.xml,也可以叫做UserMapper.xml,相当于接口实现类 - UserDao接口对应的
xml映射文件的目录层级必须和接口的包层级在名字上相同:com.taoyyz.dao - 映射配置文件的
mapper标签的namespace命名空间取值必须是dao层接口的全限定类名 - 映射配置文件的操作配置(例如
select标签)的id属性取值必须是dao层接口的对应方法名
- UserDao接口对应的映射
MyBatis入门案例
自定义MyBatis框架
- MyBatis在使用代理dao层接口的方式实现CRUD时做了什么事?
- 创建代理对象
- 在代理对象中调用方法
- 自定义MyBatis需要的类:
ResourcesSqlSessionFactoryBuilderSqlSessionFactorySqlSession