MyBatis框架
MyBatis HelloWorld
- 数据准备。
- 导入 jar 包。
- 在 src 下创建映射配置文件。
- 在 src 下创建核心配置文件。
- 编写测试类完成相关 API 的使用。
- 运行测试查看结果。
MyBatis 相关 API
Resources
-
org.apache.ibatis.io.Resources:加载资源的工具类。
-
核心方法
返回值 方法名 说明 InputStream getResourceAsStream(String fileName) 通过类加载器返回指定资源的字节输入流
SqlSessionFactoryBuilder
-
org.apache.ibatis.session.SqlSessionFactoryBuilder:获取 SqlSessionFactory 工厂对象的功能类。
-
核心方法
返回值 方法名 说明 SqlSessionFactory build(InputStream is) 通过指定资源字节输入流获取SqlSession工厂对象
SqlSessionFactory
-
org.apache.ibatis.session.SqlSessionFactory:获取 SqlSession 构建者对象的工厂接口。
-
核心方法
返回值 方法名 说明 SqlSession openSession() 获取SqlSession构建者对象,并开启手动提交事务 SqlSession openSession(boolean autoCommit) 获取SqlSession构建者对象,如果参数为true,则开启 自动提交事务
SqlSession
- org.apache.ibatis.session.SqlSession:构建者对象接口。用于执行 SQL、管理事务、接口代理。
返回值 | 方法名 | 说明 |
---|---|---|
List | selectList(String statement,Object paramter) | 执行查询语句,返回List集合 |
T | selectOne(String statement,Object paramter) | 执行查询语句,返回一个结果对象 |
int | insert(String statement,Object paramter) | 执行新增语句,返回影响行数 |
int | update(String statement,Object paramter) | 执行修改语句,返回影响行数 |
int | delete(String statement,Object paramter) | 执行删除语句,返回影响行数 |
void | commit() | 提交事务 |
void | rollback() | 回滚事务 |
T | getMapper(Class cls) | 获取指定接口的代理实现类对象 |
void | close() | 释放资源 |
映射配置文件
-
映射配置文件包含了数据和对象之间的映射关系以及要执行的 SQL 语句。
-
<mapper>
:核心根标签。- namespace 属性:名称空间
-
<select>
:查询功能标签。 -
<insert>
>:新增功能标签。 -
<update>
:修改功能标签。 -
<delete>
:删除功能标签。- id 属性:唯一标识,配合名称空间使用
- parameterType 属性:指定参数映射的对象类型
- resultType 属性:指定结果映射的对象类型
-
SQL 获取参数
- #{属性名}
核心配置文件
- 核心配置文件包含了 MyBatis 最核心的设置和属性信息。如数据库的连接、事务、连接池信息等。
<configuration>
:核心根标签。<properties>
:引入数据库连接信息配置文件标签。<typeAliases>
:起别名标签。<environments>
:配置数据库环境标签。<environment>
:配置数据库信息标签。<transactionManager>
:事务管理标签。<dataSource>
:数据源标签。<property>
:数据库连接信息标签。<mappers>
:引入映射配置文件标签。
接口代理方式实现 Dao 层
-
接口代理方式可以让我们只编写接口即可,而实现类对象由 MyBatis 生成。
-
实现规则
- 映射配置文件中的名称空间必须和 Dao 层接口的全类名相同。
- 映射配置文件中的增删改查标签的 id 属性必须和 Dao 层接口的方法名相同。
- 映射配置文件中的增删改查标签的 parameterType 属性必须和 Dao 层接口方法的参数相同。
- 映射配置文件中的增删改查标签的 resultType 属性必须和 Dao 层接口方法的返回值相同。
-
获取动态代理对象
- SqlSession 功能类中的 getMapper() 方法。
映射配置文件 - 动态 SQL
<if>
标签
<where>
:条件标签。如果有动态条件,则使用该标签代替 where 关键字。<if>
:条件判断标签。
<if test= "条件判断" >
查询条件拼接
</if>
<foreach>
标签
<foreach>
:循环遍历标签。适用于多个参数或者的关系。
<foreach collection= "" open= "" close= "" item= "" separator= "" >
获取参数
</foreach>
- 属性
- collection:参数容器类型,(list-集合,array-数组)。
- open:开始的 SQL 语句。
- close:结束的 SQL 语句。
- item:参数变量名。
- separator:分隔符。
SQL片段抽取
-
我们可以将一些重复性的 SQL 语句进行抽取,以达到复用的效果。
-
<sql>
:抽取 SQL 语句标签。<sql id= "片段唯一标识" >抽取的SQL语句</sql>
-
<include>
:引入 SQL 片段标签。<include refid= "片段唯一标识" />
核心配置文件 – 分页插件
- 分页:可以将很多条结果进行分页显示。
- 分页插件 jar 包:pagehelper-5.1.10.jar jsqlparser-3.1.jar
<plugins>
:集成插件标签。- 分页助手相关 API
- PageHelper:分页助手功能类。
- startPage():设置分页参数
- PageInfo:分页相关参数功能类。
- getTotal():获取总条数
- getPages():获取总页数
- getPageNum():获取当前页
- getPageSize():获取每页显示条数
- getPrePage():获取上一页
- getNextPage():获取下一页
- isIsFirstPage():获取是否是第一页
- isIsLastPage():获取是否是最后一页
多表操作
一对一
-
<resultMap>
:配置字段和对象属性的映射关系标签。- id 属性:唯一标识
- type 属性:实体对象类型
-
<id>
:配置主键映射关系标签。 -
<result>
:配置非主键映射关系标签。- column 属性:表中字段名称
- property 属性: 实体对象变量名称
-
<association>
:配置被包含对象的映射关系标签。- property 属性:被包含对象的变量名
- javaType 属性:被包含对象的数据类型
一对多
-
<resultMap>
:配置字段和对象属性的映射关系标签。- id 属性:唯一标识
- type 属性:实体对象类型
-
<id>
:配置主键映射关系标签。 -
<result>
:配置非主键映射关系标签。- column 属性:表中字段名称
- property 属性: 实体对象变量名称
-
<collection>
:配置被包含集合对象的映射关系标签。- property 属性:被包含集合对象的变量名
- ofType 属性:集合中保存的对象数据类型
多对多
-
<resultMap>
:配置字段和对象属性的映射关系标签。- id 属性:唯一标识
- type 属性:实体对象类型
-
<id>
:配置主键映射关系标签。 -
<result>
:配置非主键映射关系标签。- column 属性:表中字段名称
- property 属性: 实体对象变量名称
-
<collection>
:配置被包含集合对象的映射关系标签。- property 属性:被包含集合对象的变量名
- ofType 属性:集合中保存的对象数据类型
注解开发 单表操作
-
注解可以简化开发操作,省略映射配置文件的编写。
-
常用注解
- @Select(“查询的 SQL 语句”):执行查询操作注解
- @Insert(“查询的 SQL 语句”):执行新增操作注解
- @Update(“查询的 SQL 语句”):执行修改操作注解
- @Delete(“查询的 SQL 语句”):执行删除操作注解
-
配置映射关系
<mappers>
<package name="接口所在包"/>
</mappers>
注解实现多表操作
-
@Results:封装映射关系的父注解。
- Result[] value():定义了 Result 数组
-
@Result:封装映射关系的子注解。
- column 属性:查询出的表中字段名称
- property 属性:实体对象中的属性名称
- javaType 属性:被包含对象的数据类型
- one 属性:一对一查询固定属性
- many 属性:一对多查询固定属性
-
@One:一对一查询的注解。
- select 属性:指定调用某个接口中的方法
-
@Many:一对多查询的注解。
- select 属性:指定调用某个接口中的方法
构建SQL语句
-
org.apache.ibatis.jdbc.SQL:构建 SQL 语句的功能类。通过一些方法来代替 SQL 语句的关键字。
- SELECT()
- FROM()
- WHERE()
- INSERT_INTO()
- VALUES()
- UPDATE()
- DELETE_FROM()
-
@SelectProvider:生成查询用的 SQL 语句注解。
-
@InsertProvider:生成新增用的 SQL 语句注解。
-
@UpdateProvider:生成修改用的 SQL 语句注解。
-
@DeleteProvider:生成删除用的 SQL 语句注解。
- type 属性:生成 SQL 语句功能类对象
- method 属性:指定调用方法