可以通过sql标签提高sql代码的复用性
定义代码片段
select count(*)
使用代码片段
进行条件判断,判断成功会把if内部SQL拼接到外部SQL中,否则不拼接
SQL语句
问题:直接使用if会出现多余的where和and、or等关键词
用于配置条件,会去掉多余的where、and、or关键词
select * from xx
SQL语句
用于配置update语句,用于去掉多余的,
update xx
列 = 值,
列 = 值,
...
where 条件
可以删除或添加前缀和后缀,用来拼接SQL
...
用trim代替set
..
用于循环拼接SQL
#{变量名}
List selectByIds(List ids);
--->
select * from employee where id in (1,2,3,4)
表之间有几种关联关系:
在进行数据库查询时,会遇到多张表相互关联的情况,下面以书籍和类型为例,配置最常见的一对多关系。
MyBatis映射文件中,在ResultMap里可以配置关联关系
主要有两种标签来映射关联属性:
collection 配置集合类型的属性
association 配置单独对象的属性
collection和association的相关参数:
配置一的一方,查询书籍类型时,能同时查询到该类型的所有书籍
1) 给类型添加书籍集合,这里需要使用collection
public class BookType {
private long id;
private String type;
//书籍的集合
private List books;
..
}
2) 书籍类型Mapper接口
public interface IBookTypeDAO {
/**
* 按id查书籍类型
* @param typeId
* @return
*/
BookType selectBookTypeById(int typeId);
}
3) 在Book映射接口中定义方法
/**
* 根据类型id查询所有书籍
* @param typeId
* @return
*/
List selectBooksByTypeId(int typeId);
4) BookType的映射文件
这里使用的是子查询的机制,在查询书籍类型后,将每个类型id作为参数,调用书籍接口的selectBooksByTypeId方法查询书籍集合。
连接查询方式
select d.*,e.* from department d join employee e on d.dept_id = e.emp_dept_id
配置多的一方,通过书籍查询到它所属的类型
/**
* 书籍
*/
public class Book {
...
/书籍类型
private BookType bookType;
2)书籍映射文件中,使用association配置bookType属性
连接查询
-- select * from employee
select d.*,e.* from department d join employee e on d.dept_id = e.emp_dept_id