MyBatis3-代码生成工具的使用

摘要:
-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core--˃组织。mymatis。generator</groupId><artifactId>mybatis generator core</artifactId><version>1.3.5</version></dependency>2。在数据库中创建测试表。在测试数据库DropTABLEFEXISTS“category”中创建用于测试的类别表;CreateTABLE `category`ENGINE=InnoDB默认CHARSET=utf8;3.配置MyBatis代码生成工具的配置文件。在创建的项目中,创建相应的包,例如com.jsoft.testmybatis.int,以存储MyBatis接口对象。在使用MyBatis代码生成工具之前,必须先创建这些目录。作为一个好的应用程序,这些目录的创建也是定期的。根据MyBatis代码生成工具文档,需要一个名为mbgConfiguration.xml的配置文件,该文件位于resources目录中。配置文件的内容如下:˂?

以下内容引用自http://www.yihaomen.com/article/java/331.htm

MyBatis应用程序,需要大量的配置文件,对于一个成百上千的数据库表来说,完全手工配置,这是一个很恐怖的工作量,所以MyBatis官方也推出了一个MyBatis代码生成工具的JAR包。按照MyBatis Generator的doc文档参考,初步配置出了一个可以使用的版本,主要有一下功能:

1、生成POJOs与数据库结构对应

2、如果有主键,能匹配主键

3、如果没有主键,可以用其他字段去匹配

4、动态select、update、delete方法

5、自动生成接口(也就是以前的dao层)

6、自动生成SQL Mapper,增删改查各种语句配置,包括动态where语句配置

下面介绍下详细过程:

1、创建测试工程,并配置MyBatis代码生成jar包

        <!-- mysql-connector-java -->
        <!-- http://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
            <scope>system</scope>
            <systemPath>${project.build.outputDirectory}/lib/mysql-connector-java-5.1.38.jar</systemPath>
        </dependency>

        <!-- mybatis generator -->
        <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>

2、在数据库中创建测试表 

在Test数据库中创建用来测试的category表

Drop TABLE IF EXISTS `category`;
Create TABLE `category` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `catname` varchar(50) NOT NULL,
  `catdescription` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3、配置MyBatis代码生成工具的配置文件  

在创建的工程中,创建相应的package比如:

com.jsoft.testmybatis.inter用来存放MyBatis接口对象。

com.jsoft.testmybatis.mapper用来存放SQL Mapper对应的映射,SQL语句等。

com.jsoft.testmybatis.model用来存放与数据库对应的Model 。

在用MyBatis代码生成工具之前,这些目录必须先创建好,作为一个好的应用程序,这些目录的创建也是有规律的。

根据MyBatis代码生成工具文档,需要一个配置文件,这里命名为:mbgConfiguration.xml放在resources目录下,配置文件内容如下:

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

    <!--配置mysql驱动jar包路径,这里问了方便直接采用相对路径引入JAR包,并且对应POM也设置成项目的目录-->
    <classPathEntry location="target/classes/lib/mysql-connector-java-5.1.38.jar" />

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

        <!--为了防止生成的代码中有很多注释,比较难看,加入下面的配置控制-->
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
            <property name="suppressDate" value="true" />
        </commentGenerator>
        <!--注释控制完毕-->

        <!--数据库连接-->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/Test?serverTimezone=UTC" userId="root" password="root">
        </jdbcConnection>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!--数据表对应的model层-->
        <javaModelGenerator targetPackage="com.jsoft.testmybatis.model" targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!--SQL Mapper隐射配置文件-->
        <sqlMapGenerator targetPackage="com.jsoft.testmybatis.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!--在ibatis2中是dao层,但在mybatis3中,其实就是mapper接口-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.jsoft.testmybatis.inter" targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <!--要对那些数据表进行生成操作,必须要有一个-->
        <table schema="mybatis" tableName="category" domainObjectName="Category" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
        </table>

    </context>
</generatorConfiguration>

提示:更多的详细配置参考官方文档:http://www.mybatis.org/generator/index.html

4、用一个main方法来测试能否用MyBatis成生成刚刚创建的category表对应的Model,SQL Mapper等内容。

创建一个com.jsoft.testmybatis.test1的package,并在此package下面建立一个测试的类GenMain:

package com.jsoft.testmybatis.test1;

import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

public class GenMain {
    public static void main(String[] args) {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        String genCfg = "/mbgConfiguration.xml";
        File configFile = null;
        try {
            configFile = new File(GenMain.class.getResource(genCfg).toURI().getPath());
        } catch (URISyntaxException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = null;
        try {
            config = cp.parseConfiguration(configFile);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XMLParserException e) {
            e.printStackTrace();
        }
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = null;
        try {
            myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        } catch (InvalidConfigurationException e) {
            e.printStackTrace();
        }
        try {
            myBatisGenerator.generate(null);
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

5、运行测试的main方法,生成MyBatis相关代码

运行GenMain类里的main方法,并刷新工程,会发现各自package目录下已经相应生成了对应的文件,完全符合MyBatis规则,效果图如下:

MyBatis3-代码生成工具的使用第1张

6、注意事项

如果想生成example之类的东西,需要在<table></table>里面去掉

enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false"

这部分配置,这是生成Example而用的,一般来说对项目没有用。

另外生成的SQL Mapper等,只是对单表的增删改查,如果有多表join操作,就可以手动配置,如果调用存储过程,也需要手工配置。这时工作量已经少很多了。

如果想用命令行方式处理,也是可以的。

比如:
java -jar mybatis-generator-core-1.3.2.jar -mbgConfiguration.xm -overwrite

这时,要用绝对路径才行。另外mbgConfiguration.xml配置文件中targetProject的配置也必须是绝对路径。

测试工程:https://github.com/easonjim/5_java_example/tree/master/mybatis/test9

参考:

http://www.yihaomen.com/article/java/331.htm

并附带上面参考中的两个生成工具,支持MySQL,Oracle:

链接:http://pan.baidu.com/s/1qX8Indq 密码:kuja

免责声明:文章转载自《MyBatis3-代码生成工具的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python源码为何都是pass如何阅读jdk源码?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql常用语句、命令(增删改查功能)

修改数据库的字符集mysql>use mydbmysql>alter database mydb character set utf8;创建数据库指定数据库的字符集mysql>create database mydb character set utf8; 查看database的字符集! show variables like 'coll...

docker离线安装zabbix+grafana

第一部分:下载安装zabbix所须的镜像 所须镜像包为:mysql、zabbix-server、zabbix-web-nginx、zabbbix-agent 1、搜索镜像 docker search [想要搜索的镜像名] [root@localhost ~]# docker search mysql INDEX NAME...

Mysql常见的引擎

常用的引擎是:Innodb和Myiasm这两种引擎: innodb: 提供了对事务的ACID操作,还提供了行级锁和外键约束,,他的优势就是处理大量数据,在msql启动的时候,首先会建立一个缓存池,主要是缓存数据和索引,但是操作大规模的数据查找时很慢,所以建议当需要数据库的事务操作时,使用这个,还有就是在写的时候不会锁定全表,所以在大规模并发操作的时候会提高...

MySQL中的连接、实例、会话、数据库、线程之间的关系

MySQL中的实例、数据库关系简介 1、MySQL是单进程多线程(而Oracle等是多进程),也就是说MySQL实例在系 统上表现就是一个服务进程,即进程(通过多种方法可以创建多实例,再安装一个端口号不同的mysql,或者通过workbench来新建一个端口号不同的 服务器实例等),该架构类似于SQL Server和Windows版本的Oracle;2、...

PgSQL基础之 pgsql与mysql的简单区别

1、支持的booloan类型的值   mysql并不支持boolean类型,即便当我们创建了boolean的字段属性之后,mysql会自动将其转化为tinyint(1)类型。当插入“true”的时候,其值自动转化为1。当插入"false"的时候,其值自动转化为0。使用select进行取值的时候,我们搜索出来的也是0和1。而pgsql是支持boolean的,...

MySQL 中随机抽样:order by rand limit 的替代方案

  最近由于需要大概研究了一下MYSQL的随机抽取实现方法。举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1。       但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使...