MyBatis Generator 介绍
MyBatis Generator:简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的根据表生成对应的映射文件,接口,以及bean类。支持基本的增删改查,以及QBC风格的条件查询。但是表连接、 存储过程等这些复杂sql的定义需要我们手工编写。
QBC检索
QBC(Query By Criteria)是一种面向对象的查询方式,这种查询方式以函数API的方式动态地设置查询条件,组成查询语句。
使用QBC(Query By Criteria)API来检索对象。这种API封装了基本字符串形式的查询语句;提供了更加面向对象的接口,它主要由criteria接口,Criterion接口和Expression类组成,Criterion接口和Expression类组成,它支持在运行时动态生成查询语句。
步骤:
1.调用Session的createCriteria(0方法创建一个Criteria对象。
2.设定查询条件。Expression类提供了一系列用于设定查询条件的静态方法,这些静态方法都返回Criterion实例,每个Criterion实例代表一个查询条件,Criteria的add()方法用于加入查询条件。
3.调用Criteria的list()方法执行查询语句。该方法返回List类型的查询结果,在List集合中存放了符合查询条件的持久化对象
MyBatis Generator(MBG)会为每个字段产生如上的Criterion,如果表的字段比较多,产生的Example类会十分庞大。
- insert
- update by primary key
- update by example (using a dynamic where clause)
- delete by primary key
- delete by example (using a dynamic where clause)
- select by primary key
- select by example (using a dynamic where clause)
- count by example
mybatis自动生成example的使用
mybatis的逆向工程中会生成实例及实例对应的example,example用于添加条件,相当where后面的部分
xxxExample example = new xxxExample();
Criteria criteria = new Example().createCriteria();
example成员变量
//升序还是降序 //参数格式:字段+空格+asc(desc) protected String orderByClause; //去除重复 //true是选择不重复记录 protected boolean distinct; //自定义查询条件 //Criteria的集合,集合中对象是由or连接 protected List<Criteria> oredCriteria; //内部类Criteria包含一个Cretiron的集合, //每一个Criteria对象内包含的Cretiron之间 //是由AND连接的 public static class Criteria extends GeneratedCriteria { protected Criteria() { super(); } } //是mybatis中逆向工程中的代码模型 protected abstract static class GeneratedCriteria {…..} //是最基本,最底层的Where条件,用于字段级的筛选 public static class Criterion {……}
example常见方法
方法 | 说明 |
example.setOrderByClause(“字段名 ASC”); //注意:排序使用的是列名 example.setOrderByClause("create_time desc,update_time desc"); |
添加升序排列条件,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复杂用法
1. or查询
UserExample example = new UserExample(); UserExample.Criteria criteria1 = example.createCriteria(); UserExample.Criteria criteria2 = example.createCriteria(); if(!StringUtils.isNotBlank(user.getName())){ Criteria1.andNameEqualTo(user.getName()); } if(!StringUtils.isNotBlank(user.getSex())){ Criteria2.andSexEqualTo(user.getSex()); } example.or(criteria2); List<User> userList=userMapper.selectByExample(example);
类似于:select * from user where name={#user.name} or sex={#user.sex} ;