An open API service indexing awesome lists of open source software.

https://github.com/t-miracle/mybatis-generator

MyBatis从手写到逆向!MyBatis Generator【MBG】的使用。
https://github.com/t-miracle/mybatis-generator

Last synced: 3 months ago
JSON representation

MyBatis从手写到逆向!MyBatis Generator【MBG】的使用。

Awesome Lists containing this project

README

        

# MyBatis从手写到逆向!MyBatis Generator【MBG】的使用

## 什么是MyBatis Generator【以下简称MBG】?

MBG是一款MyBatis自动代码生成工具,可以通过配置,快速生成Entity实体类、mapper接口类和数据库xml映射文件,帮助我们从枯燥的增删改查编写中解脱出来~

并且生成的每个Entity实体类下,还提供了对应的Example实例对象,别小看它,它可是十分强大的一个实例工具,之后我会详细讲解它~

## MBG配置步骤:

### 配置pom.xml

在项目的pom文件中添加插件配置

```xml




org.mybatis.generator
mybatis-generator-maven-plugin
1.3.7

src/main/resources/generator.xml

true

true



Generate MyBatis Artifacts

generate











mysql
mysql-connector-java
5.1.29



```

### 配置generator.xml

在resource目录下创建generator.xml文件(也不一定这个名,只要和pom.xml文件下configurationFile中的名字对应上就可以了)

![](./screenshot/Snipaste_2019-11-19_00-14-23.png)

配置文件大致如下:

```xml































```

以上的配置中数据库使用的是SQL serve,如需了解更多请点击 [《MBG配置详解》](./SettingDoc.md)

### MBG启动

连接上数据库后,在Maven Projects侧找到mybatis-generator,双击

![](./screenshot/Snipaste_2019-11-19_00-18-35.png)

即可生成逆向代码~

## Mapper接口

生成代码后,Mapper接口里有如下方法:

> Xxx:实例对象

> example:实例对象字段条件

> record:实例对象数据

| 方法 | 功能 |
|:------------------------------------------------------------------------------------------------:|:------------------------------------------------:|
| int countByExample(XxxExample example); | 按条件统计符合条件的数据条数 |
| int deleteByExample(XxxExample example); | 按条件删除数据 |
| int deleteByPrimaryKey(Integer id); | 按主键删除数据 |
| int insert(Xxx record); | 插入数据(实体类所有字段不得为null,否则抛出异常) |
| int insertSelective(Xxx record); | 插入数据(插入实体类不为null的字段) |
| List selectByExample(XxxExample example); | 按条件查询符合条件的数据列表 |
| Xxx selectByPrimaryKey(Integer id); | 按主键查询数据 |
| int updateByExample(@Param("record") Xxx record, @Param("example") XxxExample example); | 按条件更新数据(实体类所有字段不得为null,否则抛出异常) |
| int updateByExampleSelective(@Param("record") Xxx record, @Param("example") XxxExample example); | 按条件更新数据(插入实体类不为null的字段) |
| int updateByPrimaryKeySelective(Xxx record); | 按主键更新数据(实体类所有字段不得为null,否则抛出异常) |
| int updateByPrimaryKey(Xxx record); | 按主键更新数据(插入实体类不为null的字段) |

## example实例解析

逆向生成代码后,每个实体类都会生成一个XxxExample实例,它的作用等同于数据库语法中的*WHERE*及其后面的语法。

使用方式为:

```java
xxxExample example = new xxxExample(); //初始化一个example实例
```

| 方法 | 功能 |
|:--------------------------------------:|:--------------------------------------------------------------------------:|
| example.setOrderByClause(“字段名 ASC”); | 按字段名升序排列,DESC为降序(注意:字段名必须为数据表的字段名,而不是实体类的字段名) |
| example.setDistinct(false); | 去除重复,true为选择不重复的记录 |

```java
Criteria criteria = new Example().createCriteria(); //实现条件方法
```

> Xxx:字段名

| 方法 | 功能 |
|:-------------------------------------------:|:--------------------------:|
| criteria.andXxxIsNull; | 字段为null |
| criteria.andXxxIsNotNull; | 字段不为null |
| criteria.andXxxEqualTo(value); | 字段等于value |
| criteria.andXxxNotEqualTo(value); | 字段不等于value |
| criteria.andXxxGreaterThan(value); | 字段大于value |
| criteria.andXxxGreaterThanOrEqualTo(value); | 字段大于等于value |
| criteria.andXxxLessThan(value); | 字段小于value |
| criteria.andXxxLessThanOrEqualTo(value); | 字段小于等于value |
| criteria.andXxxIn(List<?>); | 字段值在List<?>条件中 |
| criteria.andXxxNotIn(List<?>); | 字段值不在List<?>条件中 |
| criteria.andXxxLike(“%”+value+”%”); | 字段值为value的模糊查询 |
| criteria.andXxxNotLike(“%”+value+”%”); | 字段值不为value的模糊查询 |
| criteria.andXxxBetween(value1,value2); | 字段值在value1和value2之间 |
| criteria.andXxxNotBetween(value1,value2); | 字段值不在value1和value2之间 |

## 方法应用举例:

```java
XxxExample xxxExample = new xxxExample();
XxxExample.setOrderByClause(“uid DESC”);
Criteria criteria = new Example().createCriteria();
criteria.andNameEqualTo('Tmiracle');
List list = XxxMapper.selectByExample(xxxExample);
```

**list得到的值相当于:**

```sql
SELECT * FROM Xxx
WHERE name = 'Tmiracle'
ORDER BY uid DESC
```