一、mapper 接口中的方法解析

mapper 接口中的函数及方法

方法功能说明
int countByExample(UserExample example) thorws SQLException按条件计数
int deleteByPrimaryKey(Integer id) thorws SQLException按主键删除
int deleteByExample(UserExample example) thorws SQLException按条件查询
String/Integer insert(User record) thorws SQLException插入数据(返回值为 ID)
User selectByPrimaryKey(Integer id) thorws SQLException按主键查询
ListselectByExample(UserExample example) thorws SQLException按条件查询
ListselectByExampleWithBLOGs(UserExample example) thorws SQLException按条件查询(包括 BLOB 字段)。只有当数据表中的字段类型有为二进制的才会产生。
int updateByPrimaryKey(User record) thorws SQLException按主键更新
int updateByPrimaryKeySelective(User record) thorws SQLException按主键更新值不为 null 的字段
int updateByExample(User record, UserExample example) thorws SQLException按条件更新
int updateByExampleSelective(User record, UserExample example) thorws SQLException按条件更新值不为 null 的字段

二、example 实例解析

mybatis 的逆向工程中会生成实例及实例对应的 example,example 用于添加条件,相当 where 后面的部分
xxxExample example = new xxxExample();
Criteria criteria = new Example().createCriteria();

方法说明
example.setOrderByClause(“字段名 ASC”);添加升序排列条件,DESC 为降序
example.setDistinct(false)去除重复,boolean 型,true 为选择不重复的记录。
criteria.andXxxIsNull添加字段 xxx 为 null 的条件
criteria.andXxxIsNotNull添加字段 xxx 不为 null 的条件
criteria.andXxxEqualTo(value)添加 xxx 字段等于 value 条件
criteria.andXxxNotEqualTo(value)添加 xxx 字段不等于 value 条件
criteria.andXxxGreaterThan(value)添加 xxx 字段大于 value 条件
criteria.andXxxGreaterThanOrEqualTo(value)添加 xxx 字段大于等于 value 条件
criteria.andXxxLessThan(value)添加 xxx 字段小于 value 条件
criteria.andXxxLessThanOrEqualTo(value)添加 xxx 字段小于等于 value 条件
criteria.andXxxIn(List<?>)添加 xxx 字段值在 List<?> 条件
criteria.andXxxNotIn(List<?>)添加 xxx 字段值不在 List<?> 条件
criteria.andXxxLike(“%”+value+”%”)添加 xxx 字段值为 value 的模糊查询条件
criteria.andXxxNotLike(“%”+value+”%”)添加 xxx 字段值不为 value 的模糊查询条件
criteria.andXxxBetween(value1,value2)添加 xxx 字段值在 value1 和 value2 之间条件
criteria.andXxxNotBetween(value1,value2)添加 xxx 字段值不在 value1 和 value2 之间条件

三、应用举例

1. 查询

① selectByPrimaryKey()

User user = XxxMapper.selectByPrimaryKey(100); //相当于select * from user where id = 100

② selectByExample() 和 selectByExampleWithBLOGs()

UserExample example = new UserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("wyw");
criteria.andUsernameIsNull();
example.setOrderByClause("username asc,email desc");
List<?>list = XxxMapper.selectByExample(example);
//相当于:select * from user where username = 'wyw' and  username is null order by username asc,email desc

注:在 iBator 逆向工程生成的文件 XxxExample.java 中包含一个 static 的内部类 Criteria,Criteria 中的方法是定义 SQL 语句 where 后的查询条件。

2. 插入数据

①insert()

User user = new User();
user.setId("dsfgsdfgdsfgds");
user.setUsername("admin");
user.setPassword("admin")
user.setEmail("[email protected]");
XxxMapper.insert(user);
//相当于:insert into user(ID,username,password,email) values ('dsfgsdfgdsfgds','admin','admin','[email protected]');

3. 更新数据

①updateByPrimaryKey()

User user =new User();
user.setId("dsfgsdfgdsfgds");
user.setUsername("wyw");
user.setPassword("wyw");
user.setEmail("[email protected]");
XxxMapper.updateByPrimaryKey(user);
//相当于:update user set username='wyw', password='wyw', email='[email protected]' where id='dsfgsdfgdsfgds'

②updateByPrimaryKeySelective()

User user = new User();
user.setId("dsfgsdfgdsfgds");
user.setPassword("wyw");
XxxMapper.updateByPrimaryKey(user);
//相当于:update user set password='wyw' where id='dsfgsdfgdsfgds'

③ updateByExample() 和 updateByExampleSelective()

UserExample example = new UserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("admin");
User user = new User();
user.setPassword("wyw");
XxxMapper.updateByPrimaryKeySelective(user,example);
//相当于:update user set password='wyw' where username='admin'

updateByExample() 更新所有的字段,包括字段为 null 的也更新,建议使用 updateByExampleSelective() 更新想更新的字段

4. 删除数据

①deleteByPrimaryKey()

XxxMapper.deleteByPrimaryKey(1);  //相当于:delete from user where id=1

②deleteByExample()

UserExample example = new UserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("admin");
XxxMapper.deleteByExample(example);
//相当于:delete from user where username='admin'

5. 查询数据数量

①countByExample()

UserExample example = new UserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("wyw");
int count = XxxMapper.countByExample(example);
//相当于:select count(*) from user where username='wyw'