前言
项目中使用了很多现成的框架,都是项目经理、架构师带来的,从来没有自己整合过!这次决定自己从零开始整合一次,以学习巩固。过程中参考很多开源框架的思路,工具类等,若有侵权,请速速联系,一定妥善处理
一:简介
这里直接引用官方介绍了“MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生”。官网: http://mp.baomidou.com/
二:依赖
<!--mybatis-plus--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.4</version> </dependency>
三:配置
application.yml 增加配置如下
#================================================= mybatis-plus start ================================================= mybatis-plus: # config-location: # classpath:/mapper/*Mapper.xml mapper-locations: classpath*:org/itachi/frame/modules/*/mapper/xml/*.xml # 实体扫描,多个package用逗号或者分号分隔 type-aliases-package: org.itachi.frame.modules.*.entity configuration: # 驼峰下划线转换 map-underscore-to-camel-case: true cache-enabled: false call-setters-on-nulls: true global-config: # 刷新mapper 调试神器 refresh: true banner: false #数据库大写下划线转换 #capital-mode: true #序列接口实现类配置 #key-generator: com.baomidou.springboot.xxx # 数据库相关配置 db-config: db-type: mysql # 主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID"; id-type: UUID # 字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断" field-strategy: not_empty capital-mode: true #逻辑删除配置 logic-delete-value: 1 logic-not-delete-value: 0 #================================================= mybatis-plus end ===================================================
配置分页插件
MyBatisPlusConfig.java
package org.itachi.frame.core.config.db;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* mybatis-plus 配置
*
* @author itachi
* @date 2018-10-05 17:40
*/
@Configuration
@MapperScan("org.itachi.frame.modules.*.mapper")
public class MyBatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
四:业务代码
数据表脚本 u_user.sql
CREATE TABLE `u_user` (
`id` char(64) NOT NULL COMMENT '主键',
`name` varchar(255) DEFAULT NULL COMMENT '姓名',
`age` int(255) DEFAULT NULL COMMENT '年龄',
`gender` varchar(255) DEFAULT NULL COMMENT '性别',
`address` varchar(255) DEFAULT NULL COMMENT '地址',
`head_img` varchar(255) DEFAULT NULL COMMENT '头像',
`del_flag` tinyint(1) DEFAULT '0' COMMENT '删除标志',
`amount` decimal(10,2) DEFAULT NULL COMMENT '存款',
`create_date` datetime DEFAULT NULL COMMENT '创建日期',
`update_date` datetime DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户';
实体User.java
这里使用了lombok,不写setter getter相当的爽
package org.itachi.frame.modules.user.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 用户实体
*
* @author itachi
* @date 2018-10-05 16:48
*/
@Data
@TableName("u_user")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 姓名
*/
private String name;
/**
* 年龄
*/
private Integer age;
/**
* 性别
*/
private String gender;
/**
* 地址
*/
private String address;
/**
* 头像
*/
private String headImg;
/**
* 存款
*/
private BigDecimal amount;
@TableLogic
private Integer delFlag;
@TableField(fill = FieldFill.INSERT)
private Date createDate;
@TableField(fill = FieldFill.UPDATE)
private Date updateDate;
}
UserMapper.java
package org.itachi.frame.modules.user.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.itachi.frame.modules.user.entity.User;
import org.itachi.frame.modules.user.pojo.UserQuery;
import java.util.List;
/**
* 用户 Mapper 接口
*
* @author itachi
* @date 2018-10-05 16:51
*/
@Mapper
public interface UserMapper extends BaseMapper<User> {
/**
* 查询分页列表
*
* @author itachi
* @date 2018-10-05 17:25
*/
List<User> queryPage(Page page, @Param("user") UserQuery userQuery);
}
UserMapper.java
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.itachi.frame.modules.user.mapper.UserMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="org.itachi.frame.modules.user.entity.User">
<id column="id" property="id"/>
<result column="del_flag" property="delFlag"/>
<result column="create_date" property="createDate"/>
<result column="update_date" property="updateDate"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="gender" property="gender"/>
<result column="address" property="address"/>
<result column="head_img" property="headImg"/>
<result column="amount" property="amount"/>
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
del_flag,
create_date,
update_date,
id, name, age, gender, address, head_img, amount
</sql>
<select id="queryPage" resultType="org.itachi.frame.modules.user.entity.User">
select * from u_user
<where>
<if test="user.name !=null and user.name != ''">
name = #{user.name}
</if>
</where>
</select>
</mapper>
IUserService.java
package org.itachi.frame.modules.user.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.itachi.frame.modules.user.entity.User;
import org.itachi.frame.modules.user.pojo.UserQuery;
/**
* 用户 服务类
*
* @author itachi
* @date 2018-10-05 17:00
*/
public interface IUserService extends IService<User> {
boolean delete(String ... ids);
Page queryPage(UserQuery userQuery);
}
UserServiceImpl.java
package org.itachi.frame.modules.user.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.itachi.frame.modules.user.entity.User;
import org.itachi.frame.modules.user.mapper.UserMapper;
import org.itachi.frame.modules.user.pojo.UserQuery;
import org.itachi.frame.modules.user.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* 用户 服务实现类
*
* @author itachi
* @date 2018-10-05 17:01
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
@Autowired
UserMapper userMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public boolean delete(String... ids) {
for (String id : ids) {
removeById(id);
//int i = 1/0;
}
return true;
}
@Override
public Page queryPage(UserQuery userQuery) {
Page page = new Page(1, 10);
page.setRecords(userMapper.queryPage(page, userQuery));
return page;
}
}
UserController.java
package org.itachi.frame.modules.user.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.itachi.frame.modules.user.pojo.UserQuery;
import org.itachi.frame.modules.user.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 用户 控制器
*
* @author itachi
* @date 2018-10-05 17:10
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
IUserService userService;
@GetMapping("/queryPage")
public Object queryPage(UserQuery userQuery) {
Page page = userService.queryPage(userQuery);
return page;
}
}
UserQuery.java
package org.itachi.frame.modules.user.pojo;
import lombok.Data;
/**
* 用户查询对象封装
*
* @author itachi
* @date 2018-10-05 16:53
*/
@Data
public class UserQuery {
/**
* 姓名
*/
private String name;
}
目录结构如下
五:测试
访问http://localhost:8080/user/queryPage成功。至此,mybatis plus基本整合完成
mybatis plus还有很多强大的功能,如查询构造器,逻辑删除,公共字段填充等,更多参考官网:http://mp.baomidou.com/