正向工程:先创建Java实体类,由框架负责根据实例类生成数据库表。Hibernate是支持正向工程的。
逆向工程:先创建数据库表,由框架负责根据数据库表,正向生成如下资源
<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.0modelVersion>
<groupId>com.bijing.mybatisgroupId>
<artifactId>mybatis_dynamicSQLartifactId>
<version>1.0-SNAPSHOTversion>
<packaging>jarpackaging>
<properties>
<maven.compiler.source>11maven.compiler.source>
<maven.compiler.target>11maven.compiler.target>
properties>
<dependencies>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.11version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.30version>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13.2version>
<scope>testscope>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generatorgroupId>
<artifactId>mybatis-generator-maven-pluginartifactId>
<version>1.4.1version>
<dependencies>
<dependency>
<groupId>org.mybatis.generatorgroupId>
<artifactId>mybatis-generator-coreartifactId>
<version>1.4.1version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.16version>
dependency>
dependencies>
plugin>
plugins>
build>
project>
DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties">
properties>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
settings>
<typeAliases>
<package name="com.bijing.mybatis.pojo"/>
typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
dataSource>
environment>
environments>
<mappers>
<package name="com.bijing.mybatis.mapper"/>
mappers>
configuration>
DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"/>
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
<commentGenerator>
<property name="suppressAllComments" value="true"/>
<property name="suppressDate" value="true"/>
<property name="javaFileEncoding" value="utf-8"/>
<property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
<property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
commentGenerator>
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"
userId="root" password="root1234">
jdbcConnection>
<javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
<property name="forceBigDecimals" value="true"/>
javaTypeResolver>
<javaModelGenerator targetPackage="com.bijing.mybatis.pojo"
targetProject="./src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
javaModelGenerator>
<sqlMapGenerator targetPackage="com.bijing.mybatis.mapper" targetProject="./src/main/resources">
<property name="enableSubPackages" value="true"/>
sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER" targetPackage="com.bijing.mybatis.mapper"
targetProject="./src/main/java">
<property name="enableSubPackages" value="true"/>
javaClientGenerator>
<table tableName="t_emp" domainObjectName="Emp">
table>
<table tableName="t_dept" domainObjectName="Dept"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false">table>
context>
generatorConfiguration>
在generatorConfig.xml中如果 targetRuntime=“MyBatis3”,会生成实体类和它的Example
<context id="DB2Tables" targetRuntime="MyBatis3">
EmpExample.java
package com.bijing.mybatis.pojo;
import java.util.ArrayList;
import java.util.List;
public class EmpExample {
protected String orderByClause;
protected boolean distinct;
protected List<Criteria> oredCriteria;
public EmpExample() {
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 andEmpIdIsNull() {
addCriterion("emp_id is null");
return (Criteria) this;
}
public Criteria andEmpIdIsNotNull() {
addCriterion("emp_id is not null");
return (Criteria) this;
}
public Criteria andEmpIdEqualTo(Integer value) {
addCriterion("emp_id =", value, "empId");
return (Criteria) this;
}
public Criteria andEmpIdNotEqualTo(Integer value) {
addCriterion("emp_id <>", value, "empId");
return (Criteria) this;
}
public Criteria andEmpIdGreaterThan(Integer value) {
addCriterion("emp_id >", value, "empId");
return (Criteria) this;
}
public Criteria andEmpIdGreaterThanOrEqualTo(Integer value) {
addCriterion("emp_id >=", value, "empId");
return (Criteria) this;
}
public Criteria andEmpIdLessThan(Integer value) {
addCriterion("emp_id <", value, "empId");
return (Criteria) this;
}
public Criteria andEmpIdLessThanOrEqualTo(Integer value) {
addCriterion("emp_id <=", value, "empId");
return (Criteria) this;
}
public Criteria andEmpIdIn(List<Integer> values) {
addCriterion("emp_id in", values, "empId");
return (Criteria) this;
}
public Criteria andEmpIdNotIn(List<Integer> values) {
addCriterion("emp_id not in", values, "empId");
return (Criteria) this;
}
public Criteria andEmpIdBetween(Integer value1, Integer value2) {
addCriterion("emp_id between", value1, value2, "empId");
return (Criteria) this;
}
public Criteria andEmpIdNotBetween(Integer value1, Integer value2) {
addCriterion("emp_id not between", value1, value2, "empId");
return (Criteria) this;
}
public Criteria andEmpNameIsNull() {
addCriterion("emp_name is null");
return (Criteria) this;
}
public Criteria andEmpNameIsNotNull() {
addCriterion("emp_name is not null");
return (Criteria) this;
}
public Criteria andEmpNameEqualTo(String value) {
addCriterion("emp_name =", value, "empName");
return (Criteria) this;
}
public Criteria andEmpNameNotEqualTo(String value) {
addCriterion("emp_name <>", value, "empName");
return (Criteria) this;
}
public Criteria andEmpNameGreaterThan(String value) {
addCriterion("emp_name >", value, "empName");
return (Criteria) this;
}
public Criteria andEmpNameGreaterThanOrEqualTo(String value) {
addCriterion("emp_name >=", value, "empName");
return (Criteria) this;
}
public Criteria andEmpNameLessThan(String value) {
addCriterion("emp_name <", value, "empName");
return (Criteria) this;
}
public Criteria andEmpNameLessThanOrEqualTo(String value) {
addCriterion("emp_name <=", value, "empName");
return (Criteria) this;
}
public Criteria andEmpNameLike(String value) {
addCriterion("emp_name like", value, "empName");
return (Criteria) this;
}
public Criteria andEmpNameNotLike(String value) {
addCriterion("emp_name not like", value, "empName");
return (Criteria) this;
}
public Criteria andEmpNameIn(List<String> values) {
addCriterion("emp_name in", values, "empName");
return (Criteria) this;
}
public Criteria andEmpNameNotIn(List<String> values) {
addCriterion("emp_name not in", values, "empName");
return (Criteria) this;
}
public Criteria andEmpNameBetween(String value1, String value2) {
addCriterion("emp_name between", value1, value2, "empName");
return (Criteria) this;
}
public Criteria andEmpNameNotBetween(String value1, String value2) {
addCriterion("emp_name not between", value1, value2, "empName");
return (Criteria) this;
}
public Criteria andAgeIsNull() {
addCriterion("age is null");
return (Criteria) this;
}
public Criteria andAgeIsNotNull() {
addCriterion("age is not null");
return (Criteria) this;
}
public Criteria andAgeEqualTo(Integer value) {
addCriterion("age =", value, "age");
return (Criteria) this;
}
public Criteria andAgeNotEqualTo(Integer value) {
addCriterion("age <>", value, "age");
return (Criteria) this;
}
public Criteria andAgeGreaterThan(Integer value) {
addCriterion("age >", value, "age");
return (Criteria) this;
}
public Criteria andAgeGreaterThanOrEqualTo(Integer value) {
addCriterion("age >=", value, "age");
return (Criteria) this;
}
public Criteria andAgeLessThan(Integer value) {
addCriterion("age <", value, "age");
return (Criteria) this;
}
public Criteria andAgeLessThanOrEqualTo(Integer value) {
addCriterion("age <=", value, "age");
return (Criteria) this;
}
public Criteria andAgeIn(List<Integer> values) {
addCriterion("age in", values, "age");
return (Criteria) this;
}
public Criteria andAgeNotIn(List<Integer> values) {
addCriterion("age not in", values, "age");
return (Criteria) this;
}
public Criteria andAgeBetween(Integer value1, Integer value2) {
addCriterion("age between", value1, value2, "age");
return (Criteria) this;
}
public Criteria andAgeNotBetween(Integer value1, Integer value2) {
addCriterion("age not between", value1, value2, "age");
return (Criteria) this;
}
public Criteria andGenderIsNull() {
addCriterion("gender is null");
return (Criteria) this;
}
public Criteria andGenderIsNotNull() {
addCriterion("gender is not null");
return (Criteria) this;
}
public Criteria andGenderEqualTo(String value) {
addCriterion("gender =", value, "gender");
return (Criteria) this;
}
public Criteria andGenderNotEqualTo(String value) {
addCriterion("gender <>", value, "gender");
return (Criteria) this;
}
public Criteria andGenderGreaterThan(String value) {
addCriterion("gender >", value, "gender");
return (Criteria) this;
}
public Criteria andGenderGreaterThanOrEqualTo(String value) {
addCriterion("gender >=", value, "gender");
return (Criteria) this;
}
public Criteria andGenderLessThan(String value) {
addCriterion("gender <", value, "gender");
return (Criteria) this;
}
public Criteria andGenderLessThanOrEqualTo(String value) {
addCriterion("gender <=", value, "gender");
return (Criteria) this;
}
public Criteria andGenderLike(String value) {
addCriterion("gender like", value, "gender");
return (Criteria) this;
}
public Criteria andGenderNotLike(String value) {
addCriterion("gender not like", value, "gender");
return (Criteria) this;
}
public Criteria andGenderIn(List<String> values) {
addCriterion("gender in", values, "gender");
return (Criteria) this;
}
public Criteria andGenderNotIn(List<String> values) {
addCriterion("gender not in", values, "gender");
return (Criteria) this;
}
public Criteria andGenderBetween(String value1, String value2) {
addCriterion("gender between", value1, value2, "gender");
return (Criteria) this;
}
public Criteria andGenderNotBetween(String value1, String value2) {
addCriterion("gender not between", value1, value2, "gender");
return (Criteria) this;
}
public Criteria andDeptIdIsNull() {
addCriterion("dept_id is null");
return (Criteria) this;
}
public Criteria andDeptIdIsNotNull() {
addCriterion("dept_id is not null");
return (Criteria) this;
}
public Criteria andDeptIdEqualTo(Integer value) {
addCriterion("dept_id =", value, "deptId");
return (Criteria) this;
}
public Criteria andDeptIdNotEqualTo(Integer value) {
addCriterion("dept_id <>", value, "deptId");
return (Criteria) this;
}
public Criteria andDeptIdGreaterThan(Integer value) {
addCriterion("dept_id >", value, "deptId");
return (Criteria) this;
}
public Criteria andDeptIdGreaterThanOrEqualTo(Integer value) {
addCriterion("dept_id >=", value, "deptId");
return (Criteria) this;
}
public Criteria andDeptIdLessThan(Integer value) {
addCriterion("dept_id <", value, "deptId");
return (Criteria) this;
}
public Criteria andDeptIdLessThanOrEqualTo(Integer value) {
addCriterion("dept_id <=", value, "deptId");
return (Criteria) this;
}
public Criteria andDeptIdIn(List<Integer> values) {
addCriterion("dept_id in", values, "deptId");
return (Criteria) this;
}
public Criteria andDeptIdNotIn(List<Integer> values) {
addCriterion("dept_id not in", values, "deptId");
return (Criteria) this;
}
public Criteria andDeptIdBetween(Integer value1, Integer value2) {
addCriterion("dept_id between", value1, value2, "deptId");
return (Criteria) this;
}
public Criteria andDeptIdNotBetween(Integer value1, Integer value2) {
addCriterion("dept_id not between", value1, value2, "deptId");
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);
}
}
}
EmpMapper.java
在generatorConfig.xml中如果 targetRuntime=“MyBatis3”,会生成实体类和它的Example
MyBatis3Simple:生成基本的CRUD
MyBatis3:生成带条件的CRUD
有了EmpExample就可以对单表进行条件查询
package com.bijing.mybatis.mapper;
import com.bijing.mybatis.pojo.Emp;
import com.bijing.mybatis.pojo.EmpExample;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface EmpMapper {
long countByExample(EmpExample example);
//按条件删除
int deleteByExample(EmpExample example);
//按主键删除
int deleteByPrimaryKey(Integer empId);
int insert(Emp row);
//选择性添加
int insertSelective(Emp row);
List<Emp> selectByExample(EmpExample example);
Emp selectByPrimaryKey(Integer empId);
//选择性修改,某个属性为null的时候不会修改这个字段
int updateByExampleSelective(@Param("row") Emp row, @Param("example") EmpExample example);
//普通修改,某个属性为null的时候会将字段修改为null
int updateByExample(@Param("row") Emp row, @Param("example") EmpExample example);
int updateByPrimaryKeySelective(Emp row);
int updateByPrimaryKey(Emp row);
}