Mybatis相关知识
Mybatis之多参传递
注解方式传递参数
1.在mappper.xml中编写相关sql语句
2.在接口中用注解传递参数
//注解方式传多个参数,xml里不用写parameterType
public Users findUserByNameAndSex(@Param("name")String name,@Param("sex")String sex);
3.也可以使用注解方式编写sql语句
@Select("select * from user where username = #{name} , sex = #{sex}")
public Users findUserByNameAndSex2(@Param("name")String name,@Param("sex")String sex);
包装类传递参数
将所需参数封装到一个包装类里
特别地:如果需要将一个类作为参数封装到一个包装类里,调这个类里的属性需要用 "."
Map方式
一般用于只传递两个参数进入查询语句,将这两个参数封装到Map中。
在mapper中,Map默认别名为map
别名
别名:实体类中的名字与数据库中的不一致。使用resultMap高级映射
resultMap用于高级映射 实体类与表不一致,自定义结果映射集 type:指向映射的对象类
property:实体类的属性名
在xml文件里设置别名
//column 是数据库中的名字 property 是类中的属性
//resultType改为resultMap resultMap中的内容与id一致
sql语句拼接
利用动态sql实现根据用户传入参数不同,自动完成查询条件的变化
查询中常用的sql语句拼接
where: 相当于sql中的where 不同是where标签不会编辑到sql中 where会去前and
if:判断 test:判断条件
Integer默认值是"" , 但int默认值为0 建议使用integer
实例:
增加中常用的sql语句
insert into users
id,
username,
#{id},
#{username},
sql语句封装
定义sql片段
可以将常用的sql语句单独定义出来,需要的时候调用
select * form users
封装到类
将sql语句封装到类里,在接口中调用封装类
@SelectProvider(type = UserSqlProvider.class,method="queryUserById")
public Users findUserById(Integer id);
封装类
public String queryUserById(int id) {
return "select * from user where id = #{id}";
}
//注意and 前面的空格
public String queryUserByExample(Users user) {
String sql = "select * from user where 0=0";
if(null != user.getId()) {
sql+=" and where id = #{id}";
}
if(user.getName() != null) {
sql+=" and name = #{name}";
}
return sql;
}
结构化sql语句
//结构化sql语句
public String queryUserByName() {
//String sql = "select * from user where name like '%'#{name}'%'";
SQL sql = new SQL();
String str=sql.SELECT("*").FROM("user").WHERE("name like concat('%',#{name},'%')").toString();
return str;
}
sql语句中的遍历
在sql语句中传入一个集合,然后遍历集合中的数据,用于执行相关操作
foreach:遍历 如果是集合,直接传递过来List Map 和Array 有默认别名 首字母小写
item:遍历时的元素
open:开始遍历时添加
close:遍历结束时添加
separator:不同元素之间的分隔符
如果是在传进来的封装类中有一个list属性,collection里直接写数组的属性名
注解式遍历
@Select({""})
public List findUserByExample(Users user);