MyBatis的逆向工程详解
什么是MyBatis逆向工程?
MyBatis逆向工程是指根据数据库中的表结构生成MyBatis对应的Mapper接口以及对应的Mapper XML文件。如果手写这些代码,需要考虑很多细节,编写起来比较繁琐和容易出错,而逆向工程则可以自动化地生成这些代码。逆向工程可以大大提高开发效率,并且保证生成的代码的准确性。
MyBatis逆向工程主要依赖于以下两个工具:
- MyBatis Generator:一个由MyBatis官方提供的代码生成工具,支持生成Java代码以及XML配置文件。
- Maven插件:可以将逆向工程流程集成到Maven编译过程中。
如何配置MyBatis逆向工程?
为了使用MyBatis逆向工程,我们需要根据我们的实际情况进行配置。下面是配置MyBatis逆向工程的步骤:
步骤一:在项目中添加MyBatis Generator插件依赖。
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.0</version>
</dependency>
步骤二:在项目的配置文件中添加MyBatis Generator的配置。
<configuration>
<configurationFile>[path to]/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
</configuration>
步骤三:创建generatorConfig.xml配置文件。在该文件中配置需要生成的Mapper接口以及SQL语句,以及其他相关的配置信息。
<?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="context1">
<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/test"
userId="root"
password="123456">
</jdbcConnection>
<javaModelGenerator targetPackage="com.test.entity"
targetProject="src/main/java">
</javaModelGenerator>
<sqlMapGenerator targetPackage="mapper"
targetProject="src/main/resources">
</sqlMapGenerator>
<javaClientGenerator type="ANNOTATEDMAPPER"
targetPackage="mapper"
targetProject="src/main/java">
</javaClientGenerator>
<table schema="test" tableName="user">
</table>
</context>
</generatorConfiguration>
MyBatis逆向工程的示例
为了更好地理解MyBatis逆向工程,下面是两个示例。
示例一:生成单个Mapper
首先,在generatorConfig.xml文件中只配置一个表:
<table schema="test" tableName="user">
</table>
然后使用Maven插件生成Mapper接口以及XML文件:
mvn mybatis-generator:generate
最终,在生成的Mapper接口中,我们可以看到对应的CRUD操作方法以及对应的SQL语句:
public interface UserMapper {
int deleteByPrimaryKey(Integer id);
int insert(User record);
int insertSelective(User record);
User selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
}
在Mapper XML文件中,我们可以看到对应的SQL语句:
<?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="mapper.UserMapper">
<resultMap id="BaseResultMap" type="com.test.entity.User">
<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>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from test.user
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.test.entity.User">
insert into test.user (id, name, age)
values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER})
</insert>
<insert id="insertSelective" parameterType="com.test.entity.User">
insert into test.user
<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>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from test.user
where id = #{id,jdbcType=INTEGER}
</select>
<update id="updateByPrimaryKeySelective" parameterType="com.test.entity.User">
update test.user
<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.test.entity.User">
update test.user
set name = #{name,jdbcType=VARCHAR},
age = #{age,jdbcType=INTEGER}
where id = #{id,jdbcType=INTEGER}
</update>
</mapper>
示例二:生成多个Mapper
对于需要生成多个Mapper的情况,我们可以在generatorConfig.xml文件中添加多个table元素:
<table schema="test" tableName="user"></table>
<table schema="test" tableName="order"></table>
使用Maven插件生成Mapper接口以及XML文件:
mvn mybatis-generator:generate
最终,在生成的Mapper接口中,我们可以看到对应的CRUD操作方法以及对应的SQL语句:
public interface OrderMapper {
int deleteByPrimaryKey(Integer id);
int insert(Order record);
int insertSelective(Order record);
Order selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(Order record);
int updateByPrimaryKey(Order record);
}
public interface UserMapper {
int deleteByPrimaryKey(Integer id);
int insert(User record);
int insertSelective(User record);
User selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
}
在Mapper XML文件中,我们可以看到对应的SQL语句:
<?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="mapper.OrderMapper">
<resultMap id="BaseResultMap" type="com.test.entity.Order">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
</resultMap>
<sql id="Base_Column_List">
id, name
</sql>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from test.order
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.test.entity.Order">
insert into test.order (id, name)
values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" parameterType="com.test.entity.Order">
insert into test.order
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="name != null">
name,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from test.order
where id = #{id,jdbcType=INTEGER}
</select>
<update id="updateByPrimaryKeySelective" parameterType="com.test.entity.Order">
update test.order
<set>
<if test="name != null">
name = #{name,jdbcType=VARCHAR},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.test.entity.Order">
update test.order
set name = #{name,jdbcType=VARCHAR}
where id = #{id,jdbcType=INTEGER}
</update>
</mapper>
以上就是MyBatis逆向工程的详细攻略以及两个示例。通过逆向工程,我们可以省去大量编写Mapper接口以及SQL语句的时间,而且生成的代码准确性高,可以帮助我们更快速地完成项目开发。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis的逆向工程详解 - Python技术站