基于 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 查看 generatorConfig.xml 文件所在的目录中是否存在名称为“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); ListselectByExample(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 ListoredCriteria; 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 ListgetOredCriteria() { 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 Listcriteria; protected GeneratedCriteria() { super(); criteria = new ArrayList(); } public boolean isValid() { return criteria.size() > 0; } public ListgetAllCriteria() { return criteria; } public ListgetCriteria() { 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(Listvalues) { addCriterion("ID in", values, "id"); return (Criteria) this; } public Criteria andIdNotIn(Listvalues) { 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(Listvalues) { addCriterion("AREA_NAME in", values, "areaName"); return (Criteria) this; } public Criteria andAreaNameNotIn(Listvalues) { 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(Listvalues) { addCriterion("AREA_CODE in", values, "areaCode"); return (Criteria) this; } public Criteria andAreaCodeNotIn(Listvalues) { 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(Listvalues) { addCriterion("PARENT_ID in", values, "parentId"); return (Criteria) this; } public Criteria andParentIdNotIn(Listvalues) { 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(Listvalues) { addCriterion("PLAT_MARK in", values, "platMark"); return (Criteria) this; } public Criteria andPlatMarkNotIn(Listvalues) { 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(Listvalues) { addCriterion("LEVEL in", values, "level"); return (Criteria) this; } public Criteria andLevelNotIn(Listvalues) { 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(Listvalues) { addCriterion("STATUS in", values, "status"); return (Criteria) this; } public Criteria andStatusNotIn(Listvalues) { 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(Listvalues) { addCriterion("EXPAND in", values, "expand"); return (Criteria) this; } public Criteria andExpandNotIn(Listvalues) { 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, EXPANDselectdistinctfrom base_areaorder by ${orderByClause}selectfrom base_area where ID = #{id,jdbcType=BIGINT}delete from base_area where ID = #{id,jdbcType=BIGINT}delete from base_areainsert 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_areaID,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},select count(*) from base_areaupdate base_areaID = #{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_areaAREA_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 exist3、针对数据库的驱动程序包要配置正确,本例中是针对 MySQL 数据库的。
4、table 标签必须存在,一个标签只能指定一个表,多个表可以存在多个 table 标签。
提示:tableName 可以使用通配符 % 来匹配全部的表,例如:
5、数据表及字段都加注释了,但生成的文件中没有注释,这个还需要自己写注释相关的实现类来解决,后续补充这部分内容。
6、生成的文件怎么用呢?后续补充这部分内容。
相关阅读:
MyBatis Generator (MBG) 代码生成器简介
MyBatis Generator 代码生成器 快速入门指南
MyBatis Generator XML 配置文件参考
运行 MyBatis Generator 后的任务
运行MyBatis Generator
MyBatis Generator中的新功能