基于 SSM 框架开发,Mybatis 属于半自动 ORM,如果每个数据表相关的 Model、Dao、Mapping 都要自己动手去写,是不是很麻烦呢?工作量最大的就是书写Mapping的映射文件,而且手动书写很容易出错。
这里就介绍一个用于 MyBatis 的代码生成工具 MyBatis Generator,MyBatis Generator 简称(MBG)是 MyBatis 和 iBATIS 的代码生成器。
它将生成所有版本的MyBatis的代码,以及版本2.2.0之后的iBATIS版本。它将内省数据库表(或许多表),并将生成可用于访问表的工件。这减少了设置对象和配置文件以与数据库表进行交互的最初麻烦。MBG旨在对简单的CRUD(创建,检索,更新,删除)的大量数据库操作产生重大影响。您仍然需要为连接查询或存储过程手动编写 SQL 和对象。更多请参考:MyBatis Generator (MBG) 代码生成器简介
本文参考:MyBatis Generator 代码生成器 快速入门指南
本文完整示例下载:MyBatis Generator 代码生成器+MySQL驱动+配置文件
代码生成器需要一个实现 DatabaseMetaData 接口的 JDBC 驱动程序,尤其是 getColumns 和 getPrimaryKeys 方法。
通过 DatabaseMetaData 数据库元数据信息接口,可以获取数据库中有哪些表,表中有哪些列以及列的数据类型、长度、是否允许为空、注释,主键是什么等信息,根据这些信息再根据实体类(Entity 或 POJO)的格式、MyBatis 的 Mapper.xml 格式、Dao 层类的格式等生成对应的文件。
1、下载 MyBatis Generator
最新版本:MyBatis Generator Release 1.3.5
有关版本的更多信息请参考:MyBatis Generator中的新功能
2、下载数据库驱动程序
连接不同的数据库,需要使用对应的驱动程序。
针对 MySQL,我们需要下载 Connector/J,MySQL Connector / J是MySQL的官方JDBC驱动程序。
最新版本:Connector/J 5.1.44
3、编写配置文件
generatorConfig.xml
注意:你使用的版本号可能与我的不同。classPathEntry 标签中的“mysql-connector-java-5.1.30.jar” 要改为对应的版本。jdbcConnection 数据库连接信息需要修改为你自己的实际的信息。table 标签必须存在,一个标签只能指定一个表,多个表可以存在多个 table 标签。
tableName 可以使用通配符 % 来匹配全部的表,例如:
更多细节请参考:MyBatis Generator XML 配置文件参考
4、关于包的存放目录
将 mybatis-generator-core-1.3.5.jar,mysql-connector-java-5.1.30.jar,generatorConfig.xml 等文件放在同一个目录下,
参考我的目录结构:
注意:你使用的版本号可能与我的不同。src 目录需要你自己创建。生成的文件会按配置文件中指定的包名创建目录结构。
1、打开终端
2、切换目录到 mybatis-generator-core-1.3.5.jar,mysql-connector-java-5.1.30.jar,generatorConfig.xml 等文件所在的目录
3、执行命令
$ java -jar mybatis-generator-core-1.3.5.jar -configfile generatorConfig.xml -overwrite
看到输出:
MyBatis Generator finished successfully.
就说明生成成功了。
你可能会遇到错误一:
Exception in thread "main" java.lang.RuntimeException: Cannot resolve classpath
entry: mysql-connector-java-5.1.30.jar
at org.mybatis.generator.internal.util.ClassloaderUtility.getCustomClass
loader(ClassloaderUtility.java:49)
at org.mybatis.generator.api.MyBatisGenerator.generate(MyBatisGenerator.
java:245)
at org.mybatis.generator.api.MyBatisGenerator.generate(MyBatisGenerator.
java:189)
at org.mybatis.generator.api.ShellRunner.main(ShellRunner.java:117)
Cannot resolve classpath entry: mysql-connector-java-5.1.30.jar
是不是你下载的版本和我用的不一致?改为对应的版本的文件名称就可以了。
错误二:
XML Parser Errors occurred:
XML Parser Error on line 1: 前言中不允许有内容。
在 Windows 下遇到这个问题,解决方法:采用无 BOM 格式编码
错误三:
The specified target project directory ./src does not exist
你需要手动创建一个目录。
数据表结构
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for `base_area`
-- ----------------------------
DROP TABLE IF EXISTS `base_area`;
CREATE TABLE `base_area` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
`AREA_NAME` varchar(255) DEFAULT NULL COMMENT '地区名称',
`AREA_CODE` varchar(255) DEFAULT NULL COMMENT '地区编码',
`PARENT_ID` bigint(20) DEFAULT NULL COMMENT '上级地区编号',
`PLAT_MARK` bigint(20) DEFAULT NULL COMMENT '区域标识,也就是平台标识',
`LEVEL` tinyint(4) DEFAULT '1' COMMENT '级别',
`STATUS` tinyint(4) DEFAULT '1' COMMENT '是否可用、是否显示',
`EXPAND` tinyint(4) DEFAULT '0' COMMENT '是否展开子节点,非0为展开。',
PRIMARY KEY (`ID`),
KEY `index2` (`PLAT_MARK`)
) ENGINE=InnoDB AUTO_INCREMENT=3514 DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS = 1;
生成的代码文件:
dao/BaseAreaMapper.java
package test.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import test.model.BaseArea;
import test.model.BaseAreaExample;
public interface BaseAreaMapper {
long countByExample(BaseAreaExample example);
int deleteByExample(BaseAreaExample example);
int deleteByPrimaryKey(Long id);
int insert(BaseArea record);
int insertSelective(BaseArea record);
List selectByExample(BaseAreaExample example);
BaseArea selectByPrimaryKey(Long id);
int updateByExampleSelective(@Param("record") BaseArea record, @Param("example") BaseAreaExample example);
int updateByExample(@Param("record") BaseArea record, @Param("example") BaseAreaExample example);
int updateByPrimaryKeySelective(BaseArea record);
int updateByPrimaryKey(BaseArea record);
}
model/BaseArea.java
package test.model;
public class BaseArea {
private Long id;
private String areaName;
private String areaCode;
private Long parentId;
private Long platMark;
private Byte level;
private Byte status;
private Byte expand;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getAreaName() {
return areaName;
}
public void setAreaName(String areaName) {
this.areaName = areaName == null ? null : areaName.trim();
}
public String getAreaCode() {
return areaCode;
}
public void setAreaCode(String areaCode) {
this.areaCode = areaCode == null ? null : areaCode.trim();
}
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public Long getPlatMark() {
return platMark;
}
public void setPlatMark(Long platMark) {
this.platMark = platMark;
}
public Byte getLevel() {
return level;
}
public void setLevel(Byte level) {
this.level = level;
}
public Byte getStatus() {
return status;
}
public void setStatus(Byte status) {
this.status = status;
}
public Byte getExpand() {
return expand;
}
public void setExpand(Byte expand) {
this.expand = expand;
}
}
model/BaseAreaExample.java
package test.model;
import java.util.ArrayList;
import java.util.List;
public class BaseAreaExample {
protected String orderByClause;
protected boolean distinct;
protected List oredCriteria;
public BaseAreaExample() {
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 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 criteria;
protected GeneratedCriteria() {
super();
criteria = new ArrayList();
}
public boolean isValid() {
return criteria.size() > 0;
}
public List getAllCriteria() {
return criteria;
}
public List 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 values) {
addCriterion("ID in", values, "id");
return (Criteria) this;
}
public Criteria andIdNotIn(List 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 andAreaNameIsNull() {
addCriterion("AREA_NAME is null");
return (Criteria) this;
}
public Criteria andAreaNameIsNotNull() {
addCriterion("AREA_NAME is not null");
return (Criteria) this;
}
public Criteria andAreaNameEqualTo(String value) {
addCriterion("AREA_NAME =", value, "areaName");
return (Criteria) this;
}
public Criteria andAreaNameNotEqualTo(String value) {
addCriterion("AREA_NAME <>", value, "areaName");
return (Criteria) this;
}
public Criteria andAreaNameGreaterThan(String value) {
addCriterion("AREA_NAME >", value, "areaName");
return (Criteria) this;
}
public Criteria andAreaNameGreaterThanOrEqualTo(String value) {
addCriterion("AREA_NAME >=", value, "areaName");
return (Criteria) this;
}
public Criteria andAreaNameLessThan(String value) {
addCriterion("AREA_NAME <", value, "areaName");
return (Criteria) this;
}
public Criteria andAreaNameLessThanOrEqualTo(String value) {
addCriterion("AREA_NAME <=", value, "areaName");
return (Criteria) this;
}
public Criteria andAreaNameLike(String value) {
addCriterion("AREA_NAME like", value, "areaName");
return (Criteria) this;
}
public Criteria andAreaNameNotLike(String value) {
addCriterion("AREA_NAME not like", value, "areaName");
return (Criteria) this;
}
public Criteria andAreaNameIn(List values) {
addCriterion("AREA_NAME in", values, "areaName");
return (Criteria) this;
}
public Criteria andAreaNameNotIn(List values) {
addCriterion("AREA_NAME not in", values, "areaName");
return (Criteria) this;
}
public Criteria andAreaNameBetween(String value1, String value2) {
addCriterion("AREA_NAME between", value1, value2, "areaName");
return (Criteria) this;
}
public Criteria andAreaNameNotBetween(String value1, String value2) {
addCriterion("AREA_NAME not between", value1, value2, "areaName");
return (Criteria) this;
}
public Criteria andAreaCodeIsNull() {
addCriterion("AREA_CODE is null");
return (Criteria) this;
}
public Criteria andAreaCodeIsNotNull() {
addCriterion("AREA_CODE is not null");
return (Criteria) this;
}
public Criteria andAreaCodeEqualTo(String value) {
addCriterion("AREA_CODE =", value, "areaCode");
return (Criteria) this;
}
public Criteria andAreaCodeNotEqualTo(String value) {
addCriterion("AREA_CODE <>", value, "areaCode");
return (Criteria) this;
}
public Criteria andAreaCodeGreaterThan(String value) {
addCriterion("AREA_CODE >", value, "areaCode");
return (Criteria) this;
}
public Criteria andAreaCodeGreaterThanOrEqualTo(String value) {
addCriterion("AREA_CODE >=", value, "areaCode");
return (Criteria) this;
}
public Criteria andAreaCodeLessThan(String value) {
addCriterion("AREA_CODE <", value, "areaCode");
return (Criteria) this;
}
public Criteria andAreaCodeLessThanOrEqualTo(String value) {
addCriterion("AREA_CODE <=", value, "areaCode");
return (Criteria) this;
}
public Criteria andAreaCodeLike(String value) {
addCriterion("AREA_CODE like", value, "areaCode");
return (Criteria) this;
}
public Criteria andAreaCodeNotLike(String value) {
addCriterion("AREA_CODE not like", value, "areaCode");
return (Criteria) this;
}
public Criteria andAreaCodeIn(List values) {
addCriterion("AREA_CODE in", values, "areaCode");
return (Criteria) this;
}
public Criteria andAreaCodeNotIn(List values) {
addCriterion("AREA_CODE not in", values, "areaCode");
return (Criteria) this;
}
public Criteria andAreaCodeBetween(String value1, String value2) {
addCriterion("AREA_CODE between", value1, value2, "areaCode");
return (Criteria) this;
}
public Criteria andAreaCodeNotBetween(String value1, String value2) {
addCriterion("AREA_CODE not between", value1, value2, "areaCode");
return (Criteria) this;
}
public Criteria andParentIdIsNull() {
addCriterion("PARENT_ID is null");
return (Criteria) this;
}
public Criteria andParentIdIsNotNull() {
addCriterion("PARENT_ID is not null");
return (Criteria) this;
}
public Criteria andParentIdEqualTo(Long value) {
addCriterion("PARENT_ID =", value, "parentId");
return (Criteria) this;
}
public Criteria andParentIdNotEqualTo(Long value) {
addCriterion("PARENT_ID <>", value, "parentId");
return (Criteria) this;
}
public Criteria andParentIdGreaterThan(Long value) {
addCriterion("PARENT_ID >", value, "parentId");
return (Criteria) this;
}
public Criteria andParentIdGreaterThanOrEqualTo(Long value) {
addCriterion("PARENT_ID >=", value, "parentId");
return (Criteria) this;
}
public Criteria andParentIdLessThan(Long value) {
addCriterion("PARENT_ID <", value, "parentId");
return (Criteria) this;
}
public Criteria andParentIdLessThanOrEqualTo(Long value) {
addCriterion("PARENT_ID <=", value, "parentId");
return (Criteria) this;
}
public Criteria andParentIdIn(List values) {
addCriterion("PARENT_ID in", values, "parentId");
return (Criteria) this;
}
public Criteria andParentIdNotIn(List values) {
addCriterion("PARENT_ID not in", values, "parentId");
return (Criteria) this;
}
public Criteria andParentIdBetween(Long value1, Long value2) {
addCriterion("PARENT_ID between", value1, value2, "parentId");
return (Criteria) this;
}
public Criteria andParentIdNotBetween(Long value1, Long value2) {
addCriterion("PARENT_ID not between", value1, value2, "parentId");
return (Criteria) this;
}
public Criteria andPlatMarkIsNull() {
addCriterion("PLAT_MARK is null");
return (Criteria) this;
}
public Criteria andPlatMarkIsNotNull() {
addCriterion("PLAT_MARK is not null");
return (Criteria) this;
}
public Criteria andPlatMarkEqualTo(Long value) {
addCriterion("PLAT_MARK =", value, "platMark");
return (Criteria) this;
}
public Criteria andPlatMarkNotEqualTo(Long value) {
addCriterion("PLAT_MARK <>", value, "platMark");
return (Criteria) this;
}
public Criteria andPlatMarkGreaterThan(Long value) {
addCriterion("PLAT_MARK >", value, "platMark");
return (Criteria) this;
}
public Criteria andPlatMarkGreaterThanOrEqualTo(Long value) {
addCriterion("PLAT_MARK >=", value, "platMark");
return (Criteria) this;
}
public Criteria andPlatMarkLessThan(Long value) {
addCriterion("PLAT_MARK <", value, "platMark");
return (Criteria) this;
}
public Criteria andPlatMarkLessThanOrEqualTo(Long value) {
addCriterion("PLAT_MARK <=", value, "platMark");
return (Criteria) this;
}
public Criteria andPlatMarkIn(List values) {
addCriterion("PLAT_MARK in", values, "platMark");
return (Criteria) this;
}
public Criteria andPlatMarkNotIn(List values) {
addCriterion("PLAT_MARK not in", values, "platMark");
return (Criteria) this;
}
public Criteria andPlatMarkBetween(Long value1, Long value2) {
addCriterion("PLAT_MARK between", value1, value2, "platMark");
return (Criteria) this;
}
public Criteria andPlatMarkNotBetween(Long value1, Long value2) {
addCriterion("PLAT_MARK not between", value1, value2, "platMark");
return (Criteria) this;
}
public Criteria andLevelIsNull() {
addCriterion("LEVEL is null");
return (Criteria) this;
}
public Criteria andLevelIsNotNull() {
addCriterion("LEVEL is not null");
return (Criteria) this;
}
public Criteria andLevelEqualTo(Byte value) {
addCriterion("LEVEL =", value, "level");
return (Criteria) this;
}
public Criteria andLevelNotEqualTo(Byte value) {
addCriterion("LEVEL <>", value, "level");
return (Criteria) this;
}
public Criteria andLevelGreaterThan(Byte value) {
addCriterion("LEVEL >", value, "level");
return (Criteria) this;
}
public Criteria andLevelGreaterThanOrEqualTo(Byte value) {
addCriterion("LEVEL >=", value, "level");
return (Criteria) this;
}
public Criteria andLevelLessThan(Byte value) {
addCriterion("LEVEL <", value, "level");
return (Criteria) this;
}
public Criteria andLevelLessThanOrEqualTo(Byte value) {
addCriterion("LEVEL <=", value, "level");
return (Criteria) this;
}
public Criteria andLevelIn(List values) {
addCriterion("LEVEL in", values, "level");
return (Criteria) this;
}
public Criteria andLevelNotIn(List values) {
addCriterion("LEVEL not in", values, "level");
return (Criteria) this;
}
public Criteria andLevelBetween(Byte value1, Byte value2) {
addCriterion("LEVEL between", value1, value2, "level");
return (Criteria) this;
}
public Criteria andLevelNotBetween(Byte value1, Byte value2) {
addCriterion("LEVEL not between", value1, value2, "level");
return (Criteria) this;
}
public Criteria andStatusIsNull() {
addCriterion("STATUS is null");
return (Criteria) this;
}
public Criteria andStatusIsNotNull() {
addCriterion("STATUS is not null");
return (Criteria) this;
}
public Criteria andStatusEqualTo(Byte value) {
addCriterion("STATUS =", value, "status");
return (Criteria) this;
}
public Criteria andStatusNotEqualTo(Byte value) {
addCriterion("STATUS <>", value, "status");
return (Criteria) this;
}
public Criteria andStatusGreaterThan(Byte value) {
addCriterion("STATUS >", value, "status");
return (Criteria) this;
}
public Criteria andStatusGreaterThanOrEqualTo(Byte value) {
addCriterion("STATUS >=", value, "status");
return (Criteria) this;
}
public Criteria andStatusLessThan(Byte value) {
addCriterion("STATUS <", value, "status");
return (Criteria) this;
}
public Criteria andStatusLessThanOrEqualTo(Byte value) {
addCriterion("STATUS <=", value, "status");
return (Criteria) this;
}
public Criteria andStatusIn(List values) {
addCriterion("STATUS in", values, "status");
return (Criteria) this;
}
public Criteria andStatusNotIn(List values) {
addCriterion("STATUS not in", values, "status");
return (Criteria) this;
}
public Criteria andStatusBetween(Byte value1, Byte value2) {
addCriterion("STATUS between", value1, value2, "status");
return (Criteria) this;
}
public Criteria andStatusNotBetween(Byte value1, Byte value2) {
addCriterion("STATUS not between", value1, value2, "status");
return (Criteria) this;
}
public Criteria andExpandIsNull() {
addCriterion("EXPAND is null");
return (Criteria) this;
}
public Criteria andExpandIsNotNull() {
addCriterion("EXPAND is not null");
return (Criteria) this;
}
public Criteria andExpandEqualTo(Byte value) {
addCriterion("EXPAND =", value, "expand");
return (Criteria) this;
}
public Criteria andExpandNotEqualTo(Byte value) {
addCriterion("EXPAND <>", value, "expand");
return (Criteria) this;
}
public Criteria andExpandGreaterThan(Byte value) {
addCriterion("EXPAND >", value, "expand");
return (Criteria) this;
}
public Criteria andExpandGreaterThanOrEqualTo(Byte value) {
addCriterion("EXPAND >=", value, "expand");
return (Criteria) this;
}
public Criteria andExpandLessThan(Byte value) {
addCriterion("EXPAND <", value, "expand");
return (Criteria) this;
}
public Criteria andExpandLessThanOrEqualTo(Byte value) {
addCriterion("EXPAND <=", value, "expand");
return (Criteria) this;
}
public Criteria andExpandIn(List values) {
addCriterion("EXPAND in", values, "expand");
return (Criteria) this;
}
public Criteria andExpandNotIn(List values) {
addCriterion("EXPAND not in", values, "expand");
return (Criteria) this;
}
public Criteria andExpandBetween(Byte value1, Byte value2) {
addCriterion("EXPAND between", value1, value2, "expand");
return (Criteria) this;
}
public Criteria andExpandNotBetween(Byte value1, Byte value2) {
addCriterion("EXPAND not between", value1, value2, "expand");
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);
}
}
}
xml/BaseAreaMapper.xml
and ${criterion.condition}
and ${criterion.condition} #{criterion.value}
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
and ${criterion.condition}
#{listItem}
and ${criterion.condition}
and ${criterion.condition} #{criterion.value}
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
and ${criterion.condition}
#{listItem}
ID, AREA_NAME, AREA_CODE, PARENT_ID, PLAT_MARK, LEVEL, STATUS, EXPAND
delete from base_area
where ID = #{id,jdbcType=BIGINT}
delete from base_area
insert into base_area (ID, AREA_NAME, AREA_CODE,
PARENT_ID, PLAT_MARK, LEVEL,
STATUS, EXPAND)
values (#{id,jdbcType=BIGINT}, #{areaName,jdbcType=VARCHAR}, #{areaCode,jdbcType=VARCHAR},
#{parentId,jdbcType=BIGINT}, #{platMark,jdbcType=BIGINT}, #{level,jdbcType=TINYINT},
#{status,jdbcType=TINYINT}, #{expand,jdbcType=TINYINT})
insert into base_area
ID,
AREA_NAME,
AREA_CODE,
PARENT_ID,
PLAT_MARK,
LEVEL,
STATUS,
EXPAND,
#{id,jdbcType=BIGINT},
#{areaName,jdbcType=VARCHAR},
#{areaCode,jdbcType=VARCHAR},
#{parentId,jdbcType=BIGINT},
#{platMark,jdbcType=BIGINT},
#{level,jdbcType=TINYINT},
#{status,jdbcType=TINYINT},
#{expand,jdbcType=TINYINT},
update base_area
ID = #{record.id,jdbcType=BIGINT},
AREA_NAME = #{record.areaName,jdbcType=VARCHAR},
AREA_CODE = #{record.areaCode,jdbcType=VARCHAR},
PARENT_ID = #{record.parentId,jdbcType=BIGINT},
PLAT_MARK = #{record.platMark,jdbcType=BIGINT},
LEVEL = #{record.level,jdbcType=TINYINT},
STATUS = #{record.status,jdbcType=TINYINT},
EXPAND = #{record.expand,jdbcType=TINYINT},
update base_area
set ID = #{record.id,jdbcType=BIGINT},
AREA_NAME = #{record.areaName,jdbcType=VARCHAR},
AREA_CODE = #{record.areaCode,jdbcType=VARCHAR},
PARENT_ID = #{record.parentId,jdbcType=BIGINT},
PLAT_MARK = #{record.platMark,jdbcType=BIGINT},
LEVEL = #{record.level,jdbcType=TINYINT},
STATUS = #{record.status,jdbcType=TINYINT},
EXPAND = #{record.expand,jdbcType=TINYINT}
update base_area
AREA_NAME = #{areaName,jdbcType=VARCHAR},
AREA_CODE = #{areaCode,jdbcType=VARCHAR},
PARENT_ID = #{parentId,jdbcType=BIGINT},
PLAT_MARK = #{platMark,jdbcType=BIGINT},
LEVEL = #{level,jdbcType=TINYINT},
STATUS = #{status,jdbcType=TINYINT},
EXPAND = #{expand,jdbcType=TINYINT},
where ID = #{id,jdbcType=BIGINT}
update base_area
set AREA_NAME = #{areaName,jdbcType=VARCHAR},
AREA_CODE = #{areaCode,jdbcType=VARCHAR},
PARENT_ID = #{parentId,jdbcType=BIGINT},
PLAT_MARK = #{platMark,jdbcType=BIGINT},
LEVEL = #{level,jdbcType=TINYINT},
STATUS = #{status,jdbcType=TINYINT},
EXPAND = #{expand,jdbcType=TINYINT}
where ID = #{id,jdbcType=BIGINT}
1、配置文件中的标签出现的顺序是有要求的。
标签顺序一变,你可能就会看到:
XML Parser Errors occurred:
XML Parser Error on line 47: 元素类型为 "context" 的内容必须匹配 "(property*,plugin*,commentGenerator?,(connectionFactory|jdbcConnection),javaTypeResolver?,javaModelGenerator,sqlMapGenerator?,javaClientGenerator?,table+)"。
2、配置文件中配置的输出目录是要自己创建的,否则会看到类似下面的错误提示:
The specified target project directory ./MBGTestProject/src does not exist
3、针对数据库的驱动程序包要配置正确,本例中是针对 MySQL 数据库的。
4、table 标签必须存在,一个标签只能指定一个表,多个表可以存在多个 table 标签。
提示:tableName 可以使用通配符 % 来匹配全部的表,例如:
5、数据表及字段都加注释了,但生成的文件中没有注释,这个还需要自己写注释相关的实现类来解决,后续补充这部分内容。
6、生成的文件怎么用呢?后续补充这部分内容。
相关阅读:
MyBatis Generator (MBG) 代码生成器简介
MyBatis Generator 代码生成器 快速入门指南
MyBatis Generator XML 配置文件参考
运行 MyBatis Generator 后的任务
运行MyBatis Generator
MyBatis Generator中的新功能