<plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version>
<!--
mybatis-generator-maven-plugin会默认读取src/main/resources的generatorConfig.xml文件,
<configuration>
<configurationFile>src/main/resources/mybatis-generator/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
-->
<executions> <execution> <id>Generate MyBatis Artifacts</id> <goals> <goal>generate</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.2</version> </dependency> </dependencies> </plugin>
plugin要放在<pluginManagement> 之内。
一张表:
在resources下新建一个文件database.properties.
内容如下;
# 数据库驱动jar 路径
drive.class.path=F:/xampp/tomcat/webapps/mybatisuse/target/mybatisuse/WEB-INF/lib/mysql-connector-java-5.1.25.jar
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.1.156:3306/game_central
jdbc.username=root
jdbc.password=0987abc123
# 包路径配置
model.package=com.data.model
dao.package=com.data.dao
xml.mapper.package=com.data.dao
target.project=src/main/java
在resoucess下新建:generatorConfig.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> <!-- 配置文件路径 --> <properties resource="database.properties"/> <!--数据库驱动包路径 --> <classPathEntry location="${drive.class.path}"/> <context id="MySQLTables" targetRuntime="MyBatis3"> <!--关闭注释 --> <commentGenerator> <property name="suppressDate" value="true"/> </commentGenerator> <!--数据库连接信息 --> <jdbcConnection driverClass="${jdbc.driver}" connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"> </jdbcConnection> <!--生成的model 包路径 --> <javaModelGenerator targetPackage="${model.package}" targetProject="${target.project}"> <property name="enableSubPackages" value="ture"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!--生成xml mapper文件 路径 --> <sqlMapGenerator targetPackage="${xml.mapper.package}" targetProject="${target.project}"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!-- 生成的Dao接口 的包路径 --> <javaClientGenerator type="XMLMAPPER" targetPackage="${dao.package}" targetProject="${target.project}"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!--对应数据库表名 --> <table tableName="teacher"> </table> </context> </generatorConfiguration>
根节点<generatorConfiguration>
generatorConfiguration
节点没有任何属性,直接写节点即可,如下:
<generatorConfiguration>
<!-- 具体配置内容 -->
</generatorConfiguration>
3. <generatorConfiguration>
子元素
从这段开始,就是配置的主要内容,这些配置都是generatorConfiguration
元素的子元素。
包含以下子元素(有严格的顺序):
-
<properties>
(0个或1个) -
<classPathEntry>
(0个或多个) -
<context>
(1个或多个)
3.1 <properties>
元素
这个元素用来指定外部的属性元素,不是必须的元素。
元素用于指定一个需要在配置中解析使用的外部属性文件,引入属性文件后,可以在配置中使用 ${property}
这种形式的引用,通过这种方式引用属性文件中的属性值。 对于后面需要配置的**jdbc信息**和targetProject
属性会很有用。
这个属性可以通过resource
或者url
来指定属性文件的位置,这两个属性只能使用其中一个来指定,同时出现会报错。
-
resource
:指定**classpath**下的属性文件,使用类似com/myproject/generatorConfig.properties
这样的属性值。 -
url
:可以指定文件系统上的特定位置,例如file:///C:/myfolder/generatorConfig.properties
3.2 <classPathEntry>
元素
这个元素可以0或多个,不受限制。
最常见的用法是通过这个属性指定驱动的路径,例如:
<classPathEntry location="E:mysqlmysql-connector-java-5.1.29.jar"/>
重点提醒:本文之前在这里有误导,特别强调。
注意,classPathEntry只在下面这两种情况下才有效:
- 当加载 JDBC 驱动内省数据库时
- 当加载根类中的 JavaModelGenerator 检查重写的方法时
使用方式:
mvn mybatis-generator:generate
就可以在我们配置的路径看到生成的java文件和xml文件了。
加参数:
mvn mybatis-generator:generate -Dmybatis.generator.overwrite=true
表示强制重载已经存在了的同名文件。
建表时,字段名称建议用"_"分隔多个单词,比如:AWB_NO、REC_ID...,这样生成的entity,属性名称就会变成漂亮的驼峰命名,即:awbNo、recId
参考:
MyBatis-Generator最佳实践
基础接口 Select
接口:SelectMapper<T>
方法:List<T> select(T record);
说明:根据实体中的属性值进行查询,查询条件使用等号
mapper对应的配置文件:
<!-- 此处namespace需要指定dao接口 --> <mapper namespace="com.mymaven.mybatisdemo.dao.DepartmentMapper"> <!--配置一个resultMap 指定返回的类型 --> <resultMap id="departMent" type="Department"> <id column="dp_id" property="dp_id" /> <result column="dp_name" property="dp_name" /> <result column="cost_center" property="cost_center" /> </resultMap> <!-- 返回一个list的写法 --> <select id="queryAllDepartment" resultMap="departMent" > select * from t_department </select> </mapper>
注意
<select id="queryAllDepartment" resultMap="departMent" 这里返回类型是resultMap,不是ResultType.这个我搞错了。。。
注意:上述UserMapper.xml文件中resultType表明:如果返回的是是一个集合,要写集合中元素的类型,不能写成java.util.List,否则查询会报错,下面我们演示一下这种情况
♦修改UserMapper.xml文件,配置如下:
<select id="getAllUsers" resultType="java.util.List">
select id, loginId, userName, role, note from t_user
</select>
https://www.cnblogs.com/dongying/p/4048828.html
深入理解Mybatis中的resultType和resultMap
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的(对应着我们的model对象中的实体),而resultMap则是对外部ResultMap的引用(提前定义了db和model之间的隐射key-->value关系),但是resultType跟resultMap不能同时存在。
在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。
①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。
②当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用
MyBatis 通过包含的jdbcType类型
BIT FLOAT CHAR TIMESTAMP OTHER UNDEFINED
TINYINT REAL VARCHAR BINARY BLOB NVARCHAR
SMALLINT DOUBLE LONGVARCHAR VARBINARY CLOB NCHAR
INTEGER NUMERIC DATE LONGVARBINARY BOOLEAN NCLOB
BIGINT DECIMAL TIME NULL CURSOR
Mybatis中javaType和jdbcType对应和CRUD例子
Mybatis中javaType和jdbcType对应关系
JDBC Type Java Type CHAR String VARCHAR String LONGVARCHAR String NUMERIC java.math.BigDecimal DECIMAL java.math.BigDecimal BIT boolean BOOLEAN boolean TINYINT byte SMALLINT short INTEGER int BIGINT long REAL float FLOAT double DOUBLE double BINARY byte[] VARBINARY byte[] LONGVARBINARY byte[] DATE java.sql.Date TIME java.sql.Time TIMESTAMP java.sql.Timestamp CLOB Clob BLOB Blob ARRAY Array DISTINCT mapping of underlying type STRUCT Struct REF Ref
mybatis关于日期的陷阱
1.mybatis 3.3.0(及以上?,博主的是3.4.0问题依然存在)中对于时间参数进行比较时的一个问题, 如果拿传入的时间类型参数与空字符串' '进行对比判断则会引发异常,即只需做非空判断即可<if test="createTime != null"> ...</if>。
2.mysql中字段为datetimeZ类型,即年月日时分秒,这时前台若想传一个年月日的字符串来查找,可以使用,通过date()函数将年月日时分秒的日期截取为年月日