zoukankan      html  css  js  c++  java
  • Mybatis-Generator开发教程

    转载:https://blog.csdn.net/qqyb2000/article/details/80031559

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录,MyBatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码(包括mapper.xml、mapper.java、po)。在开发中,常用的逆向工程方式是通过数据库的表生成代码,以提高开发效率。

    使用逆向工程

    使用MyBatis的逆向工程,需要导入逆向工程的jar包,我用的是mybatis-generator-core-1.3.2.jar,下面开始总结一下MyBatis逆向工程的使用步骤。

    新建一个工程(重要)

    我们要新建一个java工程,这个工程专门用来使用逆向工程生成代码的。有些人可能会问,为什么要新建一个工程呢?直接在原来工程中你想生成不就可以了么?确实是这样,可以在原来的工程中生成,但是有风险,因为MyBatis是根据配置文件来生成的(下面会说到),如果生成的路径中有相同的文件,那么就会覆盖原来的文件,这样会有风险。所以开发中一般都会新建一个java工程来生成,然后将生成的文件拷贝到自己的工程中,这也不麻烦,而且很安全。如下: 
     
    从上图中看,①就是要执行的java代码,执行它即可生成我们需要的dao接口;②是生成的vo③生成的mybatis的映射文件;④mybatis生成器的配置文件。 
    以下是mavan工程的配置文件

       <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.42</version>

          </dependency>

          <dependency>

             <groupId>org.mybatis.generator</groupId>

             <artifactId>mybatis-generator-core</artifactId>

             <version>1.3.6</version>

          </dependency>

          <dependency>

             <groupId>log4j</groupId>

             <artifactId>log4j</artifactId>

             <version>1.2.14</version>

          </dependency>

       </dependencies>

      

       <build>

          <finalName>${project.artifactId}</finalName>

          <plugins>

             <!-- java编译插件 -->

             <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <version>3.2</version>

                <configuration>

                    <source>1.7</source>

                    <target>1.7</target>

                    <encoding>UTF-8</encoding>

                </configuration>

             </plugin>

          </plugins>

       </build>

    配置逆向工程的配置文件

    MyBatis逆向工程生成代码需要一个配置文件,名字随便起。然后MyBatis会根据这个配置文件中的配置,生成相应的代码。mybatis-generator-core-1.3.6.jar这个jar包里面有帮助文档,打开后里面有配置文件的模板,这里就不再赘述了,下面先把配置文件写好:

    <?xml version="1.0"encoding="UTF-8"?>

    <!DOCTYPE generatorConfiguration

      PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration1.0//EN"

      "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

    <generatorConfiguration>

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

            <commentGenerator>

                <!-- 是否去除自动生成的注释 true:是: false:否 -->

                <property name="suppressAllComments"value="true" />

            </commentGenerator>

           

            <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->

            <jdbcConnection driverClass="com.mysql.jdbc.Driver"

                connectionURL="jdbc:mysql://localhost:3306/books"userId="root"

                password="tiger">

            </jdbcConnection>

            <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和

                NUMERIC 类型解析为java.math.BigDecimal -->

            <javaTypeResolver>

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

            </javaTypeResolver>

            <!-- targetProject:生成PO类的位置 -->

            <javaModelGenerator targetPackage="com.oracle.mybatis.vo"

                targetProject=".srcmainjava">

                <!-- enableSubPackages:是否让schema作为包的后缀 -->

                <property name="enableSubPackages"value="false" />

                <!-- 从数据库返回的值被清理前后的空格 -->

                <property name="trimStrings"value="true" />

            </javaModelGenerator>

           

           

            <!-- targetProject:mapper映射文件生成的位置 -->

            <sqlMapGenerator targetPackage="com.oracle.mybatis.mapper"

                targetProject=".srcmain esources">

                <!-- enableSubPackages:是否让schema作为包的后缀 -->

                <property name="enableSubPackages"value="false" />

            </sqlMapGenerator>

            <!-- targetPackage:mapper接口生成的位置 -->

            <javaClientGenerator type="XMLMAPPER"

                targetPackage="com.oracle.dao"

                targetProject=".srcmainjava">

                <!-- enableSubPackages:是否让schema作为包的后缀 -->

                <property name="enableSubPackages"value="false" />

            </javaClientGenerator>

            <!-- 指定数据库表 -->

            <table schema=""tableName="book"></table>

            <table schema=""tableName="account"></table>

           

            <!-- 有些表的字段需要指定java类型

             <table schema=""tableName="">

                <columnOverridecolumn="" javaType="" />

            </table> -->

        </context>

    </generatorConfiguration>

    从上面的配置文件中可以看出,配置文件主要做的几件事是:

    1.   连接数据库,这是必须的,要不然怎么根据数据库的表生成代码呢?

    2.   指定要生成代码的位置,要生成的代码包括po类,mapper.xml和mapper.java

    3.   指定数据库中想要生成哪些表

    执行逆向工程生成代码

    配置文件搞好了,然后就执行以下程序即可生成代码了,生成的java程序,下载的逆向工程文档中都有示例,如下:

    publicclass Generator {

        publicvoid generator() throws Exception{

            List<String> warnings = new ArrayList<String>();

            booleanoverwrite = true;

            //指定逆向工程配置文件

            File configFile = new File("src/main/resources/Configuration.xml");

            System.out.println(configFile.getAbsolutePath());

            ConfigurationParser cp = new ConfigurationParser(warnings);

            Configuration config = cp.parseConfiguration(configFile);

            DefaultShellCallback callback = new DefaultShellCallback(overwrite);

            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,

                    callback, warnings);

            myBatisGenerator.generate(null);

        }

        /**主函数*/

        publicstaticvoid main(String[] args) throws Exception {

            try {

                GeneratorgeneratorSqlmap = new Generator();

                generatorSqlmap.generator();

            } catch (Exception e) {

                e.printStackTrace();

            }

        }

    }

    运行一下即可,运行完了后刷新一下工程,就可以看到最新生成的代码了。 
     
    这里可以看出有个细节,每个vo类多了一个东西,就是xxxExample.java,这个类是给用户自定义sql使用的,后面我会提到。到这里就生成好了,下面我们就把生成的代码拷贝到自己的工程使用了。

    逆向工程测试

    在这里我把生成的代码拷贝到上文的工程案例中,: 
     
    接着在Spring核心配置文件——application-context.xml添加如下配置:

    <bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">

          <property name="dataSource"ref="dataSource"></property>

          <!-- 映射文件所在的位置 -->

          <property name="mapperLocations"value="classpath*:com/oracle/mapper/*.xml"></property>

          <property name="typeAliasesPackage"value="com.oracle.vo"></property>

          <property name="configurationProperties">

             <props>

                <prop key="logImpl">LOG4J</prop>

             </props>

          </property>

          <!-- 配置分页插件 -->

          <property name="plugins">

             <array>

                <bean class="com.github.pagehelper.PageHelper">

                    <property name="properties">

                       <value>

                          dialect=mysql

                          reasonable=true

                       </value>

                    </property>

                </bean>

             </array>

          </property>

       </bean>

       <!-- dao接口的位置 -->

       <mybatis-spring:scan base-package="com.oracle.dao"/>

    最后编写UserMapper接口的单元测试类——UserMapperTest.java,内容如下:

    publicclassUserMapperTest {

        privateApplicationContext applicationContext;

        @Before

        publicvoidinit() {

           // 初始化Spring容器

           applicationContext = newClassPathXmlApplicationContext("capplication-context.xml");

       }

        @Test

        publicvoidtestDeleteByPrimaryKey() {

           // 请读者自行测试...

       }

        @Test

        publicvoidtestInsert() {

           BookMapper bookMapper = applicationContext.getBean(BookMapper.class);

           Book book = new Book();

           book.setName("数学之美");

           book.setIsbn(4578963);

           book.setPrice(39);

           bookMapper.insert(book);

       }

        @Test

        publicvoidtestSelectByExample() {

           BookMapper bookMapper = applicationContext.getBean(BookMapper.class);

           BookExample example = new bookExample();

           // Criteria类是UserExample类里面的内部类,Criteria类是干什么用的呢?它专门用于封装自定义查询条件的

           // Criteria criteria = example.createCriteria();

           // criteria.andNameLike("%数学%");

           // 执行查询

           List<BookMapper> list = bookMapper.selectByExample(example);

           for (BookMapper book : list) {

               System.out.println(user);

           }

       }

        @Test

        publicvoidtestSelectByPrimaryKey() {

          BookMapper bookMapper = applicationContext.getBean(BookMapper.class);

           BookMapper book = bookMapper.selectByPrimaryKey(10);

           System.out.println(book);

       }

        @Test

        publicvoidtestUpdateByPrimaryKey() {

           // 请读者自行测试...

       }

    }

    可以看出,逆向工程生成的代码,基本上和之前使用的差不多,只不过它更规范一点,而且还多了自定义查询条件的java类,用起来还是挺方便的。 
    ---------------------
    作者:戚爱斌
    来源:CSDN
    原文:https://blog.csdn.net/qqyb2000/article/details/80031559
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    Mybatis 原始dao CRUD方法
    JQuery的焦点事件focus() 与按键事件keydown() 及js判断当前页面是否为顶级页面 子页面刷新将顶级页面刷新 window.top.location
    使用actionerror做失败登录验证
    Java项目中的下载 与 上传
    shiro框架 4种授权方式 说明
    javascript 中数组的创建 添加 与将数组转换成字符串 页面三种提交请求的方式
    序列化表单为json对象,datagrid带额外参提交一次查询 后台用Spring data JPA 实现带条件的分页查询 多表关联查询
    Spring data JPA 理解(默认查询 自定义查询 分页查询)及no session 三种处理方法
    orcal 数据库 maven架构 ssh框架 的全注解环境模版 maven中央仓库批量删除lastupdated文件后依然是lastupdated解决方法 mirror aliyun中央仓库
    EasyUI加zTree使用解析 easyui修改操作的表单回显方法 验证框提交表单前验证 datagrid的load方法
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/10917996.html
Copyright © 2011-2022 走看看