概述
整合:
1、Mybatis自动生成的Example类的使用与解析
2、MyBatis的Mapper接口以及Example的实例函数及详解
一、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之间条件 |
三、Example查询流程
其实很简单,跟一下代码就能知道大概的流程,不信我们来跟一下,这里以我的代码为例
如图,我们可以看到,我这里查询产品标签的时候就直接封装标签实体类对应的Example类,先创建一个Example类,然后组装条件,调用dao接口查询
如图,我们调的就是这个dao接口,参数就是example类 ,然后dao调用mybatis对应的xml文件
如图,最终调的就是这个xml文件中的这个select,可以看到, 它对我们组装的SQL先判断了是否需要去重,如果我们前面调用了example.setDistinct(true),那在这个地方就会加上distinct关键字,往下走,它使用include标签组装了一个查询所有列的动态SQL,其实就是把所有列名添加进去了,如下图:
再往下,重点来了,它在内部封装了一个“_parameter”,就是我们的参数,判断参数如果不为空,则再加一段sql,一段动态组装我们添加的条件的sql片段,如下图
在这个片段中mybatis通过遍历Criteria对象来获取我们组装的条件集合,为什么我们的条件会在Criteria中呢?不是用Example类组装的吗?莫慌,我们回头看一下,小伙伴们会发现我们前面所说的Example类的方法除了排序和去重之外,其他的都需要先createCriteria()才能添加条件,什么情况呢?看图你就知道了
可以看到,我们的Example类中还有三个静态内部类 这三个内部类各司其职,首先,我们调用example.createCriteria()来创建了一个GeneratedCriteria对象的子类对象Criteria,然后我们组装条件时Criteria对象调用父类方法进行组装,都组装到了Griterion对象集合中,也就是父类的criteria属性。也就是说除了排序和去重之外,我们每组装一个条件都在Griterion对象集合中添加了一个元素,然后在xml文档中遍历这个集合,判断这个集合的每个属性是否为空,不为空则说明我们组装的有对应的条件,然后添加条件到sql中。如果觉得有点迷糊的话,看看下面的图也许你会明白点
创建 Criteria对象
组装条件的方法
调用的方法其实就是将条件封装到了Griterion对象集合中
最后在xml中遍历添加
这就是完整的Example类的组装SQL流程。
最后
以上就是自由黄蜂为你收集整理的Mybatis自动生成的Example类详解的全部内容,希望文章能够帮你解决Mybatis自动生成的Example类详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复