MyBatis
2022-11-18 08:45:49 1 举报
AI智能生成
MyBatis知识点
作者其他创作
大纲/内容
1 想想JDBC、Hibernate、JPA等ORM映射框架是如何进行持久层操作的?
2 既然已经有了上述那么多的ORM框架,MyBatis为什么出来?
入门思考
Ibatis
Mybatis
是什么
能干嘛
去哪下
建工程+添jar包
打开mysql新建数据库+建表person
第二种
第一种
log4j.xml
修改mybatis配置文件,数据库连接配置,先用直连后续换c3p0
建对应的entity持久化实体
建Mapper接口并定义好方法
假如没有自动提示
建对应Mapper接口的XML映射文件
将MapperXML映射文件配置进mybatis-config.xml
编写Junit单元测试类,执行CRUD操作
永远的HelloWorld
XXXMapper.xml文件中,namespace必须是接口全路径
XXXMapper.xml中的id必须是接口里面的方法名 ,两者一致
XXXMapper.xml中的parameterType类型必须和对应方法的形参一致
XXXMapper.xml中的resultType类型必须和对应方法的返回值类型一致
XXXdao接口--------XXXMapper.java
XXXdao接口Impl实现类--------XXXMapper.xml
定义:只需要编写mapper接口的(等价于传统的dao接口),Impl实现类,也即动态代理+面向接口
mapper接口实现动态代理对象
第一个入门case的小结
Sql语句配置在XXXXmapper.xml文件中与java代码分离
数据库连接池
Where条件的频繁变化,Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。
相对于JDBC
Hibernate太重,mybatis轻量级
严格来说,Mybatis是个半自动化的SQL Mappering映射框架,因为MyBatis需要程序员自己编写Sql语句
学习门槛低,简单易学,看官网文档都知道,不到100页,可以快速上手。程序员直接编写原生态sql,可严格控制sql执行性能,sql在手,天下我有。
相对于Hibernate
相对于JPA
相对于Spring Data
再次和JDBC、Hibernate、JPA对比学习mybatis解决了哪些问题,为何有它一席之地
怎么玩
主要概念
入门
Dao接口
DaoImpl
传统Dao
还是以PersonMapper.java为例,再来一次CRUD,调用mybatis的crud提供的其它API,重写测试类,其它不用变
Myabtis的CRUD操作常用API
新写接口
在接口的方法上面新增注解
到mybatis的配置文件里面注册该接口类(含注解)
测试,通过getMapper重新获得注解接口版的XXXMapper.class
Mybatis也是支持注解,^_^
Mapper+Annotation入门增强
MyBatis的XML配置文件包含了影响MyBatis行为甚深的设置和属性信息
src文件夹下面新建db.properties
修改mybatis-config.xml
properties 属性
settings 全局参数定义
别名是为 Java类型命名一个短的名字。它只和 XML 配置有关,只用来减少类名重复的部分。配置了mybatis-config.xml会影响XXXMapper.xml的使用
默认
单个
多个
自定义
typeAliases 别名处理器
用于java类型和jdbc类型映射
Mybatis的映射基本已经满足,不太需要重新定义
typeHandlers 类型处理器
environment 环境变量
transactionManager 事务管理器
dataSource 数据源
environments 环境
resource:XXXMapper.xml文件
class:接口注解实现
不建议使用
url:外部路径
package
mappers 映射器
configuration
Mybatis的XML映射配置文件mybatis-config.xml
有自增Mysql
无自增Oracle
Person插入数据后想获得主键
主键生成方式
如果需要额外功能请自行文档
insert、delete、update、select
传入简单类型,比如按照id查Person(前面已讲过)
新建表tbl_cat
新建Cat.java
新建CatMapper接口+方法public Cat getCatByConditions(Cat cat)
新建CatMapper.xml
通配注册或单独注册进mybatis配置文件,否则报:is not known to the MapperRegistry
新建单元测试类
接口新建方法getCatByCatName
测试
#{ }
分支主题
面试题
${ }
建议
演示下like并讲解
传入POJO类型,前台选了多个条件
接口新增方法
映射文件
测试类
传入HashMap
口袋POJO,混合型传入参数,进公司看团队技术流风格
parameterType(输入参数类型)
说明:select的各个字段名称作为map的key,值写入value
接口
输出hashmap
resultType(输出参数类型)
POJO里面的field和数据库表里面column一一对应的话,resultType可以指定pojo将查询结果映射为pojo
新建tbl_dog
新建Dog.java
新建DogMapper.xml
通配注册或者新注册到Mybatis配置文件
DogMapper.xml
test code
test
假如不一致那?新建Dog演示
问题
别名查询
结果映射
resultMap(结果集映射)
SQL映射的XML文件XXXMapper.xml
概述
建表
建entity
建接口
建Mapper映射文件
注册
测试,public List getByAge(int age);
新建Student演示
接口方法
传入单参数age返回List,有就拼接没有就不参与,按照年龄查学生
重点难点:单参数时,mybatis找不到参数错误现象和处理
if
Mapper文件
where子句以and 或者or开头,它会自动删除第一个and或者or
一般建议Where和if结合起来用
where
类似switch
choose/when/otherwise
SQL里面的IN查询
if+where+foreach
foreach
前后缀动态覆盖拼装insert
trim
会动态前置set关键字
自动删除最后一个英文逗号
动态包含需要更新的列set+if
修改操作需要commit提交
set
动态SQL
总结+面试题分析
Mybatis官方提供的逆向工程,可以将单表生生成常用的Mapper、entity等配置
从数据库表反向生成mapper.java/mapper.xml/entity/辅助查询类
有数据库表提供给MyBatisGenerator反向生产素材
打开mybatis-generator-core-1.3.2-bundle\\mybatis-generator-core-1.3.2\\docs里面的文档照着官网配置
3.1 概览
3.2获悉那几个方面可以获得Running MyBatis Generator
3.3 generatorConfig.xml
3.4 生成映射的java工具类
带同学们读读官方文档直至获得generatorConfig.xml
拷贝出entity/mapper/mapper.xml
注意事项
Mybatis逆向工程
spring3.0以下不支持mybatis
添jar包
db.properties
扫描包
C3P0数据库引入
配置mybatis的SqlSessionFactory
配置事务管理
配置MapperScannerConfigurer
applicationContext.xml
新建mybatis配置文件mybatis-config.xml
User.java
UserMapper.java
UserMapper.xml
新建entity+Mapper接口/XML配置+Service
测试调用
Spring+Mybatis
介绍
建表tbl_user
UserMapper接口和方法
UserMapper.xml实现
通配注册或新增注册到配置文件
演示缓存失效情况
案例步骤
原理结论
一级缓存
mybatis-config.xml配置中开启显示的定义二级缓存
提醒,用二级缓存时entity类必须实现序列化接口
添加一个在userMapper.xml
测试+效果
Cache参数解释
禁用二级缓存
刷新(清空)二级缓存
一级缓存和二级缓存的使用顺序
要想使某条 Select查询支持二级缓存的前提条件
二级缓存
mybatis已经有1、2级缓存了为什么还要ehcache
ehcache.xml配置,用自定义的
开启ehcache缓存
mybatis整合Ehcache
查询缓存
新建数据表+新增内容数据
Mapper接口
对应接口的Mapper.xml
通配注册或在mybatis-config.xml里面新增映射配置
通用步骤
KeyMapper.java
LockMapper.java
Mapper接口定义
KeyMapper.xml定义
LockMapper.xml实现,第一种(ResultMap+连接查询)
LockMapper.xml实现,第二种(ResultMap+select分段查询)
配置版
KeyMapperAnnotation
LockMapperAnnotaion
测试类junit
注解版
一对一
建表+自己手工新增数据
手动新增数据
需求:dept和emp
Dept.java
Emp.java
新建DeptMapper.xml
新建EmpMapper接口和方法
新建EmpMapper.xml
测试junit,查出一个部门下所有员工
先是单向1:N,一个部门下有多个员工
Emp类里新增定义 private Dept dept;
接口EmpMapper新增方法getEmpById
修改EmpMapper.xml
测试junit,查出某员工属于哪个部门
再来双向1:N,每一个员工都属于一个部门
新建接口DeptMapperAnnotation+添加注解
新建接口EmpMapperAnnotation+添加注解
通配注册或新增注册进mybatis配置文件
测试1:N
修改EmpMapperAnnotation接口
一对多
关联查询
MyBatis
0 条评论
回复 删除
下一页