SpringMVC+Spring+MyBatis 的综合练习 6 (配置 Mybatis 及 Generator)

今天来配置 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最完整配置详解》

猜你喜欢

转载自blog.csdn.net/hh680821/article/details/79049499