一:mybatis概述
mybatis是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程.
二:mybatis框架快速入门
步骤: 1.创建maven工程,添加依赖
2.编写实体类和接口
3.编写映射配置文件(同包同名)
4.编写核心配置文件
5.编写测试类
加载配置文件
创建sqlSessionFactory
创建sqlSession
获取代理对象
代理对象调用方法
释放资源
三:mapper代理方式实现CRUD
- mapper代理开发要求
1>.接口和映射文件要同包同名
2>.持久层映射配置中 mapper 标签的 namespace 属性取值必须是持久层接口的全限定类名
3>.SQL 语句的配置标签select,insert,delete,update的 id 属性必须和持久层接口的方法名相同
4>.parameterType要和接口中的传入参数类型相同
5>.resultType要和接口中的返回结果类型相同 - 模糊查询
#{}和${}的区别:
#{}表示一个占位符
#{}可以实现prepareStatment向占位符中设置值,自动进行JDBC和java类型转换,防止sql注入
#{}可以接收简单类型值或pojo属性值,如果parameterType传输基本数据类型,值随便写
${}表示拼接sql串
${}是将传入的参数原样拼接在sql中,不进行jdbc类型转换
可以接收简单类型值或pojo属性值,如果parameterType传输基本数据类型,{}可以接收简单类型值或pojo属性值,如果parameterType传输基本数据类型,可以接收简单类型值或pojo属性值,如果parameterType传输基本数据类型,{}括号中只能是value
3. 实体属性映射和表字段不匹配
当出现实体属性映射和表字段不匹配现象时我们可以用两种方式解决:
1>.起别名
2>.resultMap(推荐使用这个)
四:核心配置文件中的标签设置
1.properties:属性配置
1>:resource属性:用于指定 properties 配置文件的位置,要求配置文件必须在类路径下:resource=“jdbcConfig.properties”
2>:url 属性:统一资源定位符http://localhost:8080/mystroe/CategoryServlet
2.typeAliases:自定义别名
1>: typeAlias alias=“user” type=“xxx.xxx.domain.User”/
2>:批量别名定义,扫描整个包下的类,别名为类名(首字母大写或小写都可以) package name=“xxx.xxx.domain”
3.mappers:映射器
1>:方式一:mapper resource=" " ,使用相对于类路径的资源,如:mapper resource=“com/xxx/dao/IUserDao.xml”
2>:方式二:mapper class=" " ,使用 mapper 接口类路径,如:mapper class=“com.xxx.dao.UserDao” ;注意:此种方法要求 mapper 接口名称和 mapper 映射文件名称相同,且放在同一个目录中.
3>:方式三:package name="" ,注册指定包下的所有 mapper 接口,如:package name="cn.xxx.mybatis.mapper ;注意:此种方法要求 mar pper 接口名称和 r mapper 映射文件名称相同,且放在同一个目录中.
五:mybatis中的动态sql(重点)
1. <if test=条件判断<>/if>
注意问题:
1.条件判断中不能使用&&,要使用and
2.<if>标签的 test 属性中写的是对象的属性
2.<where<>/where>
简化 where 1=1 的条件拼装,我们可以采用<where>标签来简化开发,会自动删去第一个and
3.<foreach<>/foreach>
1>:<foreach>标签用于遍历集合
2>:collection: 代表要遍历的集合元素,注意编写时不要写#{}
3>:open: 代表语句的开始部分
4>:close: 代表结束部分
5>:item: 代表遍历集合的每个元素,生成的变量名
5>:separator: 代表分隔符
4.<select<>
1>:抽取重复的语句代码片段
<sql id="defaultSql">
select * from user
</sql>
2>使用
include refid="defaultSql"></include>
六:能够掌握一对多,多对多的配置(重点)
1.表关系
1>:一对一 :人和身份证
2>:一对多 :用户和订单
3>:多对多 :学生和课程
2.实体中表示关系
1>:一对多:
一方实体中添加集合表示多方
多方实体中声明实体对象表示一方
2>:多对多:
双方实体中都添加集合表示对方
3.一对一查询中对返回结果集的封装
方式一:
定义专门的 pojo 类作为输出类型,其中定义了 sql 查询结果集所有的字段
方式二:
使用 resultMap,定义专门的 resultMap 用于映射一对一查询结果。
<association property="user" javaType="com.xxx.domain.user">
4.一对多查询对返回结果集的封装
使用 resultMap,定义专门的 resultMap 用于映射一对一查询结果。
<collection property="xxxx" ofType="xxxx">
5.多对多查询中对返回结果集的封装
使用 resultMap,定义专门的 resultMap 用于映射一对一查询结果。
两方使用的标签都是 <collection property="xxxx" ofType="xxxx">
七:mybatis中的注解开发
1.常用注解:
1>:@Insert:实现新增
2>:@Update:实现更新
3>:@Delete:实现删除
4>:@Select:实现查询
5>:@Result:实现结果集封装
6>:@Results:可以与@Result 一起使用,封装多个结果集
7>:@ResultMap:实现引用@Results 定义的封装
8>:@One:实现一对一结果集封装
9>:@Many:实现一对多结果集封装
10>:@CacheNamespace:实现注解二级缓存的使用
2.注解开发案例步骤
1>.编写实体类
2>.使用注解方式开发 持久层 接口@select
3>.编写 SqlMapConfig 配置文件
4>.编写测试方法
3.复杂关系映射的注解说明
1>.@Results 注解 : 代替的是标签<resultMap>
2>.@Resutl 注解:代替了 <id> 标签和<result> 标签
3>.@One 注解(一对一):代替了<assocation> 标签,是多表查询的关键,在注解中用来指定子查询返回单一对象
4>.@Many 注解(多对一):代替了<assocation> 标签,是多表查询的关键,在注解中用来指定子查询返回单一对象