English | 简体中文
- Use yml configuration to simplify the xml configuration used by MyBatis Generator by default
- Supports convenient configuration of common plugins such as annotation generation, lombok, swagger, etc.
- Introduce the benefits of using certain configurations or plugins
- Try to find the optimal configuration for different scenarios
- Make sure you have installed Java8 and a IDE such as Intellij Idea and Eclipse
- Maven is used in the project
- Mybatis3 is used in the project
Step 1: Make sure your project is a maven project, add the mybatis-generator-yml-maven-plugin to your maven pom.xml file:
<plugin>
<groupId>io.github.javthon</groupId>
<artifactId>mybatis-generator-yml-maven-plugin</artifactId>
<version>0.0.1</version>
<configuration>
<configurationFile>src/main/resources/generatorConfig.yml</configurationFile>
</configuration>
</plugin>
Step 2: Create a new generatorConfig.yml
file in the resources
directory, and paste the code in Complete configuration example below, modify the configuration according to your understanding of the configuration in the source code, or modify the configuration according to the following Configuration instructions
Step 3: Run mvn mybatis-generator-yml:generate
after ensuring that the configuration information is correct. You can find this command under the plugins of the maven window in Intellij IDEA, and double-click it to run
mybatisGenerator:
datasource:
type: mysql
address: localhost:3306
db: test
username: root
password: root
targetPackage:
model: com.example.domain
mapper: com.example.dao
javaXmlFilesSamePackage: true
targetRuntime: MyBatis3
mapperSuffixName: mapper
java8: false
disableExample: true
plugins:
comment: true
lombok: false
swagger: false
mapperAnnotation: false
serializable: false
tables:
- user
- role
Attribute | Type | Default | Required | Description |
---|---|---|---|---|
datasource | Map | true | database connection information, details see "datasource Configuration" below | |
targetPackage | Map | true | The package path of the generated code, see "targetPackage configuration" below | |
targetRuntime | String | MyBatis3 | true | mybatis generator targetRuntime,see targetRuntime options below |
mapperSuffixName | String | mapper | false | The suffix name of the mapper class or xml file. If this attribute is set to dao and the table name is user, it will generate UserDao.java and UserDao.xml. If targetRuntime is set to MyBatis3DynamicSql, this attribute will not work |
java8 | Boolean | false | false | If true, the generated model date field will use Java8's LocalDateTime or LocalDate, otherwise use Date |
disableExample | Boolean | true | false | This attribute only takes effect when the targetRuntime is MyBatis3. When it is true, the mapper will not generate "by example" code |
plugins | Map | false | Configure whether to enable annotations, lombok, swagger, mapperAnnotation, serializable and other plugins, see plugin configuration below for details | |
tables | List | false | Multiple table names, see generatorConfig.yml sample and you'll know how to configure it |
Attribute | Type | Required | Description |
---|---|---|---|
type | String | true | database type, currently available values are mysql, sqlserver, if the database you use is not among them, please new issues |
address | String | true | IP and port number, such as: 192.168.1.1:3306 |
db | String | true | database name |
username | String | true | database user |
password | String | true | database password |
Attribute | Type | Required | Description |
---|---|---|---|
model | String | false | model package name, for example: com.example.domain |
mapper | String | false | Package path of generated java interfaces and xml mappers, for example: com.example.mapper |
javaXmlFilesSamePackage | Boolean | false | if true,java interfaces and xml mappers will be generated in one package,If false, the xml mapper code will be generated under the resources directory. This attribute is only available when the targetRuntime is MyBatis3Simple or MyBatis3 |
Attribute | Type | Required | Description |
---|---|---|---|
comment | Boolean | false | whether to generate comments above the fields |
lombok | Boolean | false | whether to use lombok, no setter and getter |
swagger | Boolean | false | whether to use swagger2 annotations |
mapperAnnotation | Boolean | false | whether to add @Mapper annotation on the mapper class |
serializable | Boolean | false | whether to implement the Serializable interface |
Value | Description |
---|---|
MyBatis3DynamicSql | The generated code relies on the MyBatis dynamic SQL library. The generated code provides great flexibility for query construction. Does not generate XML. mybatis generator 1.4.0 officially recommends this method |
MyBatis3 | Generate mapper java interface and xml configuration file. There are "by example" or "selective" methods, the code is more verbose |
MyBatis3Simple | Generate mapper java interface and xml configuration file. There is no "by example" or "selective" method, the code is more concise |
import java.util.Date;
public class Role {
private Long id;
private String name;
private String remark;
private Date createTime;
private Date updateTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
It will generate a note of the corresponding field in the database above each field:
import java.util.Date;
public class Role {
/**
* id
*/
private Long id;
/**
* role name
*/
private String name;
/**
* role remark
*/
private String remark;
/**
* role create time
*/
private Date createTime;
/**
* role update time
*/
private Date updateTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
To use this plug-in, you need to add the dependency of lombok, and install the plug-in supported by the development tool for lombok. There is no setter and getter after using this plugin, which greatly simplifies the code:
import java.util.Date;
import lombok.Data;
/**
* role
* @author Tensorflow
* @date 2020-09-08 22:24:45
*/
@Data
public class Role {
private Long id;
private String name;
private String remark;
private Date createTime;
private Date updateTime;
}
To use this plugin, you need to add swagger2 dependencies, if you are using swagger2 in your project, this may be helpful:
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
@ApiModel(value="com.example.domain.Role")
public class Role {
@ApiModelProperty(value="id")
private Long id;
@ApiModelProperty(value="role name")
private String name;
@ApiModelProperty(value="role remark")
private String remark;
@ApiModelProperty(value="create time")
private Date createTime;
@ApiModelProperty(value="update time")
private Date updateTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
Add @Mapper annotation on java mapper interface
Make models implement the Serializable interface
- Support more databases
- Support more useful plugins
- Explore the pros and cons of MyBatis3DynamicSql and MyBatis3
If the database you are using is not supported, or does not match your database version, please new issues or join the development of this project.
If you find errors in this project or have good ideas, please join
Your contributions are always welcome!