MyBatis逆向⼯程的生成过程

作者:@每天都要敲代码 时间:2023-11-28 17:29:22 

一、MyBatis的逆向⼯程

(1)所谓的逆向⼯程是:根据数据库表逆向⽣成Java的pojo类,SqlMapper.xml⽂件,以及Mapper接⼝类等,这真是一个很强大的功能。 要完成这个⼯作,需要借助别⼈写好的逆向⼯程插件。

(2)思考:使⽤这个插件的话,需要给这个插件配置哪些信息?

①pojo类名、包名以及⽣成位置。

②SqlMapper.xml⽂件名以及⽣成位置。

③Mapper接⼝名以及⽣成位置。

④连接数据库的信息。

⑤指定哪些表参与逆向⼯程。

......

1.逆向⼯程配置与⽣成

(1)基础环境准备

新建一个普通的Maven模块:mybatis-012-generator

打包⽅式:jar

(2)在pom.xml中添加逆向⼯程插件

①先引入mybatis逆向⼯程的插件,引入仓库中对应的插件坐标。

②允许覆盖:表示原来这些文件存在,true就以覆盖的方式生成文件,false就以追加的方式生成文件。

③引入插件的依赖:我们需要根据数据库表逆向生成pojo类、SqlMapper接口和里面的方法、SqlMapper.xml配置文件等,所以肯定需要mysql的驱动。

<?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.bjpowernode</groupId>
   <artifactId>mybatis-012-generator</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>
   <!--定制构建过程-->
   <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>5.1.23</version>
                   </dependency>
               </dependencies>
           </plugin>
       </plugins>
   </build>
</project>

(3)配置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="MyBatis3Simple">
       <!--防止生成重复代码-->
       <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>
       <commentGenerator>
           <!--是否去掉生成日期-->
           <property name="suppressDate" value="true"/>
           <!--是否去除注释-->
           <property name="suppressAllComments" value="true"/>
       </commentGenerator>
       <!--连接数据库信息-->
       <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                       connectionURL="jdbc:mysql://localhost:3306/mybatis"
                       userId="root"
                       password="123">
       </jdbcConnection>
       <!-- 生成pojo包名和位置 -->
       <javaModelGenerator targetPackage="com.bjpowernode.mybatis.pojo" targetProject="src/main/java">
           <!--是否开启子包-->
           <property name="enableSubPackages" value="true"/>
           <!--是否去除字段名的前后空白-->
           <property name="trimStrings" value="true"/>
       </javaModelGenerator>
       <!-- 生成SQL映射文件的包名和位置 -->
       <sqlMapGenerator targetPackage="com.bjpowernode.mybatis.mapper" targetProject="src/main/resources">
           <!--是否开启子包-->
           <property name="enableSubPackages" value="true"/>
       </sqlMapGenerator>
       <!-- 生成Mapper接口的包名和位置 -->
       <javaClientGenerator
               type="xmlMapper"
               targetPackage="com.bjpowernode.mybatis.mapper"
               targetProject="src/main/java">
           <property name="enableSubPackages" value="true"/>
       </javaClientGenerator>
       <!-- 表名和对应的实体类名-->
       <table tableName="t_car" domainObjectName="Car"/>
   </context>
</generatorConfiguration>

(4)双击运行插件,就可以生成基础版的配置信息

MyBatis逆向⼯程的生成过程

自动生成的CarMapper接口、pojo类Car、CarMapper.xml配置文件

MyBatis逆向⼯程的生成过程

CarMapper接口

package com.bjpowernode.mybatis.mapper;
import com.bjpowernode.mybatis.pojo.Car;
import java.util.List;
public interface CarMapper {
   int deleteByPrimaryKey(Long id);
   int insert(Car row);
   Car selectByPrimaryKey(Long id);
   List<Car> selectAll();
   int updateByPrimaryKey(Car row);
}

pojo类Car

注:生成的pojo类并没有重写toString方法

package com.bjpowernode.mybatis.pojo;
import java.math.BigDecimal;
public class Car {
   private Long id;
   private String carNum;
   private String brand;
   private BigDecimal guidePrice;
   private String produceTime;
   private String carType;
   @Override
   public String toString() {
       return "Car{" +
               "id=" + id +
               ", carNum='" + carNum + '\'' +
               ", brand='" + brand + '\'' +
               ", guidePrice=" + guidePrice +
               ", produceTime='" + produceTime + '\'' +
               ", carType='" + carType + '\'' +
               '}';
   }
   public Long getId() {
       return id;
   }
   public void setId(Long id) {
       this.id = id;
   }
   public String getCarNum() {
       return carNum;
   }
   public void setCarNum(String carNum) {
       this.carNum = carNum == null ? null : carNum.trim();
   }
   public String getBrand() {
       return brand;
   }
   public void setBrand(String brand) {
       this.brand = brand == null ? null : brand.trim();
   }
   public BigDecimal getGuidePrice() {
       return guidePrice;
   }
   public void setGuidePrice(BigDecimal guidePrice) {
       this.guidePrice = guidePrice;
   }
   public String getProduceTime() {
       return produceTime;
   }
   public void setProduceTime(String produceTime) {
       this.produceTime = produceTime == null ? null : produceTime.trim();
   }
   public String getCarType() {
       return carType;
   }
   public void setCarType(String carType) {
       this.carType = carType == null ? null : carType.trim();
   }
}

CarMapper.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bjpowernode.mybatis.mapper.CarMapper">
 <resultMap id="BaseResultMap" type="com.bjpowernode.mybatis.pojo.Car">
   <id column="id" jdbcType="BIGINT" property="id" />
   <result column="car_num" jdbcType="VARCHAR" property="carNum" />
   <result column="brand" jdbcType="VARCHAR" property="brand" />
   <result column="guide_price" jdbcType="DECIMAL" property="guidePrice" />
   <result column="produce_time" jdbcType="CHAR" property="produceTime" />
   <result column="car_type" jdbcType="VARCHAR" property="carType" />
 </resultMap>
 <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
   delete from t_car
   where id = #{id,jdbcType=BIGINT}
 </delete>
 <insert id="insert" parameterType="com.bjpowernode.mybatis.pojo.Car">
   insert into t_car (id, car_num, brand,
     guide_price, produce_time, car_type
     )
   values (#{id,jdbcType=BIGINT}, #{carNum,jdbcType=VARCHAR}, #{brand,jdbcType=VARCHAR},
     #{guidePrice,jdbcType=DECIMAL}, #{produceTime,jdbcType=CHAR}, #{carType,jdbcType=VARCHAR}
     )
 </insert>
 <update id="updateByPrimaryKey" parameterType="com.bjpowernode.mybatis.pojo.Car">
   update t_car
   set car_num = #{carNum,jdbcType=VARCHAR},
     brand = #{brand,jdbcType=VARCHAR},
     guide_price = #{guidePrice,jdbcType=DECIMAL},
     produce_time = #{produceTime,jdbcType=CHAR},
     car_type = #{carType,jdbcType=VARCHAR}
   where id = #{id,jdbcType=BIGINT}
 </update>
 <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
   select id, car_num, brand, guide_price, produce_time, car_type
   from t_car
   where id = #{id,jdbcType=BIGINT}
 </select>
 <select id="selectAll" resultMap="BaseResultMap">
   select id, car_num, brand, guide_price, produce_time, car_type
   from t_car
 </select>
</mapper>

2.测试生成的逆向⼯程

(1)环境准备

①依赖:mybatis依赖、mysql驱动依赖、junit依赖、logback依赖

②jdbc.properties、mybatis-config.xml、logback.xml

③拷贝工具类:SqlSessionUtil

(2)编写测试程序(基础版)

package com.bjpowernode.mybatis.test;
import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class CarMapperTest {
   @Test
   public void testSelectAll(){
       SqlSession sqlSession = SqlSessionUtil.openSession();
       CarMapper mapper = sqlSession.getMapper(CarMapper.class);
       List<Car> cars = mapper.selectAll();
       cars.forEach(car -> System.out.println(car));
       sqlSession.close();
   }
}

执行结果:

MyBatis逆向⼯程的生成过程

(3)配置generatorConfig.xml(增强版)

MyBatis逆向⼯程的生成过程

生成了两个pojo类,并且对于接口中的方法也变多了

MyBatis逆向⼯程的生成过程

CarMapper接口

package com.bjpowernode.mybatis.mapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.pojo.CarExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface CarMapper {
   long countByExample(CarExample example);
   int deleteByExample(CarExample example);
   int deleteByPrimaryKey(Long id);
   int insert(Car row);
   int insertSelective(Car row);
   List<Car> selectByExample(CarExample example);
   Car selectByPrimaryKey(Long id);
   int updateByExampleSelective(@Param("row") Car row, @Param("example") CarExample example);
   int updateByExample(@Param("row") Car row, @Param("example") CarExample example);
   int updateByPrimaryKeySelective(Car row);
   int updateByPrimaryKey(Car row);
}

pojo类Car

package com.bjpowernode.mybatis.pojo;
import java.math.BigDecimal;
public class Car {
   private Long id;
   private String carNum;
   private String brand;
   private BigDecimal guidePrice;
   private String produceTime;
   private String carType;
   @Override
   public String toString() {
       return "Car{" +
               "id=" + id +
               ", carNum='" + carNum + '\'' +
               ", brand='" + brand + '\'' +
               ", guidePrice=" + guidePrice +
               ", produceTime='" + produceTime + '\'' +
               ", carType='" + carType + '\'' +
               '}';
   }
   public Long getId() {
       return id;
   }
   public void setId(Long id) {
       this.id = id;
   }
   public String getCarNum() {
       return carNum;
   }
   public void setCarNum(String carNum) {
       this.carNum = carNum == null ? null : carNum.trim();
   }
   public String getBrand() {
       return brand;
   }
   public void setBrand(String brand) {
       this.brand = brand == null ? null : brand.trim();
   }
   public BigDecimal getGuidePrice() {
       return guidePrice;
   }
   public void setGuidePrice(BigDecimal guidePrice) {
       this.guidePrice = guidePrice;
   }
   public String getProduceTime() {
       return produceTime;
   }
   public void setProduceTime(String produceTime) {
       this.produceTime = produceTime == null ? null : produceTime.trim();
   }
   public String getCarType() {
       return carType;
   }
   public void setCarType(String carType) {
       this.carType = carType == null ? null : carType.trim();
   }
}

pojo类CarExample:封装查询条件的类

package com.bjpowernode.mybatis.pojo;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class CarExample {
   protected String orderByClause;
   protected boolean distinct;
   protected List<Criteria> oredCriteria;
   public CarExample() {
       oredCriteria = new ArrayList<>();
   }
   public void setOrderByClause(String orderByClause) {
       this.orderByClause = orderByClause;
   }
   public String getOrderByClause() {
       return orderByClause;
   }
   public void setDistinct(boolean distinct) {
       this.distinct = distinct;
   }
   public boolean isDistinct() {
       return distinct;
   }
   public List<Criteria> getOredCriteria() {
       return oredCriteria;
   }
   public void or(Criteria criteria) {
       oredCriteria.add(criteria);
   }
   public Criteria or() {
       Criteria criteria = createCriteriaInternal();
       oredCriteria.add(criteria);
       return criteria;
   }
   public Criteria createCriteria() {
       Criteria criteria = createCriteriaInternal();
       if (oredCriteria.size() == 0) {
           oredCriteria.add(criteria);
       }
       return criteria;
   }
   protected Criteria createCriteriaInternal() {
       Criteria criteria = new Criteria();
       return criteria;
   }
   public void clear() {
       oredCriteria.clear();
       orderByClause = null;
       distinct = false;
   }
   protected abstract static class GeneratedCriteria {
       protected List<Criterion> criteria;
       protected GeneratedCriteria() {
           super();
           criteria = new ArrayList<>();
       }
       public boolean isValid() {
           return criteria.size() > 0;
       }
       public List<Criterion> getAllCriteria() {
           return criteria;
       }
       public List<Criterion> getCriteria() {
           return criteria;
       }
       protected void addCriterion(String condition) {
           if (condition == null) {
               throw new RuntimeException("Value for condition cannot be null");
           }
           criteria.add(new Criterion(condition));
       }
       protected void addCriterion(String condition, Object value, String property) {
           if (value == null) {
               throw new RuntimeException("Value for " + property + " cannot be null");
           }
           criteria.add(new Criterion(condition, value));
       }
       protected void addCriterion(String condition, Object value1, Object value2, String property) {
           if (value1 == null || value2 == null) {
               throw new RuntimeException("Between values for " + property + " cannot be null");
           }
           criteria.add(new Criterion(condition, value1, value2));
       }
       public Criteria andIdIsNull() {
           addCriterion("id is null");
           return (Criteria) this;
       }
       public Criteria andIdIsNotNull() {
           addCriterion("id is not null");
           return (Criteria) this;
       }
       public Criteria andIdEqualTo(Long value) {
           addCriterion("id =", value, "id");
           return (Criteria) this;
       }
       public Criteria andIdNotEqualTo(Long value) {
           addCriterion("id <>", value, "id");
           return (Criteria) this;
       }
       public Criteria andIdGreaterThan(Long value) {
           addCriterion("id >", value, "id");
           return (Criteria) this;
       }
       public Criteria andIdGreaterThanOrEqualTo(Long value) {
           addCriterion("id >=", value, "id");
           return (Criteria) this;
       }
       public Criteria andIdLessThan(Long value) {
           addCriterion("id <", value, "id");
           return (Criteria) this;
       }
       public Criteria andIdLessThanOrEqualTo(Long value) {
           addCriterion("id <=", value, "id");
           return (Criteria) this;
       }
       public Criteria andIdIn(List<Long> values) {
           addCriterion("id in", values, "id");
           return (Criteria) this;
       }
       public Criteria andIdNotIn(List<Long> values) {
           addCriterion("id not in", values, "id");
           return (Criteria) this;
       }
       public Criteria andIdBetween(Long value1, Long value2) {
           addCriterion("id between", value1, value2, "id");
           return (Criteria) this;
       }
       public Criteria andIdNotBetween(Long value1, Long value2) {
           addCriterion("id not between", value1, value2, "id");
           return (Criteria) this;
       }
       public Criteria andCarNumIsNull() {
           addCriterion("car_num is null");
           return (Criteria) this;
       }
       public Criteria andCarNumIsNotNull() {
           addCriterion("car_num is not null");
           return (Criteria) this;
       }
       public Criteria andCarNumEqualTo(String value) {
           addCriterion("car_num =", value, "carNum");
           return (Criteria) this;
       }
       public Criteria andCarNumNotEqualTo(String value) {
           addCriterion("car_num <>", value, "carNum");
           return (Criteria) this;
       }
       public Criteria andCarNumGreaterThan(String value) {
           addCriterion("car_num >", value, "carNum");
           return (Criteria) this;
       }
       public Criteria andCarNumGreaterThanOrEqualTo(String value) {
           addCriterion("car_num >=", value, "carNum");
           return (Criteria) this;
       }
       public Criteria andCarNumLessThan(String value) {
           addCriterion("car_num <", value, "carNum");
           return (Criteria) this;
       }
       public Criteria andCarNumLessThanOrEqualTo(String value) {
           addCriterion("car_num <=", value, "carNum");
           return (Criteria) this;
       }
       public Criteria andCarNumLike(String value) {
           addCriterion("car_num like", value, "carNum");
           return (Criteria) this;
       }
       public Criteria andCarNumNotLike(String value) {
           addCriterion("car_num not like", value, "carNum");
           return (Criteria) this;
       }
       public Criteria andCarNumIn(List<String> values) {
           addCriterion("car_num in", values, "carNum");
           return (Criteria) this;
       }
       public Criteria andCarNumNotIn(List<String> values) {
           addCriterion("car_num not in", values, "carNum");
           return (Criteria) this;
       }
       public Criteria andCarNumBetween(String value1, String value2) {
           addCriterion("car_num between", value1, value2, "carNum");
           return (Criteria) this;
       }
       public Criteria andCarNumNotBetween(String value1, String value2) {
           addCriterion("car_num not between", value1, value2, "carNum");
           return (Criteria) this;
       }
       public Criteria andBrandIsNull() {
           addCriterion("brand is null");
           return (Criteria) this;
       }
       public Criteria andBrandIsNotNull() {
           addCriterion("brand is not null");
           return (Criteria) this;
       }
       public Criteria andBrandEqualTo(String value) {
           addCriterion("brand =", value, "brand");
           return (Criteria) this;
       }
       public Criteria andBrandNotEqualTo(String value) {
           addCriterion("brand <>", value, "brand");
           return (Criteria) this;
       }
       public Criteria andBrandGreaterThan(String value) {
           addCriterion("brand >", value, "brand");
           return (Criteria) this;
       }
       public Criteria andBrandGreaterThanOrEqualTo(String value) {
           addCriterion("brand >=", value, "brand");
           return (Criteria) this;
       }
       public Criteria andBrandLessThan(String value) {
           addCriterion("brand <", value, "brand");
           return (Criteria) this;
       }
       public Criteria andBrandLessThanOrEqualTo(String value) {
           addCriterion("brand <=", value, "brand");
           return (Criteria) this;
       }
       public Criteria andBrandLike(String value) {
           addCriterion("brand like", value, "brand");
           return (Criteria) this;
       }
       public Criteria andBrandNotLike(String value) {
           addCriterion("brand not like", value, "brand");
           return (Criteria) this;
       }
       public Criteria andBrandIn(List<String> values) {
           addCriterion("brand in", values, "brand");
           return (Criteria) this;
       }
       public Criteria andBrandNotIn(List<String> values) {
           addCriterion("brand not in", values, "brand");
           return (Criteria) this;
       }
       public Criteria andBrandBetween(String value1, String value2) {
           addCriterion("brand between", value1, value2, "brand");
           return (Criteria) this;
       }
       public Criteria andBrandNotBetween(String value1, String value2) {
           addCriterion("brand not between", value1, value2, "brand");
           return (Criteria) this;
       }
       public Criteria andGuidePriceIsNull() {
           addCriterion("guide_price is null");
           return (Criteria) this;
       }
       public Criteria andGuidePriceIsNotNull() {
           addCriterion("guide_price is not null");
           return (Criteria) this;
       }
       public Criteria andGuidePriceEqualTo(BigDecimal value) {
           addCriterion("guide_price =", value, "guidePrice");
           return (Criteria) this;
       }
       public Criteria andGuidePriceNotEqualTo(BigDecimal value) {
           addCriterion("guide_price <>", value, "guidePrice");
           return (Criteria) this;
       }
       public Criteria andGuidePriceGreaterThan(BigDecimal value) {
           addCriterion("guide_price >", value, "guidePrice");
           return (Criteria) this;
       }
       public Criteria andGuidePriceGreaterThanOrEqualTo(BigDecimal value) {
           addCriterion("guide_price >=", value, "guidePrice");
           return (Criteria) this;
       }
       public Criteria andGuidePriceLessThan(BigDecimal value) {
           addCriterion("guide_price <", value, "guidePrice");
           return (Criteria) this;
       }
       public Criteria andGuidePriceLessThanOrEqualTo(BigDecimal value) {
           addCriterion("guide_price <=", value, "guidePrice");
           return (Criteria) this;
       }
       public Criteria andGuidePriceIn(List<BigDecimal> values) {
           addCriterion("guide_price in", values, "guidePrice");
           return (Criteria) this;
       }
       public Criteria andGuidePriceNotIn(List<BigDecimal> values) {
           addCriterion("guide_price not in", values, "guidePrice");
           return (Criteria) this;
       }
       public Criteria andGuidePriceBetween(BigDecimal value1, BigDecimal value2) {
           addCriterion("guide_price between", value1, value2, "guidePrice");
           return (Criteria) this;
       }
       public Criteria andGuidePriceNotBetween(BigDecimal value1, BigDecimal value2) {
           addCriterion("guide_price not between", value1, value2, "guidePrice");
           return (Criteria) this;
       }
       public Criteria andProduceTimeIsNull() {
           addCriterion("produce_time is null");
           return (Criteria) this;
       }
       public Criteria andProduceTimeIsNotNull() {
           addCriterion("produce_time is not null");
           return (Criteria) this;
       }
       public Criteria andProduceTimeEqualTo(String value) {
           addCriterion("produce_time =", value, "produceTime");
           return (Criteria) this;
       }
       public Criteria andProduceTimeNotEqualTo(String value) {
           addCriterion("produce_time <>", value, "produceTime");
           return (Criteria) this;
       }
       public Criteria andProduceTimeGreaterThan(String value) {
           addCriterion("produce_time >", value, "produceTime");
           return (Criteria) this;
       }
       public Criteria andProduceTimeGreaterThanOrEqualTo(String value) {
           addCriterion("produce_time >=", value, "produceTime");
           return (Criteria) this;
       }
       public Criteria andProduceTimeLessThan(String value) {
           addCriterion("produce_time <", value, "produceTime");
           return (Criteria) this;
       }
       public Criteria andProduceTimeLessThanOrEqualTo(String value) {
           addCriterion("produce_time <=", value, "produceTime");
           return (Criteria) this;
       }
       public Criteria andProduceTimeLike(String value) {
           addCriterion("produce_time like", value, "produceTime");
           return (Criteria) this;
       }
       public Criteria andProduceTimeNotLike(String value) {
           addCriterion("produce_time not like", value, "produceTime");
           return (Criteria) this;
       }
       public Criteria andProduceTimeIn(List<String> values) {
           addCriterion("produce_time in", values, "produceTime");
           return (Criteria) this;
       }
       public Criteria andProduceTimeNotIn(List<String> values) {
           addCriterion("produce_time not in", values, "produceTime");
           return (Criteria) this;
       }
       public Criteria andProduceTimeBetween(String value1, String value2) {
           addCriterion("produce_time between", value1, value2, "produceTime");
           return (Criteria) this;
       }
       public Criteria andProduceTimeNotBetween(String value1, String value2) {
           addCriterion("produce_time not between", value1, value2, "produceTime");
           return (Criteria) this;
       }
       public Criteria andCarTypeIsNull() {
           addCriterion("car_type is null");
           return (Criteria) this;
       }
       public Criteria andCarTypeIsNotNull() {
           addCriterion("car_type is not null");
           return (Criteria) this;
       }
       public Criteria andCarTypeEqualTo(String value) {
           addCriterion("car_type =", value, "carType");
           return (Criteria) this;
       }
       public Criteria andCarTypeNotEqualTo(String value) {
           addCriterion("car_type <>", value, "carType");
           return (Criteria) this;
       }
       public Criteria andCarTypeGreaterThan(String value) {
           addCriterion("car_type >", value, "carType");
           return (Criteria) this;
       }
       public Criteria andCarTypeGreaterThanOrEqualTo(String value) {
           addCriterion("car_type >=", value, "carType");
           return (Criteria) this;
       }
       public Criteria andCarTypeLessThan(String value) {
           addCriterion("car_type <", value, "carType");
           return (Criteria) this;
       }
       public Criteria andCarTypeLessThanOrEqualTo(String value) {
           addCriterion("car_type <=", value, "carType");
           return (Criteria) this;
       }
       public Criteria andCarTypeLike(String value) {
           addCriterion("car_type like", value, "carType");
           return (Criteria) this;
       }
       public Criteria andCarTypeNotLike(String value) {
           addCriterion("car_type not like", value, "carType");
           return (Criteria) this;
       }
       public Criteria andCarTypeIn(List<String> values) {
           addCriterion("car_type in", values, "carType");
           return (Criteria) this;
       }
       public Criteria andCarTypeNotIn(List<String> values) {
           addCriterion("car_type not in", values, "carType");
           return (Criteria) this;
       }
       public Criteria andCarTypeBetween(String value1, String value2) {
           addCriterion("car_type between", value1, value2, "carType");
           return (Criteria) this;
       }
       public Criteria andCarTypeNotBetween(String value1, String value2) {
           addCriterion("car_type not between", value1, value2, "carType");
           return (Criteria) this;
       }
   }
   public static class Criteria extends GeneratedCriteria {
       protected Criteria() {
           super();
       }
   }
   public static class Criterion {
       private String condition;
       private Object value;
       private Object secondValue;
       private boolean noValue;
       private boolean singleValue;
       private boolean betweenValue;
       private boolean listValue;
       private String typeHandler;
       public String getCondition() {
           return condition;
       }
       public Object getValue() {
           return value;
       }
       public Object getSecondValue() {
           return secondValue;
       }
       public boolean isNoValue() {
           return noValue;
       }
       public boolean isSingleValue() {
           return singleValue;
       }
       public boolean isBetweenValue() {
           return betweenValue;
       }
       public boolean isListValue() {
           return listValue;
       }
       public String getTypeHandler() {
           return typeHandler;
       }
       protected Criterion(String condition) {
           super();
           this.condition = condition;
           this.typeHandler = null;
           this.noValue = true;
       }
       protected Criterion(String condition, Object value, String typeHandler) {
           super();
           this.condition = condition;
           this.value = value;
           this.typeHandler = typeHandler;
           if (value instanceof List<?>) {
               this.listValue = true;
           } else {
               this.singleValue = true;
           }
       }
       protected Criterion(String condition, Object value) {
           this(condition, value, null);
       }
       protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
           super();
           this.condition = condition;
           this.value = value;
           this.secondValue = secondValue;
           this.typeHandler = typeHandler;
           this.betweenValue = true;
       }
       protected Criterion(String condition, Object value, Object secondValue) {
           this(condition, value, secondValue, null);
       }
   }
}

CarMapper.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bjpowernode.mybatis.mapper.CarMapper">
 <resultMap id="BaseResultMap" type="com.bjpowernode.mybatis.pojo.Car">
   <id column="id" jdbcType="BIGINT" property="id" />
   <result column="car_num" jdbcType="VARCHAR" property="carNum" />
   <result column="brand" jdbcType="VARCHAR" property="brand" />
   <result column="guide_price" jdbcType="DECIMAL" property="guidePrice" />
   <result column="produce_time" jdbcType="CHAR" property="produceTime" />
   <result column="car_type" jdbcType="VARCHAR" property="carType" />
 </resultMap>
 <sql id="Example_Where_Clause">
   <where>
     <foreach collection="oredCriteria" item="criteria" separator="or">
       <if test="criteria.valid">
         <trim prefix="(" prefixOverrides="and" suffix=")">
           <foreach collection="criteria.criteria" item="criterion">
             <choose>
               <when test="criterion.noValue">
                 and ${criterion.condition}
               </when>
               <when test="criterion.singleValue">
                 and ${criterion.condition} #{criterion.value}
               </when>
               <when test="criterion.betweenValue">
                 and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
               </when>
               <when test="criterion.listValue">
                 and ${criterion.condition}
                 <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                   #{listItem}
                 </foreach>
               </when>
             </choose>
           </foreach>
         </trim>
       </if>
     </foreach>
   </where>
 </sql>
 <sql id="Update_By_Example_Where_Clause">
   <where>
     <foreach collection="example.oredCriteria" item="criteria" separator="or">
       <if test="criteria.valid">
         <trim prefix="(" prefixOverrides="and" suffix=")">
           <foreach collection="criteria.criteria" item="criterion">
             <choose>
               <when test="criterion.noValue">
                 and ${criterion.condition}
               </when>
               <when test="criterion.singleValue">
                 and ${criterion.condition} #{criterion.value}
               </when>
               <when test="criterion.betweenValue">
                 and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
               </when>
               <when test="criterion.listValue">
                 and ${criterion.condition}
                 <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                   #{listItem}
                 </foreach>
               </when>
             </choose>
           </foreach>
         </trim>
       </if>
     </foreach>
   </where>
 </sql>
 <sql id="Base_Column_List">
   id, car_num, brand, guide_price, produce_time, car_type
 </sql>
 <select id="selectByExample" parameterType="com.bjpowernode.mybatis.pojo.CarExample" resultMap="BaseResultMap">
   select
   <if test="distinct">
     distinct
   </if>
   <include refid="Base_Column_List" />
   from t_car
   <if test="_parameter != null">
     <include refid="Example_Where_Clause" />
   </if>
   <if test="orderByClause != null">
     order by ${orderByClause}
   </if>
 </select>
 <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
   select
   <include refid="Base_Column_List" />
   from t_car
   where id = #{id,jdbcType=BIGINT}
 </select>
 <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
   delete from t_car
   where id = #{id,jdbcType=BIGINT}
 </delete>
 <delete id="deleteByExample" parameterType="com.bjpowernode.mybatis.pojo.CarExample">
   delete from t_car
   <if test="_parameter != null">
     <include refid="Example_Where_Clause" />
   </if>
 </delete>
 <insert id="insert" parameterType="com.bjpowernode.mybatis.pojo.Car">
   insert into t_car (id, car_num, brand,
     guide_price, produce_time, car_type
     )
   values (#{id,jdbcType=BIGINT}, #{carNum,jdbcType=VARCHAR}, #{brand,jdbcType=VARCHAR},
     #{guidePrice,jdbcType=DECIMAL}, #{produceTime,jdbcType=CHAR}, #{carType,jdbcType=VARCHAR}
     )
 </insert>
 <insert id="insertSelective" parameterType="com.bjpowernode.mybatis.pojo.Car">
   insert into t_car
   <trim prefix="(" suffix=")" suffixOverrides=",">
     <if test="id != null">
       id,
     </if>
     <if test="carNum != null">
       car_num,
     </if>
     <if test="brand != null">
       brand,
     </if>
     <if test="guidePrice != null">
       guide_price,
     </if>
     <if test="produceTime != null">
       produce_time,
     </if>
     <if test="carType != null">
       car_type,
     </if>
   </trim>
   <trim prefix="values (" suffix=")" suffixOverrides=",">
     <if test="id != null">
       #{id,jdbcType=BIGINT},
     </if>
     <if test="carNum != null">
       #{carNum,jdbcType=VARCHAR},
     </if>
     <if test="brand != null">
       #{brand,jdbcType=VARCHAR},
     </if>
     <if test="guidePrice != null">
       #{guidePrice,jdbcType=DECIMAL},
     </if>
     <if test="produceTime != null">
       #{produceTime,jdbcType=CHAR},
     </if>
     <if test="carType != null">
       #{carType,jdbcType=VARCHAR},
     </if>
   </trim>
 </insert>
 <select id="countByExample" parameterType="com.bjpowernode.mybatis.pojo.CarExample" resultType="java.lang.Long">
   select count(*) from t_car
   <if test="_parameter != null">
     <include refid="Example_Where_Clause" />
   </if>
 </select>
 <update id="updateByExampleSelective" parameterType="map">
   update t_car
   <set>
     <if test="row.id != null">
       id = #{row.id,jdbcType=BIGINT},
     </if>
     <if test="row.carNum != null">
       car_num = #{row.carNum,jdbcType=VARCHAR},
     </if>
     <if test="row.brand != null">
       brand = #{row.brand,jdbcType=VARCHAR},
     </if>
     <if test="row.guidePrice != null">
       guide_price = #{row.guidePrice,jdbcType=DECIMAL},
     </if>
     <if test="row.produceTime != null">
       produce_time = #{row.produceTime,jdbcType=CHAR},
     </if>
     <if test="row.carType != null">
       car_type = #{row.carType,jdbcType=VARCHAR},
     </if>
   </set>
   <if test="example != null">
     <include refid="Update_By_Example_Where_Clause" />
   </if>
 </update>
 <update id="updateByExample" parameterType="map">
   update t_car
   set id = #{row.id,jdbcType=BIGINT},
     car_num = #{row.carNum,jdbcType=VARCHAR},
     brand = #{row.brand,jdbcType=VARCHAR},
     guide_price = #{row.guidePrice,jdbcType=DECIMAL},
     produce_time = #{row.produceTime,jdbcType=CHAR},
     car_type = #{row.carType,jdbcType=VARCHAR}
   <if test="example != null">
     <include refid="Update_By_Example_Where_Clause" />
   </if>
 </update>
 <update id="updateByPrimaryKeySelective" parameterType="com.bjpowernode.mybatis.pojo.Car">
   update t_car
   <set>
     <if test="carNum != null">
       car_num = #{carNum,jdbcType=VARCHAR},
     </if>
     <if test="brand != null">
       brand = #{brand,jdbcType=VARCHAR},
     </if>
     <if test="guidePrice != null">
       guide_price = #{guidePrice,jdbcType=DECIMAL},
     </if>
     <if test="produceTime != null">
       produce_time = #{produceTime,jdbcType=CHAR},
     </if>
     <if test="carType != null">
       car_type = #{carType,jdbcType=VARCHAR},
     </if>
   </set>
   where id = #{id,jdbcType=BIGINT}
 </update>
 <update id="updateByPrimaryKey" parameterType="com.bjpowernode.mybatis.pojo.Car">
   update t_car
   set car_num = #{carNum,jdbcType=VARCHAR},
     brand = #{brand,jdbcType=VARCHAR},
     guide_price = #{guidePrice,jdbcType=DECIMAL},
     produce_time = #{produceTime,jdbcType=CHAR},
     car_type = #{carType,jdbcType=VARCHAR}
   where id = #{id,jdbcType=BIGINT}
 </update>
</mapper>

(4)编写测试程序(增强版)

(1)增强版的查询方式就比较特殊,特别是根据条件查询,是QBC 风格:Query By Criteria 一种查询方式,比较面向对象,看不到sql语句!

(2)条件查询步骤:

①先封装条件,通过CarExample对象来封装查询条件

②调用carExample.createCriteria()方法来创建查询条件,后面通过" 点. "的方式跟上方法

package com.bjpowernode.mybatis.test;
import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.pojo.CarExample;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.math.BigDecimal;
import java.util.List;
public class CarMapperTest {
   @Test
   public void testSelect(){
       SqlSession sqlSession = SqlSessionUtil.openSession();
       CarMapper mapper = sqlSession.getMapper(CarMapper.class);
       // 执行查询
       // 1. 查询一个
       Car car = mapper.selectByPrimaryKey(34L);
       System.out.println(car);
       // 2. 查询所有(selectByExample,根据条件查询,如果条件是null表示没有条件)
       List<Car> cars = mapper.selectByExample(null);
       cars.forEach(car1 -> System.out.println(car1));
       System.out.println("==================");
       // 3.按照条件进行查询
       // QBC 风格:Query By Criteria 一种查询方式,比较面向对象,看不到sql语句。
       // 3.1 封装条件,通过CarExample对象来封装查询条件
       CarExample carExample = new CarExample();
       // 3.2调用carExample.createCriteria()方法来创建查询条件
       carExample.createCriteria().andBrandLike(" * ").
                                   andGuidePriceGreaterThan(new BigDecimal(20.0));
       // 添加or
       carExample.or().andCarTypeEqualTo("燃油车");
       // 执行查询
       List<Car> cars1 = mapper.selectByExample(carExample);
       cars1.forEach(car1 -> System.out.println(car1));
       sqlSession.close();
   }
}

以上的SQL语句就等价于:

MyBatis逆向⼯程的生成过程

来源:https://blog.csdn.net/m0_61933976/article/details/128607207

标签:MyBatis,逆向⼯程
0
投稿

猜你喜欢

  • IDEA自定义pom依赖的步骤详解

    2021-11-06 04:14:32
  • React Native学习之Android的返回键BackAndroid详解

    2023-04-19 14:15:28
  • spring webflux自定义netty 参数解析

    2023-07-26 18:38:25
  • Unity3D运行报DllNotFoundException错误的解决方案

    2021-09-13 00:22:35
  • C语言文件操作之fread函数详解

    2023-07-06 18:24:15
  • Android条目拖拽删除功能实例代码

    2022-06-19 22:47:37
  • 秒懂Java枚举类型(enum)

    2023-03-30 07:39:41
  • Java 多线程传值的四种方法

    2022-02-03 08:16:44
  • Android自定义指示器时间轴效果实例代码详解

    2023-06-13 01:06:33
  • Flutter SizedBox布局组件Widget使用示例详解

    2022-02-08 18:19:44
  • Java面试基础之TCP连接以及其优化

    2023-10-02 17:43:51
  • C#实现绘制浮雕图片效果实例

    2023-10-10 04:34:04
  • Java基本语法之内部类示例详解

    2023-02-06 14:05:32
  • Java线程的生命周期和状态控制_动力节点Java学院整理

    2022-01-25 17:01:42
  • Android非异常情况下的Activity生命周期分析

    2022-10-29 04:06:12
  • c#判断代码是否执行超时的几种方式总结

    2023-03-11 16:33:02
  • JAVA中的静态代理、动态代理以及CGLIB动态代理总结

    2023-04-03 14:33:39
  • Java使用Math.random()结合蒙特卡洛方法计算pi值示例

    2023-05-10 10:43:13
  • 基于springboot 长轮询的实现操作

    2022-02-06 09:46:22
  • 搞懂Java线程池

    2021-08-04 10:01:06
  • asp之家 软件编程 m.aspxhome.com