MyBatis逆向工程
   软件工程   0 评论   1223 浏览

MyBatis逆向工程

   软件工程   0 评论   1223 浏览

逆向工程

简单的理解,MyBatis逆向工程,就是通过相应插件,自动生成MyBatis数据库连接的一些文件。
mybatis跟Hibernate这样的全自动框架不一样。它需要编写sql语句,因此mybatis官方提供了逆向工程,可以针对单表自动生成mybatis执行所需要的代码(包括mapper.java、带增删改查的mapper.xml、pojo…),提高工作效率。

使用插件

该逆向工程所需的jar包就是org.mybatis.generator

第一步. 创建maven-archetype-webapp模板工程(创建空的Maven工程也差不多)。修改pom.xml文件,添加依赖(版本根据自己的来也可以):

<dependencies>

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.5</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>

    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.3.5</version>
    </dependency>

    <!-- 单元测试 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
    </dependency>

</dependencies>

因为是插件嘛,继续在pom.xml中的<build>下面一行回车,插入以下代码(同样文件名版本号可修改):

<!--  mybatis逆向工程插件开始 -->
<plugins>
    <plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.3.5</version>
        <configuration>
            <configurationFile>${basedir}/src/main/resources/mybatis-generator.xml</configurationFile>
            <overwrite>true</overwrite>
            <verbose>true</verbose>
        </configuration>
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.6</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.5</version>
            </dependency>
        </dependencies>
    </plugin>
</plugins>
<!--  mybatis逆向工程插件结束 -->

第二步. resources资源目录添加mybatis-generator.xmldbconfig.propertiesmybatis-config.xml

mybatis-generator.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>
    <properties resource="dbconfig.properties"/>

    <context id="Mysql" targetRuntime="MyBatis3" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>


        <!--支持序列化-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>

        <!--
        <plugin type="${mapper.plugin}">
            <property name="mappers" value="${mapper.Mapper}"/>
            <property name="forceAnnotation" value="${mapper.forceAnnotation}" />
        </plugin>
        -->

        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>

        <jdbcConnection driverClass="${jdbc.driver}"
                        connectionURL="${jdbc.url}"
                        userId="${jdbc.username}"
                        password="${jdbc.password}">
        </jdbcConnection>

        <javaModelGenerator targetPackage="${targetModelPackage}" targetProject="${targetJavaProject}">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <sqlMapGenerator
                targetPackage="${targetXMLPackage}"
                targetProject="${targetResourcesProject}">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>

        <javaClientGenerator
                targetPackage="${targetMapperPackage}"
                targetProject="${targetJavaProject}"
                type="XMLMAPPER">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>

        <!--全部表参与逆向工程-->
        <!--以下example为false,表示不会生成example类,否则将自动生成example类-->
        <table schema="" tableName="%"
               enableCountByExample="false"
               enableUpdateByExample="false"
               enableDeleteByExample="false"
               enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>

        <!--指定某些表参与逆向工程-->
        <!--<table tableName="user"-->
        <!--enableCountByExample="false"-->
        <!--enableUpdateByExample="false"-->
        <!--enableDeleteByExample="false"-->
        <!--enableSelectByExample="false"-->
        <!--selectByExampleQueryId="false">-->
        <!--</table>-->
    </context>
</generatorConfiguration>

dbconfig.properties
com.yoyling、jdbc连接都要改的啊,数据库是随便的一个,我就拿最近的库来生成并测试。

jdbc.url =jdbc:mysql://localhost:3306/bbs_ssm
jdbc.driver=com.mysql.jdbc.Driver
jdbc.username=root
jdbc.password=root


# 通用Mapper固定配置
mapper.plugin=tk.mybatis.mapper.generator.MapperPlugin
mapper.Mapper=tk.mybatis.mapper.common.Mapper
mapper.forceAnnotation=true

# 生成文件保存位置
#javabean生成位置
targetModelPackage=com.yoyling.domain
#xml映射文件的位置,这里的值是文件夹名字
targetXMLPackage=mapper
# 这里写的是mapper文件夹所在位置,写成src/main/resources
targetResourcesProject=src/main/resources/com/yoyling/

#dao接口存放的包位置
targetMapperPackage=com.yoyling.mapper
#目标工程,写main下的src即可
targetJavaProject=src/main/java

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- mybatis的主配置文件 -->
<configuration>
    <properties resource="dbconfig.properties"/>
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
    <mappers>
        <package name="com.yoyling.mapper"/>
    </mappers>
</configuration>

第三步. 点击IDEA右边Maven里面的Plugins里面多出来的一个mybatis-generator
然后你会看到一些神奇的文件就被创建了。分别是src/main/java/com/yoyling/domain/*.java还有src/main/java/com/yoyling/mapper/*Mapper.java还有src/main/resources/com/yoyling/mapper.*Mapper.xml

第四步. 测试,在src/test/com/yoyling目录创建个AppTest测试类(看你自己数据库有啥测啥)。

package com.yoyling;

import com.yoyling.domain.User;
import com.yoyling.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

public class AppTest {
    @Test
    public void test() throws IOException {

        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");

        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

        SqlSessionFactory factory = builder.build(in);

        SqlSession session = factory.openSession();

        UserMapper mapper = session.getMapper(UserMapper.class);

        User user = mapper.selectByPrimaryKey(26);

        System.out.println(user.getPassword());

    }
}

更多

https://gitee.com/rawchen/GeneratorDemo
https://github.com/rawchen/GeneratorDemo

本文由 RawChen 发表, 最后编辑时间为:2021-11-13 13:29
如果你觉得我的文章不错,不妨鼓励我继续写作。

发表评论
选择表情
Top