官方的逆向工程工具生成的代码,其中mapper接口层的方法还是比较多的(完整版的),我这次就是来以一个User表为例,为每个方法添加了文档注释,给大家分享一下每个方法大致的功能,同时还会给出部分方法的使用的示例。
关于代码生成工具怎么用可以看我的Mybatis详解(二)这篇博客中的官方代码生成工具-Generator章节
在我的Mybatis详解(二)提过生成时可以选择两种生成的版本(不是命令行和maven):MyBatis3和MyBatis3Simple,其中前者是完整版的生成方法会比较全面,不过有时我们并不会用到那些扩展的方法,所以上文推荐的是后者(简洁版)。所以这次是来给这两种方式生成的方法的功能讲解下,主要是讲解完整版的。
简洁版
/**
* 提供对User表进行CRUD操作的接口
*
* @author 召
*/
public interface UserMapper {
/**
* 通过主键id删除用户信息
*
* @param id 用户的id
* @return 影响的行数
*/
int deleteByPrimaryKey(Integer id);
/**
* 添加用户信息
*
* @param record 要添加的用户的信息
* @return 影响的行数
*/
int insert(User record);
/**
* 通过主键id查询用户
*
* @param id 用户的id
* @return 查到的一个用户的信息
*/
User selectByPrimaryKey(Integer id);
/**
* 查询所有的用户信息
*
* @return 用户信息的集合
*/
List<User> selectAll();
/**
* 通过主键id更新用户全部信息
*
* @param record 用户的全部信息,某一属性为空,则该字段会被更新为空
* @return 影响的行数
*/
int updateByPrimaryKey(User record);
}
上面这种简洁版的看了我写的注释一般都已经明白了该方法的作用了,所以这个类中的方法我就不把测试的代码放出来了(再放上测试代码,这篇文章篇幅就太大了)。
完整版
考虑到有些读者可能会看到后面测试时会对条件的拼接有疑惑,这里先贴上我的User实体类,你们也可以根据实体类反向去创建表,然后再生成实体类、接口、xml文件等用来练习。
/**
* 用户实体类
*
* @author 召
*/
public class User {
/**
* 用户id字段,主键、自增
*/
private Integer id;
/**
* 用户昵称
*/
private String nickName;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 邮箱
*/
private String email;
/**
* 状态:1:正常;2:注销;3:锁定
*/
private Integer status;
/**
* 账户创建时间
*/
private Date createTime;
/**
* 账户最近登录时间
*/
private Date lastLoginTime;
/**
* set、get...
*/
下面是我的User表生成的Mapper接口中方法
/**
* 操作数据库中User表的接口
*
* @author 召
*/
public interface UserMapper {
/**
* 统计数量,根据条件
*
* @param example 条件
* @return long类型数量
*/
long countByExample(UserExample example);
/**
* 根据条件删除
*
* @param example 条件
* @return 影响行数
*/
int deleteByExample(UserExample example);
/**
* 通过注键id删除
*
* @param id 主键
* @return 影响行数
*/
int deleteByPrimaryKey(Integer id);
/**
* 插入用户数据
*
* @param record 用户的全部数据(若无为null)
* @return 插入的条数
*/
int insert(User record);
/**
* 插入需要的用户数据(动态拼接的SQL语句)
*
* @param record 需要插入的数据
* @return 插入条数
*/
int insertSelective(User record);
/**
* 根据条件查询
*
* @param example(动态条件)
* @return 结果集List
*/
List<User> selectByExample(UserExample example);
/**
* 根据用户的id查询
*
* @param id
* @return 一个用户对象
*/
User selectByPrimaryKey(Integer id);
/**
* 更新需要更新的数据,根据动态添加的条件更新
*
* @param record 需要更新的数据(动态拼接的SQL语句)
* @param example 动态条件
* @return 影响的行数
*/
int updateByExampleSelective(@Param("record") User record, @Param("example") UserExample example);
/**
* 通过动态条件更新(该用户的信息全部更新)
*
* @param record 用户的信息
* @param example 动态添加的条件
* @return 影响的行数
*/
int updateByExample(@Param("record") User record, @Param("example") UserExample example);
/**
* 通过主键id更新需要更新的用户信息
*
* @param record 需要更新的用户信息(动态拼接的SQL语句)
* @return 影响的行数
*/
int updateByPrimaryKeySelective(User record);
/**
* 根据主键更新该用户的所有的信息
*
* @param record 用户的信息
* @return 影响的行数
*/
int updateByPrimaryKey(User record);
}
下面是对其中的查询方法的两个测试示例,这两个示例就足以让读者们知道该怎么使用动态条件的添加了
/**
* 测试UserMapper中的方法
*
* @author 召
*/
public class UserMapperTest {
@Autowired
private UserMapper userMapper;
/**
* 测试selectByExample方法查询所有的用户数据
*/
@Test
public void testQueryAllUser() {
// UserExample类是代码生成工具生成的扩展类
List<User> userList = userMapper.selectByExample(new UserExample());
Assert.assertNotEquals("明明有数据呀?", 0, userList.size());
}
/**
* 测试selectByExample方法的动态添加条件的功能,查询部分用户的数据
*/
@Test
public void testQueryByExampleCondition() {
// 创建查询对象
UserExample condition = new UserExample();
// 下面的DataTime是一个专门处理日期类型的第三方依赖中的类(joda-time),读者可以换一个查询条件来练习
DateTime dateTime = new DateTime(new Date());
// 查询上周周一0点0分0秒到周日23点59分59秒注册的用户
Date start = dateTime.minusDays(7).withDayOfWeek(1).withHourOfDay(0).withMinuteOfHour(0).withSecondOfMinute(0).toDate();
Date end = dateTime.minusDays(7).withDayOfWeek(7).withHourOfDay(23).withMinuteOfHour(59).withSecondOfMinute(59).toDate();
// 创建查询条件对象
UserExample.Criteria criteria = condition.createCriteria().andCreateTimeBetween(start, end);
// 并且非锁定状态
criteria.andStatusNotEqualTo(3);
// 并且邮箱非空
criteria.andEmailIsNotNull();
/* Criteria对象是类似于查询条件组的概念,组与组之间可以用and、or关系
and关系直接通过example.createCriteria创建
or关系通过example.or()创建
下面就是创建了一个or关系的查询条件组 */
UserExample.Criteria orCriteria1 = condition.or();
orCriteria1.andStatusEqualTo(1);
List<User> userList = userMapper.selectByExample(condition);
System.out.println("上周注册的用户数: " + userList.size());
Assert.assertNotEquals("明明有数据呀?", 0, userList.size());
}
}
mybatis官方推荐的代码生成工具生成的mapper接口中的方法的用法解析到这里就结束了,虽然我只是用了其中的一个方法,但是其他的都是类似的,依次类推即可。觉得写的好的不用吝啬你们的小手点个赞吧,欢迎看官们关注,看我的后续博文。有问题欢迎在下方评论区留言哦。