【MyBatis】| MyBatis的逆向⼯程
目录
一:MyBatis的逆向⼯程
1. 逆向⼯程配置与⽣成
2. 测试生成的逆向⼯程
一: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 generatorConfigurationPUBLIC "-//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接口的包名和位置 --><javaClientGeneratortype="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;@Overridepublic 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_carwhere 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_carset 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_typefrom t_carwhere id = #{id,jdbcType=BIGINT}</select><select id="selectAll" resultMap="BaseResultMap">select id, car_num, brand, guide_price, produce_time, car_typefrom 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 {@Testpublic 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;@Overridepublic 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_carwhere id = #{id,jdbcType=BIGINT}</select><delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from t_carwhere 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_carset 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_carset 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 {@Testpublic 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));// 添加orcarExample.or().andCarTypeEqualTo("燃油车");// 执行查询List<Car> cars1 = mapper.selectByExample(carExample);cars1.forEach(car1 -> System.out.println(car1));sqlSession.close();}}
以上的SQL语句就等价于: