介绍
文档:http://106.13.210.248:9880
1.对mybatis进行扩展增强
2实现mybatis的CRUD简化操作 不用在书写基本的增删改查sql 全部通过BaseMapper 实现
软件架构
软件架构说明
1.不对mybatis做任何修改 只做mybatis的扩展增强
2.代码自动生成,根据表名可快速生成xxxMapper.java、xxxService.java、xxxServiceImpl.java、xxxController.java、xxxMapper.xml
3.增加swagger配置方便前台调用接口
4.增加logback日志记录系统运行情况
5.增加druid数据源监控sql运行情况
6.本系统采用前后端完全分离的模式:前端采用vue.js框架 项目地址:https://gitee.com/wdyun/enhancevue
7.用户密码采用MD5加salt的方式个人信息安全有保障
8.角色绑定菜单权限 用户只能查看到所属角色绑定的菜单
9.采用Redis做为缓存框架
10.采用mongodb做为文件存储系统
11.采样RabbitMq作为消息服务
我们将通过一个简单的 Demo 来阐述 MyBatis-Plugs 的强大功能,在此之前,我们假设您已经:
现有一张 User 表,其表结构如下:
id | name
|
age |
tel |
1 | Job |
21 |
15764226795 |
2 | Jack |
18 |
15764226796 |
3 | June |
19 |
15764226797 |
4 | Ann |
20 |
15764226798 |
其对应的数据库 Sql 脚本如下:
DROP TABLE IF EXISTS user ;
CREATE TABLE user
(
id BIGINT (20) NOT NULL COMMENT '主键ID',
name VARCHAR (30) NOT NULL COMMENT '姓名',
age INT (11) COMMENT '年龄',
tel VARCHAR (11) COMMENT '电话',
PRIMARY KEY (id)
)
Question
如果从零开始用 MyBatis-Plugs来实现该表的增删改查我们需要做什么呢?
使用 idea 创建SpringBoot项目
springBoot项目建立好之后,在pom.xml文件加入mybatis-plugs的依赖
mybatis-plugs当前版本 2.0.0
请关注mybatis-plugs最新版本 mybatis-plugs
SpringBoot
maven:
gradle:
compile(" com.enbatis:mybatis-plugs:4.0.1 ")
小提示
引入 mybatis-plugs 之后无需再次引入mybatis
修改 application.properties 为application.yml
新增 开发环境: application-dev.yml
新增 测试环境: application-test.yml
新增 生产环境: application-pro.yml
小说明
1.开发环境为我们进行开发所使用的配置
2.测试环境为测试人员进行软件测试所使用的配置
3.生产环境为上线部署所使用的配置
spring:
profiles:
active: dev
server:
port: 8080
tip:
spring: profiles: active: dev 指定所使用的环境
port:8080 指定项目所启动的端口为8080端口
在启动类上加上Mapper扫描的注解 @MapperScan("com.enbatis.mybatisplugs.mapper")
我们通过数据库表可以快速生成entity,controller,mapper,service,serviceImpl,mapping.xml
说明
生成代码需要连接数据库,所以我们需要进行数据库的连接,只需要通过配置数据库基本信息,利用mybatis-plugs的代码生成类 CodeGenerator2 即可
在启动类的同级目录下 建立生成器类 CodeGenerate
import com.enbatis.mybatisplugs.generate.CodeGenerator2;
public class CodeGenerate {
private static String url="jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&
useUnicode=true&characterEncoding=utf8&useSSL=false";
private static String user="root";
private static String psd="111111";
private static String filePath="D://generate_code//";
public static void main(String[] args) {
CodeGenerator2 codeGenerator2=new CodeGenerator2(url,user,psd,filePath);
codeGenerator2.generate(CodeGenerate.class);
}
}
注释:
url: 数据库连接url
root: 数据库用户名
psd: 数据库密码
filePath: java代码生成位置(防止代码覆盖所以我们不会自动生成到对应的代码位置)
CodeGenerator2: mybatis-plugs代码核心生成器
1.执行main方法
2.在控制台输入作者 以及 要生成代码的表
3.输入完成之后点击回车
4.当输出以下信息表示代码生成成功
5.去代码生成的位置查看生成的代码
6.建立代码包:entity、controller、mapper、service、impl以及xml的文件夹
7.将生成的代码复制到对应的文件夹
8.启动项目 访问 http://localhost:8080/v1/sys_user/list 查询所有用户列表
Service CRUD 接口
说明
通过封装mybatis的 BaseService接口即可快速实现数据库的CRUD操作
泛型 T 为任意实体对象
参数 Serializable 为任意类型主键 Mybatis-Plugs 不推荐使用复合主键约定每一张表都有自己的唯一 id 主键
对象 Wrapper 为 条件构造器
Insert
/**
* 插入一条记录
* @param entity 传入的插入对象
* @return T
*/
T insert(T entity);
deleteById
/**
* 根据id删除一条数据
* @param id 传入的查询ID
* @return 删除条数
*/
int deleteById(Serializable id);
updateById
/**
* 根据id更新一条数据
* @param bean 传入的更新对象
* @return 返回更新条数
*/
int updateById(T bean);
update
/**
* 批量更新数据
* @param bean 传入的更新的内容
* @param wrapper 传入的更新条件
*/
int update(T bean,Wrapper
list
/**
* 查询多条数据
* @param wrapper 查询条件
* @return 集合
*/
List
page
/**
* @param page 分页对象
* @param wrapper 查询条件
* @return Pages 分页数据
*/
Pages
selectCount
/**
* 查询count
* @param wrapper 查询条件
* @return 数量
*/
int selectCount(Wrapper
saveBatch
/**
* 批量插入
* @param entityList
* @return
*/
int saveBatch(List
扩展:
以上只列出部分条件构造器的方法,我们还有getById(根据id获取单条)、saveBatch(批量保存)等等, 更多请查看 mybatis-plugs
如果我们想快速查询数据库表sys_user 的姓名为 “Tom” 如何进行操作呢?
回答:只需service调用list 传入 条件构造器Wrapper Wrapper调用 eq 方法,下面的方法即为 查询姓名是Tom的SysUser列表
sysUserService.list(new Wrapper<>(sysUser).eq("name","Tom"));
如果我们想快速查询数据库表sys_user 的姓名不是 “Tom” 如何进行操作呢?
回答:只需service调用list 传入 条件构造器Wrapper Wrapper调用 ne 方法,下面的方法即为 查询姓名不是Tom的SysUser列表
sysUserService.list(new Wrapper<>(sysUser).ne("name","Tom"));
如果我们想根据姓名模糊查询,怎么操作呢?
回答:只需service调用list 传入 条件构造器Wrapper Wrapper调用 like 方法,下面的方法即为 根据姓名“Tom”模糊查询
sysUserService.list(new Wrapper<>(sysUser).like("name","Tom"));
如果我们想查询姓名是“Tom”,“Jack”,“June”怎么操作呢?
回答:只需service调用list 传入 条件构造器Wrapper Wrapper调用 in 方法,传入ArrayList即可
List arrayList=new ArrayList<>();
arrayList.add("Tom");
arrayList.add("Jack");
arrayList.add("June"); sysUserService.list(new Wrapper<>(sysUser).in("name",arrayList));
扩展:
以上只列出部分条件构造器的方法,我们还有notNull(非空查询)、isNull(空值查询)、setSqlSelect(固定列查询)等等, 更多请查看 mybatis-plugs