就在今天,我完成了对mybatis的学习,我将再给自己一整天的时间练习mybatis的相关操作,但是在今天,我将对剩下的mybatis内容做出整理,他们分别为查询和处理功能,解决字段名和属性名不一致的方法,二级缓存,逆向工程
1.查询和处理功能
1.1通过list获取全部查询数据
如果想返回全部数据,以下这样是不行的
会报错
如果查询了多条数据, 要通过list或者map来接受
1.2通过map获取全部查询数据
1.3查询多条数据为map集合
放到集合里
1.4模糊查询
#{}应该这么写:
这么写也可以:
1.5.动态设置表名
1.6获取自动递增的主键
id有值了
2.解决字段名和属性名不一致的方法
字段名是依靠横线命名的,属性名是依靠驼峰命名的,怎么保持一致呢?
2.1为字段设置别名
其中empName为emp_name的别名
2.2设置配置文件全局变量
2.3resultmap设置
id设置主键的表名和字段名
result设置其他的表名和字段名
2.mybatis缓存
一级缓存是sqlsession级别的,通过同一个sqlsession查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会从数据库重新访问
使一级缓存失效的四种情况:
1.不同的sqlsession对应不同的一级缓存
2.同一个sqlsession但是查询条件不同
3.同一个sqlsession两种查询期间执行力任何一次增删改操作
4.同一个sqlsession两次查询期间手动清空了缓存
一级缓存是默认开启的,通过同一个sqlsession能够从一级缓存中获取数据
二级缓存
二级缓存是sqlsessionFactory级别,通过同一个sqlsessionFactory创建的sqlsession查询的结果会被缓存,此后若再次执行相同的查询语句,结果就会从缓存中获取
二级缓存开启的条件:
a.在核心配置文件中,设置全局配置属性cacheEnabled="true",默认true,不需要设置
b.在映射文件中设置标签<cache>
c.二级缓存必须在Sqlsession关闭或提交之后有效
d.查询的数据锁转换的实体类类型必须实现序列化的接口
使二级缓存失效的情况:
两次查询之间执行了任意的增删改,会使一级和二级缓存同时失效
让我们来看看效果
通过日志我们可以知道,第二次没有执行sql
3.逆向工程