【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();
        }
    }

查询结果
在这里插入图片描述

一. 生成器模板路径可以引用相关变量 如 ${basepackage}/${className}.java,根据该变量生成输出文件 二. 自动搜索某个目录所有模板文件,无需配置 三.代码生成器模板可以引用的相关变量 1. g.generateByTable("table_name") 方法可以引用的变量 table : cn.org.rapid_framework.generator.provider.db.table.model.Table 2. g.generateByClass(UserInfo.class) 方法可以引用的变量 clazz : cn.org.rapid_framework.generator.provider.java.model.JavaClass 3. g.generateBySql("select * from user_info where pwd=:pwd") 方法可以引用的变量 sql : cn.org.rapid_framework.generator.provider.db.sql.model.Sql 4.公共变量 env : 系统环境变量 System.getProperties() : 直接引用,没有前缀 generator.properties 文件中的所有属性,直接引用,没有前缀 gg : 模板控制变量, cn.org.rapid_framework.generator.GeneratorControl 四.每个模板有gg变量可以控制自身的自定义配置 (每一个模板都会创建新的gg实例) 如是否生成,是否覆盖目标文件,甚至是生成其它文件 ${gg.setIgnoreOutput(true)}: 如果为true则不生成输出文件 ${gg.generateFile(outputFile,content)} 在模板中生成其它文件 ${gg.getProperty(key,defaultValue)}: 得到proproty,如果没有找到,则返回默认值 ${gg.getInputProperty(key)}: 会弹出一个输入框,提示用户输入值 具体参考: http://code.google.com/p/rapid-framework/wiki/rapid_generator_gg 五.支持生成(gen)及删除操作(del),即生成的代码也可以很方便的删除 . 自动删除模板扩展名: .ftl,.vm 举例: 如你有一个模板 SqlMap.xml.ftl 将变为 SqlMap.xml 所以你要生成ftl扩展名的文件,应该将文件名从 list.ftl => list.ftl.ftl 七. 模板自动include所有父目录的:macro.include文件,可以存放公共的macro 示例: 如你的模板为 com/project/UserDao.java, 将自动include: com/project/macro.include, com/macro.include, macro.include 八. generator.xml (或者generator.properties)配置文件 1.类似ant可以变量引用,引用环境变量使用${env.JAVA_HOME}, 引用System.getProperties()直接引用 2.自动替换generator.properties中的句号(.)为反斜杠,设置key为key+"_dir"后缀 示例: pkg=com.company => pkg_dir=com/company 九.自动拷贝二进制文件至输出目录 如模板目录下的 zip,rar,doc文件将会自动拷贝至输出目录,不会破坏文件格式 (通过扩展名自动识别) 十. 数据库表配置,用于自定义生成器模板引用的table变量,配置文件必须存放在classpath: generator_config/table/table_name.xml (该文件生成器可以生成,自己再自定义修改)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值