Mybaits之逆向工程

Posted 朝花有露

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybaits之逆向工程相关的知识,希望对你有一定的参考价值。

           小编现接手一项目,SSM框架。MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架,MyBaits消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和java 的POJO(plain old java objects,普通的java 对象)映射成数据库中的记录。

一、逆向工程是什么

在项目中需要程序员自己编写sql语句,如果每张表都需要写增删改的方法,很是麻烦和复杂,所以mybaits 官方提供逆向工程,可以针对单表自动生成相应的增删改查的方法,以便使用。执行生成所需的代码(mapper.java ,mapper.xml……)
在实际开发中,通常采用用逆向工程方式,由数据库的表生成java 代码。

二、工具类下载

博友们可以自行从官网下载最新版本,本着为人民服务的原则,小编也专门在CSDN上上传源代码,供亲们下载。Mybatis逆向工程

三、如何使用

1、配置文件

博友下载后打开压缩文件,将该程序导入到java项目中,值得注意的是generatorConfig.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>
    <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/taotao" userId="root"
            password="root">
        </jdbcConnection>
        <!-- oracle数据库连接字符串---->
        <!--<jdbcConnection driverClass="oracle.jdbc.OracleDriver"
            connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:taotao" userId="taotao"
            password="taotao">
        </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.taotao.pojo"
            targetProject=".\\src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- targetProject:mapper映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="com.taotao.mapper" 
            targetProject=".\\src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <!-- targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER"
            targetPackage="com.taotao.mapper" 
            targetProject=".\\src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- 指定数据库表 -->
        <table schema="" tableName="tb_content"></table>
        <table schema="" tableName="tb_content_category"></table>
        <table schema="" tableName="tb_item"></table>
        <table schema="" tableName="tb_item_cat"></table>
        <table schema="" tableName="tb_item_desc"></table>
        <table schema="" tableName="tb_item_param"></table>
        <table schema="" tableName="tb_item_param_item"></table>
        <table schema="" tableName="tb_order"></table>
        <table schema="" tableName="tb_order_item"></table>
        <table schema="" tableName="tb_order_shipping"></table>
        <table schema="" tableName="tb_user"></table>

    </context>
</generatorConfiguration>

2、执行文件

       GeneratorSqlmap.java
import java.io.File;
import java.io.IOException;
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.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

public class GeneratorSqlmap 

    public void generator() throws Exception

        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        //指定 逆向工程配置文件
        File configFile = new File("generatorConfig.xml"); 
        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);

     
    public static void main(String[] args) throws Exception 
        try 
            GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
            generatorSqlmap.generator();
         catch (Exception e) 
            e.printStackTrace();
               
    

3、执行结果

       值得我们注意的是:mapper.xml文件已存在时,如果进行重新生成则mapper.xml文件内容不被覆盖而是进行内容增加,结果会导致mybatis解析失败。解决办法:删除原来的已经生成的mapper.xml文件重新生成。mybais自动生成的实体entity以及mapper.java文件不是内容追加而是直接覆盖没有问题。

四、Junit测试类

     我们可进行Junit 测试类。小编就其中的ItemMapper类进行测试。



以上步骤完成后,便可进行测试

// 创建一个容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                "classpath:spring/applicationContext-*.xml"); 
        // 从spring 容器中获得Mapper的代理对象
        TbItemMapper mapper = applicationContext.getBean(TbItemMapper.class);
        TbItem item=mapper.selectByPrimaryKey(536563L);
        System.out.println(item);

执行之后,便可见证奇迹……

以上是关于Mybaits之逆向工程的主要内容,如果未能解决你的问题,请参考以下文章

[mybaits][逆向工程]

01_Mybaits逆向工程maven版

mybaits-plus入门及工程建立

postgresql 主键自增,以及mybaits 逆向生成

mybaits-plus学习笔记整合

怎么将标准差转成0-1