新手上路#3
**
一、MyBatis框架概述 1.MyBatis是一个持久层框架(DAO框架),是对JDBC的封装,使得开发者只需要关注
SQL语句(业务)本身即可,无需开发者处理加载驱动、获取连接、创建Statement等繁琐的操作。
2.MyBatis最大的特点是把SQL语句卸载XML配置文件中。
3.MyBatis是一个实现类ORM思想的持久层框架
ORM(Object/Relation Mapping)对象/关系映射:
将数据库中的关系数据表映射为java中的对象,吧对数据表的操作转换为对对象的操作,实现面向对象编程。
%总结%:MyBatis框架是一个半自动的ORM持久层框架,可以在java中实现以面向对象的方式操作数据库,但是需要我们自己编写SQL语句。
**
二、MyBatis配置 mybatis-cofigxml配置
1.放在src下
2.设置类的别名
TypeAliases标签
3.mappers标签
用来注册SQL映射文件
xxxMapper.xml
id 值唯一,用来标识唯一的sql语句 使用时,建议和namespace的值组合 例如:test.id resultType:结果集封装的类型
parameterType:参数的数据类型
SQL语句中的取参数语法:#{基本类型 任意命名}
resultMap:
(1).当数据表列名和类中属性名不一致时,Mybatis无法自动配置,需要手动配置映射(给字段起别名)
模糊查询#{}和 $ {}的方式
1.使用#{}得原理是占位符,而$ 的原理为字符串拼接的方式。使用#{}可以防止sql注入。
2.如果使用${}时,传入的参数是引用类型,那么 $ {对象的属性名}。
3.能使用#就不使用$。
三、动态代理Dao开发方式 【基础|MyBatis框架知识点总结】1.定义一个Mapper接口,这个接口其实和我们定义的Dao接口是一样的,从Mybatis框架中拿到一个代理
对象(代理的是这个Mapper接口),通过代理对象调用接口中的方法完成业务。
2.Mapper动态dao开发遵循的规范
SQL映射文件的namespac鼻血和Mapper接口的全限定类名完全一致;
mapper接口中方法名必须和XML中SQL语句的id保持一致;
mapper接口中方法的参数类型必须和SQL语句的parameterType类型保持一致;
mapper接口中方法返回值必须和SQL语句的resultType类型保持一致
**
四、动态SQL 1.什么是动态SQL
(1).动态SQL极大的简化了SQL语句的拼装操作。
(2).动态SQL元素和使用JSTL或其他类似XML的标签类似。
(3).动态SQL就是通过一系列的标签运算来完成判断,进行SQL语句的拼装。
2.where标签,处理SQL语句,自动添加where关键字,并去掉紧跟它后面的一个and或者or;
if标签,test属性,判断表达式真假。
id="findUser" resultType="users" parameterType="users"> SELECT * FROM t_user
or id=#{id}
or username LIKE #{username}
3.SQL标签
将SQL语句通用的部分进行抽取,比如将固定要查询表内的字段做一个抽取:
id="findUser" resultType="users" parameterType="users">
SELECT FROM t_user
or id=#{id}
or username LIKE #{username}
id="t_user_columns">
id,username,password,state,email,source,create_time as createTime,remark
4.foreach标签
删除多条数据,delete from t_user where id in(1,3,4,99,2,4)
集合:
id="queryUsersByIds" parameterType="list" resultType="users">
SELECT FROM t_user
#{item}
数组:
id="queryUsersByIdsArray" parameterType="int[]" resultType="users">
SELECT FROM t_user
#{item}
对象:
id="queryUsersByIdsPojo" parameterType="queryvo" resultType="users">
SELECT FROM t_user
#{item}
foreach标签遍历集合拼接SQL语句
collection属性:遍历传入的集合,当参数是集合时,collection属性值固定为list; 当参数是数组时,collection属性值固定为array; 遍历传入的pojo对象中的集合,collection属性值为POJO中集合的属性名。
open属性:遍历拼接前
close属性:遍历拼接后
separator属性:指定拼接的符号
item属性:遍历到的元素
五、MyBatis延迟加载 延迟加载:都是针对在多表查询的情况下,对关联表对象的操作。
需求描述
用户和订单从面向对象的角度来说就是所谓的关联对象,假如我们只需要订单数据,暂时不需
要用户数据,就不应该去查询用户表,啥时候使用用户数据,啥时候查询。
开启延迟加载策略在mybatis-config.xml文件中
>
name="lazyLoadingEnabled" value="https://www.it610.com/article/true"/>
name="lazyLoadTriggerMethods" value="https://www.it610.com/article/getUsers"/>
六、MyBatis缓存机制 MyBatis框架中定义了两级缓存
一级缓存
二级缓存
默认情况下,只有一级缓存是开启的,一级缓存就是SqlSession级别的缓存。
一级缓存就是SqlSession级别的缓存,当调用SqlSession的修改、添加、删除、commit、close、clearCache方法时,就会清空缓存。
二级缓存是namespace映射级别的缓存,多个SqlSession去操作同一个Mapper映射的SQL语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。
在MyBatis中使用二级缓存时,所缓存的对象一定要实现序列化接口。