mybatis 插入数据返回id?
<insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User">
insert into user(userName,password,comment)
values(#{userName},#{password},#{comment})
</insert>
useGeneratedKeys=“true” 表示给主键设置自增长
keyProperty=“userId” 表示将自增长后的Id赋值给实体类中的userId字段。
parameterType=“com.chenzhou.mybatis.User” 这个属性指向传递的参数实体类
[mybatis] mybatis中# 和$区别?
#{}: 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符 。
${}: 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。
[mybatis] mybatis一级缓存,二级缓存?
二级缓存介绍:
二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。
UserMapper有一个二级缓存区域(按namespace分),其它mapper也有自己的二级缓存区域(按namespace分)。每一个namespace的mapper都有一个二级缓存区域,两个mapper的namespace如果相同,这两个mapper执行sql查询到数据将存在相同的二级缓存区域中。
开启二级缓存:
a.在MyBatis的配置文件中加入:
b.在需要开启二级缓存的mapper.xml中加入caceh标签
<!-- eviction LRU flushInterval缓存时间,以毫秒为单位 size缓存大小 readOnly如果为false的话,缓存对象必须是可序列化的
这里配置Cache对象。这里的eviction参数提到几个算法策略:
LRU:(Least Recently Used),最近最少使用算法,即如果缓存中容量已经满了,会将缓存中最近做少被使用的缓存记录清除掉,然后添加新的记录;
FIFO:(First in first out),先进先出算法,如果缓存中的容量已经满了,那么会将最先进入缓存中的数据清除掉;
Scheduled:指定时间间隔清空算法,该算法会以指定的某一个时间间隔将Cache缓存中的数据清空;-->
<cache eviction="LRU" type="org.apache.ibatis.cache.impl.PerpetualCache"
flushInterval="120000" size="1024" readOnly="true" />
c.让使用二级缓存的POJO类实现Serializable接口
public class User implements Serializable {}
需要注意的地方:
1)对该表的操作与查询都在同一个namespace下,其他的namespace如果有操作,就会发生数据的脏读。
2)对关联表的查询,关联的所有表的操作都必须在同一个namespace。
https://www.cnblogs.com/QQParadise/articles/5109633.html
http://www.cnblogs.com/sword-successful/p/7468754.html
https://www.cnblogs.com/yuluoxingkong/p/8205858.html
spring集成mybatis后,打印SQL语句
mybatis-config.xml:打印SQL只需要加一个setting就可以了。
mybatis的日志打印方式比较多,SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING,可以根据自己的需要进行配置