mybatis-generator-plus

介绍

        mybatis-generator-plus是基于mybatis generator(mybatis的官方代码生成工具)进行改造的界面化操作idea插件,此插件可以用来进行数据库层面的代码自动生成并提供了一些简化的基础方法并且它只是一个辅助工具对原生的mybatis无任何倾入,理论上可以支持所有的关系型数据库。

目前测试的数据库:mysql,mariadb。
注:此插件可生成后的代码原则上除了自动生成的代码不要去修改,其他都可以修改,比如在Mapper,DTOUtil等文件里添加新的方法/属性/内部类。欢迎测试其他类型数据库,如有问题可联系

安装

在线安装: 测试完成后会上传到idea插件仓库
离线安装: 测试完成后会在github和gitee上传离线安装包

概念

数据源: 数据库的连接信息,插件会根据选择的数据源信息进行对应库的表映射,一个project只维护一份数据源
实体组: 用来限定实体的范围,一个组代表一个模块下的唯一路径,在同一个组下的实体不能重名
表实体: 数据库表对应的实体
查询实体: 查询语句对应的实体

使用

初始化

        在使用插件之前需要将idea的module进行初始化,哪个需要被插件管理就初始化哪个,根目录是必须初始化的,因为需要配置数据源(数据源的信息存在根目录)。如图:

注:同一个project下需要被插件管理的module都需要单独初始化

数据源

        在进行代码自动生成之前需要先全局配置数据源,数据源在配置实体组信息的时候需要被选择,数据源的添加/修改需要在根目录下操作

注:数据源的名称需要唯一

属性介绍

数据源名称:全局唯一用来标志一个数据源的配置

数据库URL:JDBC的数据库链接

驱动类名:JDBC的java类

驱动路径:提供的JDBC jar包路径,只能放在idea项目目录中

CheckSql:sql连接检查语句

用户名:数据库名

密码:数据库对应的密码

添加数据源

 

 修改数据源:

实体组

属性介绍

所属模块:当前实体组所在的module
数据源:当前实体组下实体对应的数据库信息
实体组路径:实体组对应的唯一包路径
实体路径:表/查询实体生成的对应路径
Mapper路径:Mapper接口类生成的对应路径
DTO所属模块:默认是当前module,可以选择跟当前module同级并且未被插件初始化的module,被选择后的module无法在被插件管理。
DTO路径:DTO实体生成的对应路径

添加实体组

  

修改实体组

目前暂不支持修改实体组路径信息,如想修改可自己进行手动修改并按规则修改对应的文件

实体

属性介绍

所属模块:实体对应的module
数据库:实体组选择的数据源
实体名:实体对应的class类名
所属组:实体名对应的实体组
数据库:实体映射的数据库表
查询语句:用来生成查询实体的sql语句
字段自定义配置:用来配置数据表的字段的自定义配置(目前只有添加进列表生成Example where条件方法,配置乐观锁字段的功能)

添加实体

表实体

 

注:如果需要返回自增的主键,可以使用原生的Options注解在insert方法上,重新生成文件的时候不会被覆盖

查询实体 

查询实体添加类似表实体表名换成select语句

注:查询实体只生成对应的实体类和example类,如果需要使用可以直接在Mapper接口写对应的方法(以后可能会做成右键选择对应的查询实体生成对应方法的功能)

/**在任意的Mapper接口上写对应的查询方法 就可以使用*/
@Mapper
public interface TeacherMapper extends DefaultMapper {
    @SelectProvider(type = DefaultSqlProvider.class, method = "selectByExample")
    List<TeacherQuery> selectTeacherQuery(TeacherQueryExample example);
}

修改实体

 删除实体

代码案例

新增

##全字段插入
Teacher teacher = new Teacher();
teacher.setAge(1);
teacher.set其他全部字段        
int insert = teacherMapper.insert(teacher);
##部分字段插入
Teacher teacher = new Teacher();
teacher.setAge(1);
teacher.set需要更新的字段        
int insert = teacherMapper.insertSelective(teacher);
##批量插入
List<Teacher> teachers = new ArrayList<>();
Teacher teacher = new Teacher();
teacher.setAge(1);
teacger.set...
teachers.add(teacher);
teachers.add((Teacher) teacher.clone());
int insert = teacherService.insertBatch(teachers);

 删除

##使用主键删除
int i = teacherMapper.deleteByPrimaryKey(13);
##使用example删除
TeacherExample example = new TeacherExample();
TeacherExample.TeacherCriteria criteria = example.createCriteria();
criteria.andIdEqualTo(12);
int i1 = teacherMapper.deleteByExample(example);

修改

##单条数据主键更新
Teacher teacher = teacherMapper.selectByPrimaryKey(10);
teacher.setUserName("update1");
teacherMapper.updateByPrimaryKey(teacher);
//单条数据乐观锁更新
teacher.setUserName("update1");
teacherMapper.updateOptimisticLockByPrimaryKey(teacher);

##更新空值
Teacher teacher = teacherMapper.selectByPrimaryKey(10);
teacher.nullMode();
teacher.setUserName(null);
teacherMapper.updateByPrimaryKey(teacher);

//批量主键更新
List<Teacher> teachers = new ArrayList<>();
Teacher teacher1 = teacherMapper.selectByPrimaryKey(11);
teacher = teacherMapper.selectByPrimaryKey(10);
teacher1.setUserName("updateBatch");
teacher.setUserName("updateBatch");
teachers.add(teacher1);
teachers.add(teacher);
teacherMapper.updateList(teachers);

//批量乐观锁更新
List<Teacher> teachers = new ArrayList<>();
Teacher teacher1 = teacherMapper.selectByPrimaryKey(11);
teacher = teacherMapper.selectByPrimaryKey(10);
teacher1.setUserName("OptimisticLock");
teacher.setUserName("OptimisticLock");
teachers.add(teacher1);
teachers.add(teacher);
int i = teacherMapper.updateListOptimisticLock(teachers);

//example 更新
TeacherExample example = new TeacherExample();
TeacherExample.TeacherCriteria criteria = example.createCriteria();
criteria.andIdIn(Arrays.asList(10, 11));
Teacher update = new Teacher();
update.setUserName("updateByExample");
teacherMapper.updateByExample(update, example);

查询

##主键查询
Teacher teacher = teacherMapper.selectByPrimaryKey(10);
##example查询
TeacherExample example = new TeacherExample();
example.setWithBLOBs(true);##查询blob字段 默认不查询
TeacherExample.TeacherCriteria criteria = example.createCriteria();
criteria.andIdEqualTo(10);
List<Teacher> teachers = teacherMapper.selectByExample(example);
##查询数量
long l = teacherMapper.countByExample(example);
##通过查询实体进行查询对应的select语句
TeacherQueryExample example1 = new TeacherQueryExample();
TeacherQueryExample.TeacherQueryCriteria criteria1 = example1.createCriteria();
criteria1.andNameEqualTo("name");
example1.setWithBLOBs(false);
List<TeacherQuery> teacherQueries = teacherMapper.selectTeacherQuery(example1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值