UserMapper.xml
- 映射文件的namespace要和mapper的全类名保持一致
- 映射文件中SQL语句的id要和mapper接口中的方法名一致
SqlSession:代表Java程序和数据库之间的会话。HttpSession是Java程序和浏览器之间的会话MyBatisTest.java
SqlSessionFactory:是生产SqlSession的工厂
日志的级别:FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)增删改查
日志级别越低,打印越详细
查询功能必须指定resultType或resultMap
resultType:设置默认映射(字段名和属性名一致)
resultMap:设置自定义映射(一对多,多对一,字段名和属性名不一致)
properties、settings、typeAliases、typeHandlers、objectFactory、objectWrapperFactory、reflectorFactory、plugins、environments、databaseIdProvider、mappersmybatis-config.xml
${}:字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号单个字面量类型的参数
{}:使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号
{}中username可替换为任意值,${}要手动添加''Test.java
若mapper接口中的方法参数为多个时,此时MyBatis会自动将这些参数放在一个map集合中Test.java
{}中必须按照上面的参数写
- 以arg0,arg1…为键,以参数为值;
- 以param1,param2…为键,以参数为值;
mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合,将这些数据放在map中只需要通过${}和#{}访问map集合的键就可以获取相对应的值Test.java
通过访问实体类对象中的属性名获取属性值Test.java
可以通过@Param注解标识mapper接口中的方法参数,此时,会将这些参数放在map集合中Test.java
- 以@Param注解的value属性值为键,以参数为值
- 以param1,param2…为键,以参数为值
第三种方法最常用
在插入一条数据的同时就可以获得对应的id,不需要插入后再去查询对应数据的id
- useGeneratedKeys:设置使用自增的主键
- keyProperty:因为增删改有统一的返回值是受影响的行数,因此只能将获取的自增的主键放在传输的参数user对象的某个属性中
在mybatis-config.xml中添加配置后自动将下划线映射为驼峰mybatis-config.xml
所有属性都要列出来EmpMapper.xml
association用来处理多对一的映射关系EmpMapper.xml
javaType中是类型名
collection:用来处理一对多的映射关系
ofType:表示该属性对饮的集合中存储的数据的类型
Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串时的痛点问题if标签
if标签可以对test中接收到的属性值进行判断,为true则拼接if标签下的内容
where后加1=1为了更好实现拼接效果,防止出现拼接错误
相比直接使用if标签,where标签会自动清除多余的and和or,条件全不满足时where不起作用,不会出现拼接错误
但是where标签只能将内容之前多余的and和or清除,如果and和or放在拼接的语句之后,则不能清除
prefix/suffix:将trim标签中内容前面/后面添加指定内容
prefixOverrides/suffixOverrides:将trim标签中内容前面/后面去掉指定内容
相当于if...else if...else,只会执行一个
when至少要有一个,otherwise至多只有一个
collection:设置要循环的数组或集合
item:表示集合或数组中的每一个数据
separator:设置循环体之间的分隔符,分隔符前后默认有一个空格
open:开始符
close:结束符
,换成or
sql片段,可以记录一段公共sql片段,在使用的地方通过include标签进行引入
一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会从数据库重新访问MyBatis二级缓存
使一级缓存失效的四种情况:
- 不同的SqlSession对应不同的一级缓存
- 同一个SqlSession但是查询条件不同
- 同一个SqlSession两次查询期间执行了任何一次增删改操作
- 同一个SqlSession两次查询期间手动清空了缓存
二级缓存是SqlSessionFactory级别,通过同一个SqlSessionFactory创建的SqlSession查询的结果会被缓存;此后若再次执行相同的查询语句,结果就会从缓存中获取二级缓存相关配置
二级缓存开启的条件:
- 在核心配置文件中,设置全局配置属性cacheEnabled=“true”,默认为true,不需要设置
- 在xml映射文件中设置标签
- 二级缓存必须在SqlSession关闭或提交之后有效
- 查询的数据所转换的实体类类型必须实现序列化的接口
- 使二级缓存失效的情况:两次查询之间执行了任意的增删改,会使一级和二级缓存同时失效
在mapper配置文件中添加的cache标签可以设置一些属性:MyBatis缓存查询顺序
eviction属性:缓存回收策略
flushInterval属性:刷新间隔,单位毫秒
- LRU(Least Recently Used) – 最近最少使用的:移除最长时间不被使用的对象。
- FIFO(First in First out) – 先进先出:按对象进入缓存的顺序来移除它们。
- SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
- WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
- 默认的是 LRU
size属性:引用数目,正整数
- 默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句(增删改)时刷新
readOnly属性:只读,true/false
- 代表缓存最多可以存储多少个对象,太大容易导致内存溢出
- true:只读缓存;会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势。
- false:读写缓存;会返回缓存对象的拷贝(通过序列化)。这会慢一些,但是安全,因此默认是false
整合第三方缓存
- 先查询二级缓存,因为二级缓存中可能会有其他程序已经查出来的数据,可以拿来直接使用
- 如果二级缓存没有命中,再查询一级缓存
- 如果一级缓存也没有命中,则查询数据库
- SqlSession关闭之后,一级缓存中的数据会写入二级缓存
正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。创建逆向工程的步骤
逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成Java实体类,Mapper接口,Mapper映射文件。
文件名必须是generatorConfig.xmlgeneratorConfig.xml
MyBatis3Simple: 生成基本的CRUD
MyBatis3: 生成带条件的CRUD(使用最多)
双击mybatis-generator:generate6.通过Example进行查询演示
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |