MyBatis笔记
发布网友
发布时间:2024-10-09 12:35
我来回答
共1个回答
热心网友
时间:2024-10-09 15:04
相关视频请移步到bilibili尚硅谷
相关代码请访问GitHub mybatis官方中文文档 文章及相关代码正在更新中
核心配置文件精简版
注意:当"http://mybatis.org/dtd/mybatis-3-config.dtd"设置为https时,idea无法识别xml中的sql,具体原因暂时未知
jdbc.properties配置文件
详细的内容
核心配置文件中的标签必须按照固定的顺序(有的标签可以不写,但顺序一定不能乱):properties、settings、typeAliases、typeHandlers、objectFactory、objectWrapperFactory、reflectorFactory、plugins、environments、databaseIdProvider、mappers
阿里巴巴druid数据源mapper配置文件简单的测试mapper配置文件的详细配置若使用别名需要在mybatis-config.xml中设置如果有多个参数mapper接口的方式有三种方式特殊的SQL语句解决模糊查询多行删除动态表名查询获取自增主键自定义映射resultMap
出现字段名不匹配的时候解决方法(处理映射关系):方法一:通过起别名的方式映射
方法二:当字段符合下划线_,而属性符合java的要求使用驼峰,在mybatis-config.xml开启驼峰命名自动映射
方法三:自定义映射规则 设置resultMap
处理多对一查询
方法一:级联方式处理
方法二:使用association属性处理
方法三:分步查询 EmpMapper.java
EmpMapper.xml
DeptMapper.java
DeptMapper.xml
分步查询的优点:可以实现延迟加载,配置延迟需要在核心配置文件中设置全局配置信息 lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。aggressiveLazyLoading:开启时,任一方法的调用都会加载该对象的所有延迟加载属性。否则,每个延迟加载属性会按需加载(参考 lazyLoadTriggerMethods)。当开启全局延迟加载时可配置mapper.xml配置文件中的association标签下的fetchType进行设置eager(立即加载)/lazy(延迟加载)
处理一对多查询
方法一:级联方式处理
动态SQL
根据特定条件拼装SQL语句
if、where、trim标签
多条件查询遇到的问题:因为sql的语法限制(sql中where后面不能直接放and出现并且where不能为结尾)
方法一:where后添加恒成立条件
方法二:添加where标签
方法三:自定义标签trim
choose、when、otherwrise标签
相当于java中的if...else if...else when:当前面的when成立后不再执行后面的when otherwrise:是指的其他情况
foreach标签
实现批量插入数据
实现批量删除 方法一:
方法二:
方法三:
sql标签
自定义sql片段通过include标签引入(refid属性指定id) 例如:
MyBatis缓存
MyBatis缓存分为一级缓存和二级缓存,注意:一级缓存默认开启 缓存是指查询数据会被缓存,下次查询相同数据时直接从缓存获取,不会再次访问数据库 一级缓存为SqlSession级别,二级缓存为SqlSessionFactory级别
一级缓存
mybatis的一级缓存是sqlSession级别的,也就是同一个SqlSession查询相同的数据时从缓存中查询,不用执行sql语句 sqlSession失效的四种情况:
二级缓存
mybatis的二级缓存是sqlSessionFactory级别的,也就是同一个sqlSessionFactory查询相同的数据时从缓存中查询,不用执行sql语句 二级缓存开启的条件:
sqlSessionFactory失效情况:
cache标签的相关配置
可用的清除策略有:
默认的清除策略是 LRU。flushInterval(刷新间隔)属性可以被设置为任意的正整数,设置的值应该是一个以毫秒为单位的合理时间量。默认情况是不设置,也就是没有刷新间隔,缓存仅仅会在调用语句时刷新。size(引用数目)属性可以被设置为任意正整数,要注意欲缓存对象的大小和运行环境中可用的内存资源。默认值是 1024。readOnly(只读)属性可以被设置为 true 或 false。只读的缓存会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这就提供了可观的性能提升。而可读写的缓存会(通过序列化)返回缓存对象的拷贝。速度上会慢一些,但是更安全,因此默认值是 false。
mybatis缓存的查询顺序
先查询二级缓存,如果二级缓存没命中,再查询一级缓存,如果一级缓存没命中,则查询数据库 sqlSession关闭后,一级缓存中的数据会被写到二级缓存中
整合第三方缓存
处理的是二级缓存
整合EHCache
依赖
在resources下创建ehcache.xml
设置二级缓存类型
mapper.xml中的cache标签指定缓存类型
配置logback日志
存在SLF4J时,作为简易日志的log4j将失效,此时我们需要借助SLF4J的具体实现logback来打印日志。创建logback的配置文件logback.xml
EHCache配置文件说明mybatis逆向工程
正向工程:实体类生成sql。如:Hibenmate、jpa 逆向工程:数据库表生成资源文件
导入依赖逆向工程配置文件
generatorConfig.xml
配置之后点击插件mybatis-generator即可生成逆向工程
分页插件
limit(分页关键字) 、index、pageSize pageSize: 每页显示条数 pageNum: 当前页的页码 index: 当前页的起始索引: $index=(pageNum-1)\times pageSize$ cout:总记录数 totalPage:总页数
首页 下一页 2 3 4 5 上一页 尾页
依赖
mybatis核心配置文件添加mybatis-config.xml
测试类
第二种: 方式 官方文档
pageInfo
pageInfo属性值: