# 面向接口编程保持两个一致
mybatis 核心配置文件:数据库信息和 mapper.xml
在 application.yml 中配置,不需要额外配置了
MyBatis 面向接口编程的两个一致:
- 映射文件的 homespace 要和 napper 接口的全类名保持一致
- 映射文件中 SQL 语句的 id 要和 mapper 接口中的方法名一致
# 从 XML 中构建 SqlSessionFactory
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。
从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。 但也可以使用任意的输入流(InputStream)实例,比如用文件路径字符串或 file:// URL 构造的输入流。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易。
String resource = "org/mybatis/example/mybatis-config.xml"; | |
InputStream inputStream = Resources.getResourceAsStream(resource); | |
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); |
# 打印 sql 语句
使用 log4j 的 jar 包,+ 一个配置文件
# xml 里面的 SQL 语句
# resultMap
查询功能必须设置 resultType 或者 resultMap
resultType:设置默认的映射关系
resultMap:设置自定义映射关系
<select id="listRolesByUserInfoId" resultType="java.lang.String"> | |
SELECT | |
role_label | |
FROM | |
tb_role r, | |
tb_user_role ur | |
WHERE | |
r.id = ur.role_id | |
AND ur.user_id = #{userInfoId} | |
</select> |
# 占位符
-
mapper 接口方法的参数为单个的字面量类型
可以通过${}
,#{}
以任意的名称获取参数值,但是需要注意${}
的单引号问题 -
mapper 接口方法的参数为多个时,此时 MyBatis 会将这些参数放在一个 map 集合中,以两种方式进行存储
- 以 arg0,arg1.. 为键进行传递
- 以 param1,param2.. 为键进行传递
-
使用 Param, 注解命名参数此 MyBatis 会将这些参数放在一个 map 集合中,以两种方式进行存储以 @Param 注解的值为键,以参数为值因此只需要通过 #{} 和 {} 的单引号问题
# 特殊 sql
# 模糊查询
<select id="findByName" parameterType="string" resultType="com.sc.domain.User"> | |
select * from user where username like '%${value}%' | |
</select> |
<select id="findByName" parameterType="string" resultType="com.sc.domain.User"> | |
select * from user where username like "%"#{value}"%" | |
</select> |
# 驼峰映射
全局配置文件中有关于驼峰的配置,默认为 false,可查看官网
# resultMap
设置自定义映射关系,主要用于多对一或者一对多的联表查询
- id:唯一标识,不能重复
- type:设置映射关系中的实体类的类型
# 多对一联表查询
- 级联属性查询
- association 查询
- association 的分布查询
# 一对多联表查询
collection
<!-- property="tagDTOList" 对应的属性字段 --> | |
<!-- ofType="com.minzheng.blog.dto.TagDTO" 里面具体的值 --> | |
<collection property="tagDTOList" ofType="com.minzheng.blog.dto.TagDTO"> | |
<id column="tag_id" property="id"/> | |
<result column="tag_name" property="tagName"/> | |
</collection> |
分布查询
# 分页查询
- 导入 pageHelper 的 jar 包
- 在 mybatis 的核心配置文件中配置 pageHelper 的插件配置
limit index,pageSize
- index: 当前页的起始索引
- pageSize: 每页显示的条数
- pageNum: 当前页的页码
- 在查询之前开启分页
- 在查询之后获取分页相关信息
# mp 自带的 sql 语句日志
mybatis-plus: | |
configuration: | |
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl |
mp 默认开启了驼峰映射
常用注解:
- @TableName 表名映射
- @TableId 主键映射,里面的 type 可以修改主键的生成策略,比如自增策略,雪花算法策略
- @TableField 字段映射
- @TableLogic 逻辑删除
# mp 分页查询
首先在配饰类中配置分页查询插件,然后就可以直接使用了
Page<User> page = new Page<>(2,3); | |
userMapper.selectPage(page,querryWapper); |
# 乐观锁插件
并发冲突乐观锁
# mybatisX 插件
插件比我想象的还要强大一些
- 小鸟定位🐦
- 代码生成器
- 在 mapper 文件中自动生成 CRUD