今天来配置 MyBatis,并且用 Generator 生成实体类和 Mapper 接口。先简单说下 MyBatis,按照官网的说法:
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC
代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的
POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
相对于 Hibernate 而言,MyBatis 是超轻量级的。不仅体积小,没有那么复杂的包结构,而且开发的思路也有些变化。面对较为复杂的查询,MyBatis 只是要求开发者将精力集中在 SQL 上,而不必去了解 HQL 这种衍生的类 SQL 语言。更不消说 MyBatis 也有个超级强大的 Generator,一点不次于 Hibernate Tools,不仅可以生成实体类,而且可以生成基础的 DAO,但是前提是自己实现建好数据库和表。其实也对,这样可以用 PowerDesign 完成 UML 建模,然后再用 MyBatis 搞实体类。好像越来越多的开发者在选择 Mybatis 了。
MyBatis 和 Mybatis Generator 的引入交给 Maven 就行了。Eclipse 也有插件,到 Eclipse Marketplace 搜索可以找到。这个插件就是方便在配置文件上右击,然后在快捷菜单中直接运行 Mybatis Generator。需要注意的是:这种运行方式要求配置文件中路径里面写上项目名称。这个问题后面再说吧。有点扯远了,回到项目中来。
6.1 配置 Mybatis 主配置文件(mybatis-config.xml)
这个文件是《 SpringMVC+Spring+MyBatis的综合练习 5 (配置 Spring)》中 applicationContext.xml 文件的第28行提及的。
代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
<typeAliases>
<package name="com.hh.ssm.bean" />
</typeAliases>
</configuration>
说明:
(1) 文件保存在类路径classpath(具体到本项目就是 src/main/resources 文件夹)下,和 applicationContext.xml 文件在一起。
(2) < settings > 标签中设定开启首字母大写的驼峰形式。
(3) < typeAliases > 标签定义别名。指定的包名表示表示扫描该包名下的所有类(除了接口和匿名内部类),如果类名上有注解,则使用注解指定的名称作为别名;如果没有则使用类名首字母小写作为别名。如 com.hh.ssm.bean.User 这个类如果没有设置 @Alias 注解,则此时会被关联到user这个别名上。当然,也可以用下面的方法显式指定别名:
<typeAlias alias="Dept" type="com.hh.ssm.bean.Department"/>
注意:这个标签要在 < settings > 标签后,否则会有异常。
到目前为止,基本上开发需要的环境已经全部安排好了,下面要用 Mybatis Generator 生成实体类和DAO方法。
6.2 配置运行 MyBatis Generator 所需要的 XML
先看代码:mbg.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>
<context id="MySqlTables" targetRuntime="MyBatis3">
<!-- 去除 MyBatis 生成的注释(保留注释有助于了解实体类和表的对应关系) -->
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/ssm?useSSL=false" userId="root"
password="root">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 指定javaBean生成的位置 -->
<!-- 如果是用插件直接运行这个文件,下面的".\src\main\java" 要写成 "ssm\src\main\java" -->
<!-- 后面的 targetProject 也是一样要调整,否则不能正常生成 -->
<javaModelGenerator targetPackage="com.hh.ssm.bean"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 指定 sql 映射文件生成的位置 -->
<sqlMapGenerator targetPackage="mapper" targetProject=".\src\main\resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 指定 dao 接口生成的位置,mapper接口 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.hh.ssm.dao" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- table 指定每个表的生产策略 -->
<table tableName="tbl_employee" domainObjectName="Employee"></table>
<table tableName="tbl_department" domainObjectName="Department"></table>
</context>
</generatorConfiguration>
说明: (可以看看《Mybatis Generator最完整配置详解》)
(1) < context > 标签:
context:生成一组对象的环境 id:必选,上下文id,用于在生成错误时提示 defaultModelType:指定生成对象的样式 1,conditional:类似hierarchical; 2,flat:所有内容(主键,blob)等全部生成在一个对象中; 3,hierarchical:主键生成一个XXKey对象(key class),Blob等单独生成一个对象,其他简单属性在一个对象中(record class) targetRuntime: 1,MyBatis3:默认的值,生成基于 MyBatis3.x 以上版本的内容,包括 XXXBySample; 2,MyBatis3Simple:类似 MyBatis3,只是不生成 XXXBySample; introspectedColumnImpl:类全限定名,用于扩展MBG
(2) < commentGenerator > 标签去除 MyBatis 生成的注释(但保留注释有助于了解实体类和表的对应关系) 。
(3) < jdbcConnection >标签定义了数据源。
(4) < javaTypeResolver > 标签定义了数据类型转换的规则,不使用BigDecimal对应DECIMAL和 NUMERIC数据类型。
true:使用BigDecimal对应DECIMAL和 NUMERIC数据类型
false:默认,
- scale>0;length>18:使用BigDecimal;
- scale=0;length[10,18]:使用Long;
- scale=0;length[5,9]:使用Integer;
- scale=0;length<5:使用Short;
(5) < javaModelGenerator > 标签指定了JavaBean的目标包名和存储位置。
(6) < sqlMapGenerator > 标签指定了sql 映射文件的目标包名和存储位置。
(7) < javaClientGenerator > 标签指定了 DAO 接口 mapper 文件的目标包名和存储位置。
(8) < table > 标签指定了每个表的生成策略。
这里只能结合项目中涉及的简单说明一下,具体细节还是看《Mybatis Generator最完整配置详解》。