mybatis篇
1.接口和xml如何映射:xml里写接口的全路径名为namespace(命名空间),每个sql标签的id为方法名,进行映射
2.resultType属性:映射成一个pojo类(数据库字段和类中的属性完全匹配,如果不一致,但是数据库是下划线,java类是驼峰命名,则可以通过配置一个属性为true来进行自动映射转换)
3.resultMap属性(标签):
使用场景:自定义转换规则,数据库字段名和java类属性不一致时,自定义转换规则;
多表联查时使用:assocate:一对一 collection:一对多
在一个标签中,要么使用resultType,要么使用resultMap,两者只能用一个.
4.@Param注解:mybatis方法默认只支持一个参数,当想传入多个参数时,要么封装成一个pojo当参数,要么加@Param来写多个注解。@Param的作用是给多个参数起别名,在xml中用别名映射参数。一些特定的场景,如在动态sql中传参,或者xml中使用$传参,方法中的参数也都要加@Param注解。
5.#{}:进行预编译,自动加单引号,不会发生sql注入,一般都是用#{}
${}:不进行预编译,是什么就传什么,容易发生sql注入。
6.<where>标签:判断where里的条件是否满足加where的条件,如果有,自动加where+条件,如果没有,则where自动取消,不加where。
7.mybatis如何进行批量操作:用foreach标签进行批量操作;使用mybatis的批量执行器进行批量操作。多次操作在一个事物里面完成。
8.foreach标签的应用场景:sql中有in关键字时,in后面的值,可以用foreach标签进行循环拼接,这样的话,在代码参数中,就可以传入list或数组即可。
9,mybatis-generator 逆向工程:
10.mybatis缓存:
一级缓存:默认开启,生命周期是sqlSession级别,在同一个sqlSession中(同一次连接),如果执行的方法,传入的参数都一致,则第二次走一级缓存。如果在一个sqlSession中,存在了增删改操作,则不再走缓存,会清空缓存。一级缓存不会产生脏读。因为只存在于一个线程中,操作数据的时候,会对数据加锁,所以不会发生脏读。
二级缓存:sqlSessionFactory级别缓存。二级缓存是以namespace为单位的。不同的namespace下的操作互补影响。不同namespace下的方法,有各自的缓存,不会影响。二级缓存容易出现脏读。数据不能及时更新到缓存中。所以用可控的redis做缓存。