1.1mybatis中sql语句使用#和$的区别
区别在于:#号和$符都可以进行取值,但是使用#执行时sql会进行预编译。
预编译的功能:增加性能(每次使用完sql语句mybatis会自动缓存下来,下一个一样的语句会直接使用编译后的sql)、防止sql注入。
使用#:
使用$:
1.2在插入数据后立即获取新数据的主键
需要加入注释,第一个表示需要获取的主键为id,第二个表示我要立即获取主键。
使用方法:直接就可以获取到
1.3如果实体类属性(驼峰命名法)和数据库属性(不区分大小写,用下划线)命名不一致,解决办法。
方案一: 给字段起别名, 让别名与实体类属性一致,第二行就是别名。
@Select("select id, username, password, name, gender, image, job, entrydate, " +
"dept_id deptId, create_time createTime, update_time updateTime from emp where id = #{id}")
public Emp getById(Integer id);
方案二: 通过@Results, @Result注解手动映射封装。一个@Result对应封装一个。
@Results({
@Result(column = "dept_id", property = "deptId"),
@Result(column = "create_time", property = "createTime"),
@Result(column = "update_time", property = "updateTime")
})
@Select("select * from emp where id = #{id}")
public Emp getById(Integer id);
方案三:开启驼峰命名自动映射开关,a_cloumn ------> aColumn
1.4mybatis动态SQL
当查询时不需要所有条件都满足时,SQL语句就不能固定,因为传入值不一样。
使用where语句,会自动除去多余的and甚至where。
使用if语句即可,满足条件会自动拼接SQL语句。
1.5动态SQLforeach标签,用于批量操作
collection:遍历的集合
item:遍历出来的元素
separator:分隔符
open:遍历前拼接的字符串
close:遍历后拼接的字符串
1.6动态SQL抽取重复select语句
select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time
from emp
这段代码是重复的,抽取出来每次加上即可。
1.7分页查询插件PageHelper
进行分页查询普通操作:
传入两个值,页数和每页大小。
引入插件后操作,先引入maven,只需要配置PageHelper的开始和页面大小,使用select * from table就可以完成条件查询。