对mybatis逆向工程生成example对象的应用
一、什么是example类mybatis的逆向工程中会生成实例及实例对应的example,example用于添加条件,相当where后面的部分,下图符上example和criteria的对象怎么new,其实example对象是mybatis的逆向工程生成的。
mybatis-generator会为每个字段产生如上的Criterion,如果表的字段比较多,产生的Example类会十分庞大。理论上通过example类可以构造你想到的任何筛选条件。在mybatis-generator中加以配置,配置数据表的生成操作就可以自动生成example了。
一、对example类的应用
package com.example.demo.service;
import com.example.demo.common.ResponseBody;
import com.example.demo.dao.UserMapper;
import com.example.demo.entity.User;
import com.example.demo.utils.PageUtils;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import java.util.Map;
/**
* Description:
* 1. 业务层负责处理上层转发下来的请求,进行参数判断,错误处理或抛出,业务逻辑处理,并向下层(持久层)请求需要的数据
* 2. 将处理结果(成功与否,提示信息,处理产生的数据)封装为请求体 (ResponseBody)
* 3. 将处理结果返回给上层,由上层封装到响应报文中返回给请求方
*
* @AuThor yangzhaoyunfei yangzhaoyunfei@qq.com
* @date 18-9-20
*/
@Service
public class UserService {
@Autowired
private UserMapper mapper;
/**
* example 极大方便了单表的 crud 对多表级联还是原生 sql 强大
* Criterion 单个条件(单数)
* Criteria 多个条件(复数)(其中的 Criterion(单) 通过 and / or 等相连,并被外围的一个括号包围),比如:
* <p>
* where Criteria1( Criterion1 and Criterion2 and ( Criterion3 or Criterion4) ) or Criteria2( Criterion5 or Criterion6 ... )
*
*
* <p>
* 1. example 上只能调用 and() / or() 添加复合查询条件 Criteria,
* 2. 对 Criteria(复) 调用其他方法 添加 Criterion(单) 到 Criteria(复) 中
* 3. example 携带所有组合的 Criteria(复) (各 Criteria(复)中有数个 Criterion(单),共可以拼成无限长的 where clause ),到数据库中查询结果.
*
* @Param paramsMap
* @return
*/
public ResponseBody getList(Map<String, Object> paramsMap) {
//参数校验,错误处理/抛出,业务处理等
Example example = new Example(User.class);
//and()方法得到一个Criteria查询条件字句,用and与前面子句相连;Criteria字句字句内还可以放子句
example.selectProperties("key", "id", "name", "age");//key是测试添加的虚拟字段,表中是没有的,@see User.key 属性
//单个独立条件( `is_deleted` = 0 )
example.and().andEqualTo("isDeleted", 0);
/******************** 测试代码 **************/
example.or().andEqualTo("age", 3);
// example
/******************** 测试代码 **************/
if (paramsMap.get("keywords") != null && !"".equals(paramsMap.get("keywords"))) {
//多列模糊搜索 and ( `name` like '%三%' or `nick_name` like '%三%' )
example.and()
.orLike("name", "%" + paramsMap.get("keywords").toString() + "%")
.orLike("nickName", "%" + paramsMap.get("keywords").toString() + "%");
}
if (paramsMap.get("age") != null) {
//单值限定 and ( `name` like '%三%' or `nick_name` like '%三%' ) and ( `age` = 3 )
example.or().andEqualTo("age", Integer.parseInt(paramsMap.get("age").toString()));
}
if (paramsMap.get("order") != null && !"".equals(paramsMap.get("order"))) {
//排序
switch (paramsMap.get("order").toString()) {
case "1":
//单列/多列(同向/异向)排序
example.orderBy("modifyByTime").desc().orderBy("age").orderBy("gender").asc();
break;
case "2":
example.orderBy("modifyByTime").asc();
break;
case "3":
example.orderBy("createByTime").desc();
break;
case "4":
example.orderBy("createByTime").asc();
break;
default:
example.orderBy("modifyByTime").desc();
}
} else {
example.orderBy("modifyByTime").desc();
}
if (paramsMap.get("group") != null) {
//分组
}
if (paramsMap.get("distinct") != null) {
//去重
example.setDistinct(true);
}
//设置选取那些列
example.selectProperties("id");
/********************** 分页部分 *******************/
//分页参数,检查及处理
int pageNum = null != paramsMap.get("currentPage") ? Integer.parseInt(paramsMap.get("currentPage").toString()) : 1;
int pageSize = null != paramsMap.get("pageSize") ? Integer.parseInt(paramsMap.get("pageSize").toString()) : 10;
/**
* 获取第pageNum页(从1开始),pageSize条内容,默认会查询满足条件的总数count,然后limit分页
* 紧跟着的第一个select方法会被分页,后面的不会被分页,除非再次调用PageHelper.startPage;
* 实际返回的结果list类型是Page<E>,如果想取出分页信息,需要强制转换为Page<E>,或者使用PageInfo类
* 如:PageInfo page = new PageInfo(list);
*
*/
PageHelper.startPage(pageNum, pageSize, true, false, false);
Page<User> page = (Page) mapper.selectByExample(example);
//包装成我司需要的结构
PageUtils pageUtils = new PageUtils(page.getResult(), page.getTotal(), pageSize, pageNum);
return ResponseBody.ok(pageUtils);
}
}
请大家不要吝啬手中的免费点评机会哦
可以用plus吧 呵呵0214 发表于 2019-2-15 16:19
可以用plus吧
可以,不过我用的是mybatis-generator-core,这2中各有优势吧 很厉害. 我是用mp的, 没了解过还有这样的用法. 赞一个{:1_893:}
页:
[1]