Mybatis
Mybatis的核心API
API名称 | 作用 |
---|---|
Resources | 用于读取和解析mybatis-config.xml全局配置文件 |
SqlSeesionFactory | 主要作用就是用于创建Sqlsession的 |
SqlSeesion | 1.SqlSession类似于JDBC开发中Connection对象的作用,一个SqlSession中封装了一个Connection对象,所以mybatis开发的时候使用SqlSession对象控制事务。2.由于mybatis是采用mapper文件作为代理DAO接口的实现,所以我们需要使用SqlSession去获取最终的DAO实现类对象,然会调用DAO的方法 |
Mybatis中接口参数的绑定机制
- 接口方法中一个参数:mapper文件中#{}取值语法里面写上面都可以
- 接口方法多个参数
2.1注解方式绑定:专门用于条件查询,可读性高@Param
2.2使用Map作为接口的方法的参数:也可以用于查询,但是可读性差,不建议使用
Mapper文件中的另一种取值语法
- ${}取值方法的使用
- #{}与${}两种语法生成SQL语句的方式对比
2.1#{}以占位符的方式生成SQL语句可以避免SQL注入的风险
2.2 ${}以字符串拼接形成SQL语句,存在SQL注入的风险
关于Mybatis的结果集映射
- Mybatis默认结果集封装规则:mybatis默认会将数据库查询返回结果集中的字段名,对应封装到实体类属性名一致的属性上
- 当查询返回结果集中的字段名与实体属性名不一致的解决
2.1第一种方案:给字段名其一个别名,与对方实体类属性名一致
2.2第二种方案:使用mybatis的resultMap自定义结果集映射关系
Ps:resultMap未来主要用于多表查询时的结果映射关系
一对一
示例:一个人拥有一个身份证,一个身份证只能属于一个人
一对多
示例:一个部门有多个员工,一个员工属于多个部门
一个用户有多个订单,一个订单属性某个用户
一个班级有多名学生,一个学生属于一个班级
多对多
示例:一个学生可以选择多门课程,一门课程可以被多名学生选修
使用Mybatis开发关联关系的查询
- 表的设计
- 一对一场景
一对一场景,表的外键放在哪一方都可以
一对多场景 外键存放在多的一方
Java中的对应实体类设计
- 一对一
简称:你找我,放在你那一方,我找你放在我这一方 - 一对多
对于关系属性放置在根据谁找谁,根据谁的一方
Ps:关系属性的确立,要根据实际的业务场景进行分析,一般很少有双向关系的场景
使用Mybatis开发关联关系的查询
- 一对一Mapper实现
- 一对多Mapper实现
关联关系Mybatis查询的实现
- 如果关系属性是一个简单的Java自定义对象类型,使用association标签封装
- 如果关系属性是一个lsit集合,则使用collection标签封装
多对多关联关系查询处理
- 表的设计
Ps:多对多其实可以拆分为多个一对多
Mybatis中的动态SQL机制
-
SQL片段:我们可以将多个SQL语句涉及到重复使用的信息,定义成为一个SQL片段,提高代码的复用性
-
where动态SQL子句(用于条件查询)
-
set子句动态SQL(用于更新)
-
trim
-
forEach
上面是forEach的实现方法
//实现where动态查询子句
<trim prefix="where" prfixOverrides="and/or">
//prefix属性 应用于指定查询子句的关键字
//prefixOverrides属性用于指定,优化剔除的第一个非法的关键字,and或者or
<if test="username!=null">username like '%' || #{username} || '%'</if>
以此类推 ..............
</trim>
//实现set动态SQL子句
update t_user
//prefix指定子句的关键字
//suffixOverrides指定剔除的最后一个非法字符,逗号
<trim prefix="set" suffixOverrides=",">
<if text="username!=null"> username=#{username},</if>
以此类推。。。。。
</trim>
Mybatis中的缓存机制
- 什么是缓存机制(cache):缓存是将查询的数据放在内存中存储一种优化项目的机制
- 使用缓存机制的好处
21.加入缓存后,可以减轻后端数据库服务器的压力
2.2缓存是基于内存存储操作数据,提高了系统的查询性能 - Mybatis框架的缓存机制
3.1缓存分类
1.一级缓存:一级缓存是基于同一个sqlsession执行的操作基于共享数据,默认开启的
2.二级缓存:二级缓存是基于同一个SqlsessionFactorg执行的操作可以共享数据,默认关闭的
缓存注意事项
- 一级缓存
一级缓存是基于同一个SqlSession执行的操作可以共享数据。默认开启的。
PS: 关闭一级缓存,在mybatis-config.xml中可以配置关闭 - 使用二级缓存的注意事项:
-1) 二级缓存数据共享范围是同一个SqlSessionFactory下的
- sqlSession使用完毕,要手动关闭,否则mybatis不会像缓存中存数据。
- 涉及到的实体类的对象,要实现序列化接口 Serializable 。
- 脏读
PS: Mybatis中在执行了写操作提交事务后, 会对操作的数据在缓存中清除,然后保证下次查询的数据与数据库数据是同步的。