1.Mybatis的优点
①sql语句写在xml中,与Java代码解耦
②mybatis不需要手动开关数据库连接
③mybatis能够很好与Spring集成
④很好的与各种数据库兼容,只要JDBC支持的数据库,mybaits都支持
2.#{}和${}的区别是什么?
#{}是预编译处理,${}是字符串替换
具体例子如下:
①seleclt * from user where id = #{};
如果传入的值为7,那么sql语句具体为:
select * from user where id = ‘7’,加上了单引号
②select * from user where id = ${};
如果传入的值为7,那么sql语句具体为:
select * from user where id = 7,没有双引号
#{}是预编译处理的,能够有效防止sql注入,比较安全,所以能用#{}尽量用#{},
但是在替换表名、属性名的时候,需要用 ${}
3.当实体类中的属性名和表中的字段名不一样 ,怎么办?
起别名,让字段名的别名和实体类中的属性名一致
4.一级缓存和二级缓存
一级缓存是每个sqlsession独享的,每创建一个sqlsession都有一个一级缓存,当该sqlsession关闭后,一级缓存就清空了
二级缓存是多个sqlsession共享的,一个sqlsession关闭后,并不会清空二级缓存
一级缓存和二级缓存的作用基本上是一致的,都是把一次查询结果放到缓存中去,下一次查询的时候就会先从缓存中找有没有记录,有的话直接返回,没有再去数据库里查询,减少了数据库的负担,
但是有增、删、改的时候就会清空缓存,避免脏读