文章目录
刚接触mybatis generator,边学边记录,本文持续更新中…
eclipse中安装mybatis generator插件
打开工具栏Help -> Eclipse Marketplace,搜索mybatis generator安装即可
编写generatorConfig.xml文件
配置数据源
location属性关联本地数据库驱动jar包
<classPathEntry location="D:\software\repo\mysql-connector-java-8.0.19.jar"/>
定义mybatis上下文
上下文中主要设置包括数据库链接信息、反向生成entity类&mapper&dao的存放位置,以及需要操作的table
数据库链接信息
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=true"
userId="username"
password="password">
</jdbcConnection>
设置entity类存放位置
<javaModelGenerator targetPackage="com.demo.entity" targetProject="test/src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
设置映射文件存放位置
<sqlMapGenerator targetPackage="mapper" targetProject="test/src/main/resources"> <property name="enableSubPackages" value="true"/></sqlMapGenerator>
设置Dao类存放位置
<javaClientGenerator type="XMLMAPPER" targetPackage="com.demo.mapper" targetProject="test/src/main/java"> <property name="enableSubPackages" value="true"/></javaClientGenerator>
设置需要操作的table列表
<table tableName="t_staff" domainObjectName="StaffEnity" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
<table tableName="t_staff_employee" domainObjectName="StaffEmployeeEnity" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
完整xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- 配置数据源 -->
<classPathEntry location="D:\software\repo\mysql-connector-java-8.0.19.jar"/>
<!-- mybatis上下文 -->
<context id="DB2Tables" targetRuntime="MyBatis3">
<!-- 数据库链接信息 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=true"
userId="userId"
password="password">
</jdbcConnection>
<!--生成entity类存放位置-->
<javaModelGenerator targetPackage="com.demo.entity" targetProject="test/src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--生成映射文件存放位置-->
<sqlMapGenerator targetPackage="mapper" targetProject="test/src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--生成Dao类存放位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.demo.mapper"
targetProject="test/src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<table tableName="t_staff" domainObjectName="StaffEnity" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false"></table>
<table tableName="t_staff_employee" domainObjectName="StaffEmployeeEnity" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false"></table>
</context>
</generatorConfiguration>
遇到的问题
XML Parser Error
xml解析错误,多半为特殊字符处理
The reference to entity “useSSL” must end with the ‘;’ delimiter
& 特殊字符应该变更为 &
找不到targetProject中目录src
编写相对路径,需要带上项目名称
targetProject="project-name/src/main/java"
generator将一个表生成两个实体类
以下情况,generator会将一个表生成两个实体:
- 表中有text字段
- 有联合主键
属性defaultModelType
在mybatis上下文添加属性defaultModelType,并且赋值为flat方式
<context id="DB2Tables" targetRuntime="MyBatis3" defaultModelType="flat">
</context>
defaultModelType取值
取值 | 时候默认 | 说明 |
---|---|---|
conditional | 是 | 多个字段为联合主键则会生成单独的主键实体类;BLOB字段仍单独生成实体类 |
hierarchical | 否 | 只要表里有主键,就会生成单独的主键实体类,其余同上 |
flat | 否 | 只为一张表生成一个实体类,包含所有字段 |