MyBatis---使用MyBatis Generator自动创建代码

        由于MyBatis属于一种半自动的ORM框架,所以主要的工作就是配置Mapping映射文件,但是由于手写映射文件很容易出错,所以可利用 MyBatis Generator 自动生成实体类、DAO接口和Mapping映射文件

        MyBatis Generator (MBG) 是一个Mybatis的代码生成器 ,可以根据数据库中表结构自动生成简单的CRUD(插入,查询,更新,删除)操作。 但联合查询和存储过程,需手动手写SQL和对象。

        下面以mysql库为例,记录 MyBatis Generator 使用方法。

一、准备工作

首先在数据库中新建一个简单的数据表:


DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

二、执行命令生成

这种方法最简单,只需要下几个jar包即可。

2.1 准备需要的文件和jar包

mybatis-generator 下载地址:http://repo1.maven.org/maven2/org/mybatis/generator/mybatis-generator-core/

其中有 MyBatis生成器jar包 和 数据库驱动程序。

2.2 配置generatorConfig.xml

generatorConfig.xml为 mybatis-generator 配置文件,模板如下:

<?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>

    <!--数据库驱动jar -->
    <classPathEntry location="mysql-connector-java-5.1.46.jar" />

    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!--去除注释 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
        </commentGenerator>

        <!--数据库连接 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/test"
                        userId="root" password="root">
        </jdbcConnection>
        <!--默认false Java type resolver will always use java.math.BigDecimal if the database column is of type DECIMAL or NUMERIC. -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="true" />
        </javaTypeResolver>

        <!--生成实体类 指定包名 以及生成的地址 (可以自定义地址,但是路径不存在不会自动创建 使用Maven生成在target目录下,会自动创建) -->
        <javaModelGenerator targetPackage="model" targetProject="src">
            <property name="enableSubPackages" value="false" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!--生成SQLMAP文件 -->
        <sqlMapGenerator targetPackage="mapper" targetProject="src">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!--生成Dao文件 可以配置 type="XMLMAPPER"生成xml的dao实现 context id="DB2Tables" 修改targetRuntime="MyBatis3" -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="dao" targetProject="src">
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <table tableName="user" domainObjectName="User" enableCountByExample="false"
               enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
            <property name="useActualColumnNames" value="true" />
        </table>

    </context>
</generatorConfiguration>

其中,我们需要修改generatorConfig.xml为自己的配置信息,主要包括

<classPathEntry>:数据库驱动jar,需要跟文件夹中的版本一致;

<jdbcConnection>:元素定义如何连接目标数据库;

<javaModelGenerator>:元素来指定生成 Java 模型对象所属的包。targetPackage为包名,targetProject为生成的地址;

<sqlMapGenerator>:元素来指定生成 SQL 映射文件所属的包和的目标项目;

<javaClientGenerator>:元素来指定目标包和目标项目生成的客户端接口和类;

<table>:要生成的表,tableName是数据库中的表名或视图名 domainObjectName是实体类名;

注意:targetProject,不会自动创建,需要手动创建。

更多详细配置可看官网:【http://www.mybatis.org/generator/configreference/xmlconfig.html 】

2.3 运行

打开控制台,进入到上面的目录下,执行命令

java -jar MyBatis生成器jar包 -configfile 配置文件 -overwrite

例如:

java -jar mybatis-generator-core-1.3.1.jar -configfile generatorConfig.xml -overwrite

运行完成,在targetProject\targetPackage目录下找到相应的文件。

三、使用Eclipse插件自动生成代码

 3.1 安装eclipse插件

[Help]--[Eclipser Marketplace]中查找 Mybatis Generator,点击【Install】即开始安装,安装完成后重启Eclipse。

然后,查看插件是否安装成功:【File】 -> 【New】-> 【Other..】,如下,即安装成功。

如果上述方法没有安装成功,可以尝试手动安装方式:把这里的7个jar下载放到eclipse的plugins目录下,重启eclipse就行。

3.2 配置generatorConfig.xml

 generatorConfig.xml 文件配置 跟上述配置文件类似。但略有不同:

  1. 为了更好的通用性,这里我将 <classPathEntry>改为了本地仓库中jar包的绝对路径
  2. <targetProject> 略有不同,为 项目名称+自定义的文件名,必须已经存在,才能成功。
<?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>

    <!--数据库驱动jar -->
    <classPathEntry location="D:\.m2\repository\mysql\mysql-connector-java\5.1.46\mysql-connector-java-5.1.46.jar" />

    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!--去除注释 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
        </commentGenerator>

        <!--数据库连接 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/test"
                        userId="root" password="root">
        </jdbcConnection>
        <!--默认false Java type resolver will always use java.math.BigDecimal if the database column is of type DECIMAL or NUMERIC. -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="true" />
        </javaTypeResolver>

        <!--生成实体类 指定包名 以及生成的地址 (可以自定义地址,但是路径不存在不会自动创建 使用Maven生成在target目录下,会自动创建) -->
        <javaModelGenerator targetPackage="model" targetProject="mybatis-generator/src">
            <property name="enableSubPackages" value="false" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!--生成SQLMAP文件 -->
        <sqlMapGenerator targetPackage="mapper" targetProject="mybatis-generator/src">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!--生成Dao文件 可以配置 type="XMLMAPPER"生成xml的dao实现 context id="DB2Tables" 修改targetRuntime="MyBatis3" -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="dao" targetProject="mybatis-generator/src">
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <table tableName="user" domainObjectName="User" enableCountByExample="false"
               enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
            <property name="useActualColumnNames" value="true" />
        </table>

    </context>
</generatorConfiguration>

3.3 运行

在generatorConfig.xml上右键—》Run As—》Run Mybatis Generator,生成如下相应代码。

四、Intellij IDEA自动生成代码

因为IntelliJ中没有mybatis-generato对应的插件,所以需要在MAVEN中使用 mybatis-generator-maven-plugin插件来完成功能。

4.1 添加依赖

	</dependencies>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<!-- mybatis generator 自动生成代码插件 -->
			<plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.3.2</version>
				<configuration>
					<!--<configurationFile>src/main/resources/generator/generatorConfig.xml</configurationFile>-->
					<overwrite>true</overwrite>
					<verbose>true</verbose>
				</configuration>
			</plugin>
		</plugins>
	</build>

如果配置文件的位置就在/src/main/resources目录下,可以省略<configurationFile>。

4.2  配置generatorConfig.xml

resources下建generatorConfig.xml,作为mybatis-generator-maven-plugin插件的执行目标。

<?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>

    <!--数据库驱动jar -->
    <classPathEntry location="D:\.m2\repository\mysql\mysql-connector-java\5.1.46\mysql-connector-java-5.1.46.jar" />

    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!--去除注释 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
        </commentGenerator>

        <!--数据库连接 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/test"
                        userId="root" password="root">
        </jdbcConnection>
        <!--默认false Java type resolver will always use java.math.BigDecimal if the database column is of type DECIMAL or NUMERIC. -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="true" />
        </javaTypeResolver>

        <!--生成实体类 指定包名 以及生成的地址 (可以自定义地址,但是路径不存在不会自动创建 使用Maven生成在target目录下,会自动创建) -->
        <javaModelGenerator targetPackage="com.example.demo.model" targetProject="src/main/java">
            <property name="enableSubPackages" value="false" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!--生成SQLMAP文件 -->
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!--生成Dao文件 可以配置 type="XMLMAPPER"生成xml的dao实现 context id="DB2Tables" 修改targetRuntime="MyBatis3" -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.demo.dao" targetProject="src/main/java">
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <table tableName="user" domainObjectName="User" enableCountByExample="false"
               enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
            <property name="useActualColumnNames" value="true" />
        </table>

    </context>
</generatorConfiguration>

Intellij IDEA中 targetProject 不需要加 项目名称。

4.3 运行

点击run-Edit Configurations,添加配置:

        command line :mybatis-generator:generate -e

最后生成的文件以及结构:

注意!!!同一张表一定不要运行多次,因为mapper的映射文件中会生成多次的代码,导致报错,切记 。

可以删除之后再重新运行。

五、参考

Running MyBatis Generator With Maven

generatorConfig.xml的配置

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值