MyBatis逆向⼯程的生成过程
作者:@每天都要敲代码
一、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)双击运行插件,就可以生成基础版的配置信息
自动生成的CarMapper接口、pojo类Car、CarMapper.xml配置文件
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(); } }
执行结果:
(3)配置generatorConfig.xml(增强版)
生成了两个pojo类,并且对于接口中的方法也变多了
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逆向⼯程的生成过程的文章就介绍到这了,更多相关MyBatis逆向⼯程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!