美文网首页Java
Mybatis | 逆向工程(创建一个逆向工程并分析)

Mybatis | 逆向工程(创建一个逆向工程并分析)

作者: 一颗白菜_ | 来源:发表于2019-12-12 21:53 被阅读0次

    一、创建一个逆向工程的步骤

    1、环境的准备

    (1)、准备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">
    <configuration>
    
    
        <properties resource="dbconfig.properties"></properties>
        <settings>
            <setting name="jdbcTypeForNull" value="NULL"/>
            <setting name="lazyLoadingEnabled" value="true"/>
            <setting name="aggressiveLazyLoading" value="false"/>
            <setting name="cacheEnabled" value="true"/>
        </settings>
        <!--typeAliases:别名处理器,可以为我们的Java类型取别名-->
        <typeAliases>
            <package name="com.cerr.mybatis"/>
        </typeAliases>
    
        <environments default="development">
            <environment id="development">
                <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>
    
        <mappers>
            <!-- 批量注册 -->
            <package name="com.cerr.dao"/>
        </mappers>
    </configuration>
    

    (2)、创建数据库配置文件dbconfig.properties

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/mybatis?allowMultiQueries=true
    jdbc.username=root
    jdbc.password=root
    

    (3)、准备其它相关的包

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.cerr</groupId>
        <artifactId>mybatis-1</artifactId>
        <version>1.0-SNAPSHOT</version>
        <dependencies>
            <dependency>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-core</artifactId>
                <version>1.4.0</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.2</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.testng</groupId>
                <artifactId>testng</artifactId>
                <version>7.0.0</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13-beta-3</version>
            </dependency>
        </dependencies>
    </project>
    

    2、导入相关的包

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

    3、配置逆向工程的xml文件

    我们创建一个mbg.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="DB2Tables" targetRuntime="MyBatis3Simple">
            <!-- jdbcConnection:指定如何连接到目标数据库-->
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                            connectionURL="jdbc:mysql://localhost:3306/mybatis"
                            userId="root"
                            password="root">
            </jdbcConnection>
            <!--javaTypeResolver:定义类型解析器-->
            <javaTypeResolver >
                <property name="forceBigDecimals" value="false" />
            </javaTypeResolver>
    
            <!--
            javaModelGenerator:指定JavaBean的生成策略
                targetPackage:指定目标类名
                targetProject:指定目标工程
            -->
            <javaModelGenerator targetPackage="com.cerr.bean" targetProject=".\src">
                <property name="enableSubPackages" value="true" />
                <property name="trimStrings" value="true" />
            </javaModelGenerator>
    
            <!--
                sqlMapGenerator:sql映射生成策略
            -->
            <sqlMapGenerator targetPackage="com.cerr.dao"  targetProject=".\src">
                <property name="enableSubPackages" value="true" />
            </sqlMapGenerator>
    
            <!--
            javaClientGenerator:指定mapper接口所在的位置
            -->
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.cerr.dao"  targetProject=".\src">
                <property name="enableSubPackages" value="true" />
            </javaClientGenerator>
    
            <!-- 指定要逆向生成的表:根据表要创建JavaBean-->
            <table tableName="tb1_employee" domainObjectName="Employee"></table>
            <table tableName="tbl_dept" domainObjectName="Department"></table>
    
        </context>
    </generatorConfiguration>
    

    4、创建方法来运行我们配置的逆向工程

        @Test
        public void test1() throws Exception{
            List <String> warnings = new ArrayList <String>();
            boolean overwrite = true;
            File configFile = new File("mbg.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);
        }
    

    运行后结果如下:


    图1:运行结果图

    二、分析

    1、指定创建的映射文件

    targetRuntime表示创建的映射文件的策略,若其值为MyBatis3Simple表明生成的是一个简单的映射文件;若为MyBatis则表明生成的是一个复杂的映射文件。

    <generatorConfiguration>
        <context id="DB2Tables" targetRuntime="MyBatis3Simple">
        </context>
    </generatorConfiguration>
    

    2、配置需要连接的数据库

    jdbcConnection配置连接的数据库,其中driverClass指定数据库驱动;connectionURL指定数据库的urluserId指定数据库用户名;password指定数据库用户密码。

    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://localhost:3306/mybatis"
            userId="root"
            password="root">
    </jdbcConnection>
    

    3、配置类型解析器

    javaTypeResolver指定类型解析器。

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

    4、指定JavaBean的生成策略

    javaModelGenerator用于指定JavaBean的生成策略。其中targetPackage指定目标类名,targetProject指定目标工程。

    <javaModelGenerator targetPackage="com.cerr.bean" targetProject=".\src">
         <property name="enableSubPackages" value="true" />
         <property name="trimStrings" value="true" />
    </javaModelGenerator>
    

    5、指定sql映射生成策略

    sqlMapGenerator用于指定sql映射的生成策略,其中targetPackage指定目标类名,targetProject`指定目标工程。

    <sqlMapGenerator targetPackage="com.cerr.dao"  targetProject=".\src">
       <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>
    

    6、指定mapper接口的生成策略

    javaClientGenerator用于指定mapper接口的生成策略,其中targetPackage指定目标类名,targetProject`指定目标工程。

    <javaClientGenerator type="XMLMAPPER" targetPackage="com.cerr.dao"  targetProject=".\src">
         <property name="enableSubPackages" value="true" />
    </javaClientGenerator>
    

    7、指定生成的表

    <table>可用于指定想生成JavaBean的表,MyBatis根据表的配置来生成JavaBean。tableName属性用于指定表名,domainObjectName属性用于指定生成的JavaBean的名字。

    <table tableName="tb1_employee" domainObjectName="Employee"></table>
    <table tableName="tbl_dept" domainObjectName="Department"></table>
    

    三、使用逆向工程来进行复杂的查询

    我们先将之前自动生成的文件都删除,然后将配置文件中的targetRuntime属性更改为MyBatis3。然后再调用上面的生成方法进行生成。
    生成成功后文件如下:

    图2:生成结果
    我们可以看到多了个DepartmentExample和EmployeeExample,并且响应的Mapper里面的方法也是多了不少。
    接下来我们来进行复杂的条件查询,我们直接编写方法如下:
        @Test
        public void test2() throws IOException {
            SqlSessionFactory factory = getSqlSessionFactory();
            SqlSession session = factory.openSession();
            try{
                EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
                List<Employee> employees  ;
                EmployeeExample example = new EmployeeExample();
                EmployeeExample.Criteria criteria = example.createCriteria();
                //拼装条件
                criteria.andLastNameLike("%e%");
                criteria.andGenderEqualTo("1");
    
                //另一个
                EmployeeExample.Criteria criteria1 = example.createCriteria();
                criteria1.andEmailEqualTo("%e%");
                //拼接上or
                example.or(criteria1);
                employees = mapper.selectByExample(example);
                for (Employee e : employees){
                    System.out.println(e.getId());
                }
            }finally {
                session.close();
            }
        }
    

    在这个方法中,我们想查询的sql条件为如下:

    select id, last_name, gender, email, d_id from tb1_employee WHERE ( last_name like ? and gender = ? ) or( email = ? ) 
    

    我们首先应该先实例化一个EmployeeExample对象,然后再去使用这个对象去新建两个Criteria对象,对于每一个Criteria对象,我们可以添加其sql中的and条件语句。因为Criteria对象不能添加or条件语句,因此我们需要新建两个Criteria对象,对于那个要拼接or的对象,只需调用example对象的or()方法即可,即上述代码中的example.or(criteria1);,然后使用selectByExample(example)进行查询,如果此时想查询所有的话,那么selectByExample(null)即可。运行上述的代码后,发出的sql如下:

    图3:控制台打印sql

    相关文章

      网友评论

        本文标题:Mybatis | 逆向工程(创建一个逆向工程并分析)

        本文链接:https://www.haomeiwen.com/subject/rrstnctx.html