【Mybatis】(六)逆向工程

Mybatis Generator(MBG)通過豐富的配置可以生成不同類型的代碼,代碼包含了數據庫表對應的實體類Mapper接口類Mapper XML文件Example對象等。這些代碼文件中幾乎包含了全部的單表操作方法,使用MBG可以極大程度上方便我們使用Mybatis。
接下來介紹具體的配置過程:

1、配置 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>

        <!--jdbcConnection:指定如何連接到目標數據庫
            targetRuntime="MyBatis3Simple":生成簡單版的CRUD
            targetRuntime="MyBatis3":生成複雜的CRUD
        -->
        <context id="DB2Tables" targetRuntime="MyBatis3">
                <jdbcConnection  driverClass="com.mysql.jdbc.Driver"
                                connectionURL="jdbc:mysql://localhost:3306/mybatis"
                                userId="root"
                                password="13579">
                </jdbcConnection>

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

                <!--javaModelGenerator:指定Javabean的生成策略
                    targetPackage ="test.model" 目標包名
                    argetProject = "\ MBGTestProject \ src" 目標工程
                 -->
                <javaModelGenerator targetPackage ="com.lhk.mybatis.bean" targetProject = ".\src">
                    <property name ="enableSubPackages" value ="true"/>
                    <property name ="trimStrings" value = "true"/>
                </javaModelGenerator>

                <!--sqlMapGenerator:sql映射生成策略
                    targetPackage ="test.xml" 目標包名
                    targetProject ="\MBGTestProject\ src" 目標工程
                -->
                <sqlMapGenerator targetPackage ="conf" targetProject =".\src">
                    <property name ="enableSubPackages" value ="true"/>
                </sqlMapGenerator>


                <!--javaClientGenerator:指定mapper接口所在的位置
                    targetPackage = "test.dao" 目標包名
                    targetProject = "\ MBGTestProject \ src" 目標工程
                -->
                <javaClientGenerator type = "XMLMAPPER" targetPackage = "com.lhk.mybatis.dao" targetProject = ".\src">
                    <property name ="enableSubPackages" value ="true"/>
                </javaClientGenerator>

                <!--table:指定要逆向生成的表,根據表要創建Javabean
                    tableName ="tb1_employee" 數據庫中的表名
                    domainObjectName ="Employee" 對應生成的Javabean類名稱
                -->
                <table tableName ="tb1_employee" domainObjectName ="Employee">
                    <property name="useActualColumnNames" value="true"/>
                    <generatedKey column="ID" sqlStatement="DB2" identity="true" />
                    <columnOverride column="DATE_FIELD" property="startDate" />
                    <ignoreColumn column="FRED" />
                    <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
                </table>
                <table tableName="tb1_dept" domainObjectName="Department">
                    <property name="useActualColumnNames" value="true"/>
                    <generatedKey column="ID" sqlStatement="DB2" identity="true" />
                    <columnOverride column="DATE_FIELD" property="startDate" />
                    <ignoreColumn column="FRED" />
                    <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
                </table>
        </context>
    </generatorConfiguration>

2、添加 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>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <!-- 數據庫連接的配置信息 驅動,URL,用戶名,密碼-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="13579" />
            </dataSource>
        </environment>
    </environments>

    <!-- 將我們寫好的sql映射文件(EmployeeMapper.xml)一定要註冊到全局配置文件(mybatis-config.xml)中 -->
    <mappers>
        <mapper resource="conf/EmployeeMapper.xml" />
        <mapper resource="conf/DepartmentMapper.xml" />
    </mappers>
</configuration>

3、添加MyBatisTest測試類

用於執行MBG配置生成代碼

    @Test
    public void testMbg() throws Exception{
        //MBG執行過程中的警告信息
        List<String> warnings = new ArrayList<>();
        //當生成代碼重複時,覆蓋原代碼
        boolean overwrite = true;
        //讀取MBG配置文件
        File configFile = new File("E:\\java\\IDEATest\\Mybatis_MBG\\src\\conf\\mbg.xml");

        // ...根據需要填寫配置對象......
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);

        DefaultShellCallback callback = new DefaultShellCallback(overwrite);

        // 創建MBG
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,callback,warnings);

        // 執行生成代碼
        myBatisGenerator.generate(null);
    }

在通過MBG生成代碼之前,項目的結構爲:
在這裏插入圖片描述

在使用MBG生成代碼後,項目的結構爲:
在這裏插入圖片描述

可以看到通過MBG自動生成了實體類Mapper接口類Mapper XML文件Example對象

4、測試自動生成的查詢方法

public SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "conf/mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        return new SqlSessionFactoryBuilder().build(inputStream);
    }

 @Test
    public void testSimple() throws IOException {
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        SqlSession openSession = sqlSessionFactory.openSession();
        try {
            EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);

            //查詢員工名字中有e字母的,和員工性別是0的
            //封裝員工查詢條件example
            EmployeeExample example = new EmployeeExample();
            //創建一個Criteria,這個Criteria就是拼裝查詢條件
            EmployeeExample.Criteria criteria = example.createCriteria();
            criteria.andLast_nameLike("%e%");
            criteria.andGenderEqualTo("0");

            //添加or查詢,新建一個Criteria,然後example.or(criteria2)
            EmployeeExample.Criteria criteria2 = example.createCriteria();
            criteria2.andEmailLike("%e%");
            example.or(criteria2);

            List<Employee> selectList =  mapper.selectByExample(example);
            for (Employee employee : selectList) {
                System.out.println(employee.getId());
            }
        } finally {
            openSession.close();
        }
    }

查詢結果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章