MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
MyBatis使得数据库操作变得非常方便,使用MyBatis进行数据库操作的主要工作是书写Mapping映射文件,然而手写映射文件很容易出错,而且不够规范,因此本文使用MBG(MyBatis Generator)工具来自动生成底层模型类、DAO接口类和Mapping映射文件。
MyBatis Generator可以满足大部分常用的CRUD(Create,Retrieve,Update,Delete)数据库操作。对于复杂的操作,如join
或存储过程stored procedures
则需要手动编写SQL代码。
MBG将自动生成以下三部分代码
与表结构匹配的java POJOs,包括:
与MyBatis/iBATIS兼容的SQL Map XML文件,为简单的CRUD函数生成SQL语句,生成的SQL语句包括:
可以使用上述对象的java客户端类
对于MyBaits 3.x将生成:
对于iBATIS 2.x将生成:
下载MBG并解压:MBG官方下载地址
配置文件用于告诉MBG:
一个最小的配置文件至少包括5个元素:
元素用于指定如何连接到目标数据库
元素用于指定生成的Java model对象的存放位置(包和项目)
元素用于指定生成的SQL map文件的存放位置(包和项目)
元素用于指定生成的客户端接口和类的存放位置(包和项目),如果不希望生成Java客户端代码,则忽略该元素至少一个数据库表元素
一个来自官网的配置例子,用于解释配置文件的结构。
<generatorConfiguration>
<classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />
<context id="DB2Tables" targetRuntime="MyBatis3">
<jdbcConnection driverClass="COM.ibm.db2.jdbc.app.DB2Driver"
connectionURL="jdbc:db2:TEST"
userId="db2admin"
password="db2admin">
jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
javaTypeResolver>
<javaModelGenerator targetPackage="test.model"
targetProject="\MBGTestProject\src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
javaModelGenerator>
<sqlMapGenerator targetPackage="test.xml" targetProject="\MBGTestProject\src">
<property name="enableSubPackages" value="true" />
sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER" targetPackage="test.dao"
targetProject="\MBGTestProject\src">
<property name="enableSubPackages" value="true" />
javaClientGenerator>
<table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" >
<property name="useActualColumnNames" value="true"/>
<generatedKey column="ID" sqlStatement="DB2" identity="true" />
<columnOverride column="DATE_FIELD" property="startDate" />
<ignoreColumn column="FRED" />
<columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
table>
context>
generatorConfiguration>
运行MBG
将编辑好的配置文件放到合适的路径下,在命令行中运行如下命令自动生成需要的代码:
java -jar mybatis-generator-core-x.x.x.jar -configfile generatorConfig.xml -overwrite
-overwrite
告诉MBG覆盖已经存在的同名Java文件,如果想保留已经存在的Java文件,就忽略该参数。
如果忽略-overwrite
参数,在有冲突时,MBG会在文件名后附加.1
,例如MyClass.java.1
,需要人工解决冲突。
MBG 实战
数据库表结构
CREATE TABLE IF NOT EXISTS merchant_user_wechat_map (
id int(10) UNSIGNED AUTO_INCREMENT COMMENT 'id',
username varchar(255) NOT NULL COMMENT '用户名',
openid varchar(255) NOT NULL COMMENT '用户微信的openid',
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at timestamp NOT NULL DEFAULT 0 COMMENT '更新时间',
is_deleted tinyint(1) UNSIGNED DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (id),
unique KEY username (username),
KEY created_at (created_at)
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8
COLLATE = utf8_unicode_ci
COMMENT = '用户微信与账户的映射关系';
* is_deleted
软删除,默认为0,需要删除改记录时,将该字段置为1
即可。软删除便于追踪历史记录,用软删除后需要在查找、更新等逻辑处进行该字段的判断。 *
配置文件
下载mysql-connector-java,用于连接到数据库,下载地址,放到<你的mysql-connector-java存放路径>
,配置文件中会用到该地址。
编写你的配置文件,如generatorConfig.xml
。可以直接复制下面的配置进行使用,需要修改
<你的mysql-connector-java存放路径>
- 数据库连接: connectionURL、userId、password
- 生成类存放路径:targetPackage、targetProject
- 你自己的元素
<generatorConfiguration>
<classPathEntry location="<你的mysql-connector-java存放路径>/mysql-connector-java-5.1.42/mysql-connector-java-5.1.42-bin.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3" defaultModelType="flat">
<property name="autoDelimitKeywords" value="true"/>
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<plugin type="org.mybatis.generator.plugins.RowBoundsPlugin"/>
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<commentGenerator>
<property name="suppressAllComments" value="true"/>
commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/store_service?zeroDateTimeBehavior=convertToNull&useSSL=false&useUnicode=true&characterEncoding=UTF-8"
userId="testuser"
password="testpw">
jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
javaTypeResolver>
<javaModelGenerator targetPackage="example.mbg.tutorial.domain"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
javaModelGenerator>
<sqlMapGenerator targetPackage="example.mbg.tutorial.repository.mapper"
targetProject="src/main/resources/base">
<property name="enableSubPackages" value="true"/>
sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER"
targetPackage="example.mbg.tutorial.repository.mapper"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
javaClientGenerator>
<table tableName="merchant_user_wechat_map" domainObjectName="MerchantUserWechatMap" >
<generatedKey column="id" sqlStatement="JDBC" identity="true"/>
<columnOverride column="id" javaType="Long"/>
<columnOverride column="username" javaType="String"/>
<columnOverride column="openid" javaType="String"/>
<columnOverride column="created_at" javaType="String"/>
<columnOverride column="updated_at" javaType="String"/>
<columnOverride column="is_deleted" javaType="Integer"/>
table>
context>
generatorConfiguration>
运行MBG
java -jar mybatis-generator-core-x.x.x.jar -configfile generatorConfig.xml
生成4个文件如图所示:
你可能感兴趣的:(Coding)