Mybatis学习05:Mybatis逆向工程

本文详细介绍如何使用Mybatis逆向工具mybatis-generator根据数据库自动生成Java实体类、Mapper接口及XML配置文件,显著提升开发效率。同时,深入探讨如何利用生成的Example类进行复杂动态查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis逆向工具mybatis-generator

Mybatis逆向工具mybatis-generator可以帮助我们根据数据库自动生成对应的java以及xml代码. 可以说是很提高效率了.其官方文档地址:MyBatis Generator Core – Introduction to MyBatis Generator(不得不吐槽一下,官方文档竟然有错别字).

Mybatis逆向工具的使用

使用mybatis-generator生成代码

我们在MAVEN项目中使用mybatis-generator,根据数据库逆向出对应的Java和SQL代码.

  1. pom.xml下导入mybatis-generator的依赖和MAVEN插件

    <project ...>
        ...
        <!-- 添加mybatis-generator依赖 --->
    	<dependencies>
    		<dependency>
    			<groupId>org.mybatis.generator</groupId>
    			<artifactId>mybatis-generator-core</artifactId>
    			<version>1.3.2</version>
    		</dependency>
    	</dependencies>
    	...
    	<build>
    		...
    		<plugins>
    			...
                <!-- 添加mybatis-generator插件 -->
    			<plugin>
    				<groupId>org.mybatis.generator</groupId>
    				<artifactId>mybatis-generator-maven-plugin</artifactId>
    				<version>1.3.7</version>
    			</plugin>
    			...
    		</plugins>
    		...
    	</build>
    	...
    </project>
    
  2. src/main/resources目录下创建代码生成器的配置文件generatorConfig.xml,详细文档见MyBatis Generator Core – MyBatis Generator XML Configuration File Reference.

    <?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>
        <!-- 数据库驱动jar包的位置 -->
        <classPathEntry location="C:/Users/chenhai/.m2/repository/mysql/mysql-connector-java/8.0.13/mysql-connector-java-8.0.13.jar" />
    
    	<!-- context:生成一组对象的环境 -->
    	<context id="DB2Tables" targetRuntime="MyBatis3">
            <!-- 配置数据库链接 -->
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
    			connectionURL="jdbc:mysql://127.0.0.1:3306/mydatabase"
    			userId="root" 
    			password="mysql" />
    		</jdbcConnection>
    
        	<!-- java类型处理器 -->
    		<javaTypeResolver>
                <!-- 该属性默认为true,表示将所有JDBC DECIMAL和JDBC java.math.BigInteger类对象,否则根据其scale和length决定其映射成的Java类型 -->
    			<property name="forceBigDecimals" value="false" />
    		</javaTypeResolver>
    
        	<!-- 配置自动生成的pojo类,targetPackage属性表示生成的类所放在的包,targetProject属性表示生成代码所在的项目 -->
    		<javaModelGenerator targetPackage="cn.maoritian.domain" targetProject="src/main/java">
                <property name="constructorBased" value="false"/>
    			<property name="enableSubPackages" value="false" />
                <property name="immutable" value="false"/>
    			<property name="trimStrings" value="true" />
    		</javaModelGenerator>
    
        	<!-- 配置自动生成的mapper.xml -->
    		<sqlMapGenerator targetPackage="cn.maoritian.mapper"  targetProject="src/main/java/resources">
    			<property name="enableSubPackages" value="false" />
    		</sqlMapGenerator>
    
        	<!-- 配置自动生成的Mapper接口 -->
    		<javaClientGenerator targetPackage="cn.maoritian.mapper"  targetProject="src/main/java/resources">
    			<property name="enableSubPackages" value="false" />
    		</javaClientGenerator>
    
        	<!-- 指定要逆向分析的表 -->
        	<!-- <table>标签下的节点基本上是对javaModelGenerator的覆盖 -->
    		<table tableName="student" domainObjectName="Student" delimitAllColumns="true">
                <!-- 指定是否使用驼峰命名 -->
    			<property name="useActualColumnNames" value="true"/>
    			<generatedKey column="id" sqlStatement="MySql" identity="true" />
    			<!-- <ignoreColumn column="hobby" /> -->
    			<!-- <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> -->
    		</table>
    	</context>
    </generatorConfiguration>
    
  3. 在控制台输入mvn mybatis-generator:generate -e,会自动构建出代码,-e参数是为了输出详细信息.

注意: mybatis-generator不会检查指定的目录及类是否存在,需要我们手动检查

使用Example类进行动态查询

我们看到,自动生成的Java实体类中除了pojo类之外,还生成了xxxExample类,这个类可以与xxxMapper接口中的方法相配合,完成复杂的动态查询,可以看到Mapper接口中查询操作的条件是以Example对象表示的.

在这里插入图片描述

每个Example类中都定义了一个Criteria 内部类,Criteria对象可以调用andxxx()方法在逻辑上进行AND拼接;每个Example对象中都维护一个Criteria列表,列表中的Criteria对象在逻辑上是OR的关系.

  • 我们可以通过Example对象的or方法创建一个Criteria对象并将其加入该Example对象的条件列表中.

    TestTableExample example = new TestTableExample();
    
    example.or()
        .andField1EqualTo(5)
        .andField2IsNull();
    
    example.or()
        .andField3NotEqualTo(9)
        .andField4IsNotNull();
    
    List<Integer> field5Values = new ArrayList<Integer>();
        field5Values.add(8);
        field5Values.add(11);
        field5Values.add(14);
        field5Values.add(22);
    
    example.or()
    	.andField5In(field5Values);
    
    example.or()
    	.andField6Between(3, 7);
    

    上面的example对象相当于下列条件

    where (field1 = 5 and field2 is null)
    	or (field3 <> 9 and field4 is not null)
    	or (field5 in (8, 11, 14, 22))
    	or (field6 between 3 and 7)
    
  • 我们可以对Example对象调用setDistinct(true)设置查询结果不重复,相当于在sql语句中加上了DISTINCT限定符.

更多Mybatis支持的andxxx()方法及其对应的条件可以参考官方文档

  • 我们也可以在生成的Example类中实现自定义的查询条件.其本质就是sql语句的拼接.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值