0
点赞
收藏
分享

微信扫一扫

Java:MyBatis Generator自动生成代码

柠檬的那个酸_2333 2022-02-28 阅读 116
javaxmlsql


文档:​​http://mybatis.org/generator/index.html​​

依赖 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.mouday</groupId>
<artifactId>generator-demo</artifactId>
<version>1.0-SNAPSHOT</version>

<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>

<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
</dependencies>

</plugin>
</plugins>
</build>

</project>

生成器配置 generatorConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<!-- 配置生成器 -->
<generatorConfiguration>

<context id="default" targetRuntime="MyBatis3">

<!-- jdbc的数据库连接 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/data"
userId="root"
password="123456"/>

<!-- Model模型生成器-->
<javaModelGenerator targetPackage="com.mouday.demo.model"
targetProject="src/main/java"/>

<!-- Mapper映射文件-->
<sqlMapGenerator targetPackage="com.mouday.demo.mapper"
targetProject="src/main/java"/>

<!-- Mapper接口-->
<javaClientGenerator targetPackage="com.mouday.demo.mapper"
targetProject="src/main/java"
type="XMLMAPPER"/>

<table tableName="person"/>

</context>

</generatorConfiguration>

参数说明

通用参数
targetPackage 指定包名
targetProject 指定路径

javaClientGenerator可选参数:
type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
# 执行代码生成
$ mvn mybatis-generator:generate

# 生成的文件
$ tree
.
├── mapper
│ ├── PersonMapper.java
│ └── PersonMapper.xml
└── model
├── Person.java
└── PersonExample.java

查看生成的文件里边有很多无用的代码,可以通过进一步的配置来控制代码生成

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<!-- 配置生成器 -->
<generatorConfiguration>

<context id="default" targetRuntime="MyBatis3">

<!--创建class时,对注释进行控制-->
<commentGenerator>
<property name="suppressDate" value="true"/>
<!--注释掉这行可以解决生成重复xml代码-->
<property name="suppressAllComments" value="true"/>
<property name="javaFileEncoding" value="UTF-8"/>
</commentGenerator>

<!-- jdbc的数据库连接 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/data"
userId="root"
password="123456">
</jdbcConnection>

<!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制 -->
<javaTypeResolver>
<!-- 是否使用BigDecimals,false可自动转化以下类型(Long Integer Short等) -->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>

<!-- Model模型生成器-->
<javaModelGenerator targetPackage="com.mouday.demo.model"
targetProject="src/main/java">
<!--是否允许子包,即targetPackage.schemaName.tableName-->
<property name="enableSubPackages" value="true"/>
<!-- 是否对类CHAR类型的列的数据进行trim操作 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>

<!-- Mapper映射文件-->
<sqlMapGenerator targetPackage="com.mouday.demo.mapper"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>

<!-- Mapper接口-->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.mouday.demo.mapper"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>

<!-- 要生成的表 tableName是数据库中的表名或视图名
domainObjectName是实体类名-->
<table tableName="person"
domainObjectName="Person"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false">
</table>

</context>

</generatorConfiguration>

生成的代码就简洁了不少

Person.java

package com.mouday.demo.model;

public class Person {
private Integer id;

private String name;

private Integer age;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name == null ? null : name.trim();
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}
}

PersonMapper.java

package com.mouday.demo.mapper;

import com.mouday.demo.model.Person;

public interface PersonMapper {
int deleteByPrimaryKey(Integer id);

int insert(Person record);

int insertSelective(Person record);

Person selectByPrimaryKey(Integer id);

int updateByPrimaryKeySelective(Person record);

int updateByPrimaryKey(Person record);
}

PersonMapper.xml

<?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="com.mouday.demo.mapper.PersonMapper">
<resultMap id="BaseResultMap" type="com.mouday.demo.model.Person">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="age" jdbcType="INTEGER" property="age" />
</resultMap>
<sql id="Base_Column_List">
id, name, age
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from person
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from person
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.mouday.demo.model.Person">
insert into person (id, name, age
)
values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER}
)
</insert>
<insert id="insertSelective" parameterType="com.mouday.demo.model.Person">
insert into person
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="name != null">
name,
</if>
<if test="age != null">
age,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
<if test="age != null">
#{age,jdbcType=INTEGER},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.mouday.demo.model.Person">
update person
<set>
<if test="name != null">
name = #{name,jdbcType=VARCHAR},
</if>
<if test="age != null">
age = #{age,jdbcType=INTEGER},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.mouday.demo.model.Person">
update person
set name = #{name,jdbcType=VARCHAR},
age = #{age,jdbcType=INTEGER}
where id = #{id,jdbcType=INTEGER}
</update>
</mapper>



举报

相关推荐

0 条评论