MyBatis逆向工程

面对简单而又朴素的增删改查,我们又不想写的时候,我们可以使用MyBatis逆向工程插件进行自动生成实体类、sql映射文件,可以根据我们的表逆向生成出这些,直接看怎么用:

1.在新建一个maven工程,在build标签添加MyBatis逆向工程插件,用于自动生成实体类、sql映射文件

<!--定制构建过程-->
<build>
    <!--可配置多个插件-->
    <plugins>
        <!--其中的一个插件:mybatis逆向工程插件-->
        <plugin>
            <!--插件的GAV坐标-->
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.4.1</version>
            <!--允许覆盖-->
            <configuration>
                <overwrite>true</overwrite>
            </configuration>
            <!--插件的依赖-->
            <dependencies>
                <!--mysql驱动依赖-->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.27</version>
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>8</source>
                <target>8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

2.在resources目录下新建一个以generatorConfig命名的xml文件,必须是以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>
    
    <!-- 可以用于加载配置项或者配置文件,在整个配置文件中就可以使用${propertyKey}的方式来引用配置项
    resource:配置资源加载地址,使用resource,MBG从classpath开始找,比如com/myproject/generatorConfig.properties        
    url:配置资源加载地质,使用URL的方式,比如file:///C:/myfolder/generatorConfig.properties.
    注意,两个属性只能选址一个;
    
    另外,如果使用了mybatis-generator-maven-plugin,那么在pom.xml中定义的properties都可以直接在generatorConfig.xml中使用
<properties resource="" url="" />
 	-->
    
    <!-- 
    context:生成一组对象的环境 
    id:必选,上下文id,用于在生成错误时提示
    defaultModelType:指定生成对象的样式
        1,conditional:类似hierarchical;
        2,flat:所有内容(主键,blob)等全部生成在一个对象中;
        3,hierarchical:主键生成一个XXKey对象(key class),Blob等单独生成一个对象,其他简单属性在一个对象中(record class)
    targetRuntime:
        1,MyBatis3:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample;
        2,MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample;
    introspectedColumnImpl:类全限定名,用于扩展MBG
	-->
    <context id="DB2Tables" targetRuntime="MyBatis3Simple">
        <!--防止生成重复代码-->
        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>
      
        <commentGenerator>
            <!--是否去掉生成日期-->
            <property name="suppressDate" value="true"/>
            <!--是否去除注释-->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!--连接数据库信息-->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mumangguo"
                        userId="root"
                        password="admin">
        </jdbcConnection>

        <!-- 生成实体类包名和位置 -->
        <javaModelGenerator targetPackage="com.mmg.entity" targetProject="src/main/java">
            <!--是否开启子包-->
            <property name="enableSubPackages" value="true"/>
            <!--是否去除字段名的前后空白-->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- 生成SQL映射文件的包名和位置 -->
        <!-- 生成SQL map的XML文件生成器,
        注意,在Mybatis3之后,我们可以使用mapper.xml文件+Mapper接口(或者不用mapper接口),
            或者只使用Mapper接口+Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML的话,这个元素就必须配置
        targetPackage/targetProject:同javaModelGenerator
        -->
        <sqlMapGenerator targetPackage="com.mmg.mapper" targetProject="src/main/resources">
            <!--是否开启子包-->
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>

        <!-- 生成Mapper接口的包名和位置 -->
        <!-- 对于mybatis来说,即生成Mapper接口,注意,如果没有配置该元素,那么默认不会生成Mapper接口 
        targetPackage/targetProject:同javaModelGenerator
        type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):
            1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML;
            2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中;
            3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML;
        注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER
    	-->
        <javaClientGenerator
                type="xmlMapper"
                targetPackage="com.mmg.mapper"
                targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!-- 表名和对应的实体类名 可以使用%代替所有表名 -->
        <table tableName="t_car" domainObjectName="Car"/>

    </context>
</generatorConfiguration>

这把值得注意的是targetRuntime有两个值: MyBatis3Simple:生成的是基础版,只有基本的增删改查。 MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的添加增删改查。

3.打开maven可视化界面执行MyBatis逆向工程插件中的命令,即可自动生成相关的类和sql映射文件,这里演示一下idea的使用方法:

双击以后,就会自动生成相关的类和sql映射文件,maven显示Build Success证明成功了!

4.最后引入mybatis、mysql驱动依赖,编写mybatis核心配置进行测试逆向工程生成的sql映射文件和类是否可用!

测试一下Mybatis逆向工程生成的基础版增删改查的效果,测试结果肯定是没问题的

/**
 * MyBatis-014-generator1生成的是基础版
 * 测试mybatis逆向工程生成的增删改查是否能用
 */
public class TestGenerator {
    public static void main(String[] args) {
        SqlSession sqlSession = SqlSessionUtil.openSqlSession();
        CarMapper carMapper = sqlSession.getMapper(CarMapper.class);
        List<Car> cars = carMapper.selectAll();
        cars.forEach(car -> System.out.println(car));

        Car car = carMapper.selectByPrimaryKey(1);
        System.out.println(car);
    }
}

我们再看一下Mybatis逆向工程生成的复杂的带条件的增删改查是怎么生成,只需要更改generatorConfig.xml文件,其他保持一致的设置即可。前面也提到了,需要更改哪个地方,如果没看懂,可以看看跟上面的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>
    <!--
        targetRuntime有两个值:
            MyBatis3Simple:生成的是基础版,只有基本的增删改查。
            MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。
    -->
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!--防止生成重复代码-->
        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>

        <commentGenerator>
            <!--是否去掉生成日期-->
            <property name="suppressDate" value="true"/>
            <!--是否去除注释-->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!--连接数据库信息-->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mumangguo"
                        userId="root"
                        password="admin">
        </jdbcConnection>

        <!-- 生成实体类包名和位置 -->
        <javaModelGenerator targetPackage="com.mmg.entity" targetProject="src/main/java">
            <!--是否开启子包-->
            <property name="enableSubPackages" value="true"/>
            <!--是否去除字段名的前后空白-->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- 生成SQL映射文件的包名和位置 -->
        <sqlMapGenerator targetPackage="com.mmg.mapper" targetProject="src/main/resources">
            <!--是否开启子包-->
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>

        <!-- 生成Mapper接口的包名和位置 -->
        <javaClientGenerator
                type="xmlMapper"
                targetPackage="com.mmg.mapper"
                targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!-- 表名和对应的实体类名 可以使用%代替所有表名 -->
        <table tableName="t_car" domainObjectName="Car"/>

    </context>
</generatorConfiguration>

测试一下Mybatis逆向工程生成的带条件的增删改查的效果,测试结果肯定也是没问题的

/**
 * MyBatis-015-generator02生成的是增强版
 * 测试mybatis逆向工程生成的增删改查是否能用
 *
 */
public class TestGenerator02 {
    public static void main(String[] args) {
        SqlSession sqlSession = SqlSessionUtil.openSqlSession();
        CarMapper carMapper = sqlSession.getMapper(CarMapper.class);
        //查询所有,selectByExample是根据条件查询,如果条件是null就是查询所有
        List<Car> cars = carMapper.selectByExample(null);
        cars.forEach(car -> System.out.println(car));
        //查询一个
        Car car = carMapper.selectByPrimaryKey(1);
        System.out.println(car);
        System.out.println("===================================================================");
        //这种查询方式称为QBC风格:Query By Criteria 一种查询方式,比较面向对象,看不到sql语句
        //封装一个条件
        CarExample carExample = new CarExample();
        //调用createCriteria()创建条件
        carExample.createCriteria().andBrandEqualTo("丰田").andGuidePriceGreaterThan(BigDecimal.valueOf(20.0));
        //添加or
        carExample.or().andCarTypeEqualTo("燃油车");
        List<Car> cars1 = carMapper.selectByExample(carExample);
        cars1.forEach(car1 -> System.out.println(car1));
    }
}

总结:Mybatis逆向工程真好用!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木芒果呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值