Mybatis学习---Mybatis逆向工程自动生成代码(代替手写pojo类,Mapper和映射文件)

 
 

学习Mybatis后,学会使用dao层映射文件和Mapper,从数据库获取数据,并将数据封装为相应的对象存储。

将Mybatis框架使用到SSM项目中,实现了:视图层 + 业务逻辑层 + 数据访问层。

  • 对于数据库表不多的情况,正常的使用Mybatis框架:手写pojo类文件、dao层Mapper、映射文件即可;
  • 对于数据库中表比较多的情况,如果手写同上代码工作量会很大,而且容易出错,此时就需要Mybatis逆向工程帮助我们自动生成代码怎么生成呢?

【Mybatis官方提供逆向工程可以针对 单表 自动生成执行所需要的代码:mapper.java、mapper.xml……】

先理清思路:

            我要完成的项目是crm_system,这个项目中需要我手动书写很多实体类文件,mapper以及映射文件,我觉得很繁琐,也怕写错,于是现在我借助三方工具(也就是Mybatis逆向工程)去帮我写好,然后我复制粘贴到我的项目对应包下,这样就节省了很多时间,也可以避免编码错误。

            mybatis逆向工程自己也是一个项目,修改它的配置文件,然后执行项目下的启动generator文件,即可在 该项目下生成所需代码文件,然后直接拷贝到要完成的原始项目即可。

步骤如下:

1.    下载逆向工程 

        下载链接1/方法1——完整逆向工程项目 ( generatorSqlmapCustom.zip ):

           将解压后的工程generatorSqlmapCustom项目直接导入eclipse,需要的核心包工程中都包含在工程lib下,只需在genneatorConfig.xml文件中做相应配置修改,然后运行GeneratorSqlmap.java即可。

                附:百度网盘下载链接: https://pan.baidu.com/s/1y_jo0Q7VcQKFcdajpQ-tQA 密码: iebb

   下载链接2/方法2——mybatis-generator-core-1.3.2-bundle.zip

   该方法适合想对mybatis逆向工程有更多了解的程序员们,因为只下载这一个包并不够,而且还需要手写一些文件,所以我选择了方法1,至于该方法具体操作请参考网络资源:https://blog.csdn.net/qr719169236/article/details/51086997   

     附:核心包_百度网盘链接: https://pan.baidu.com/s/1-nE0aWRB7srDKN9rHNu80g 密码: 538u

2.    修改配置文件 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>
	<context id="testTables" targetRuntime="MyBatis3">
		<commentGenerator>
			<!-- 是否去除自动生成的注释 true:是 : false:否 -->
			<property name="suppressAllComments" value="true" />
		</commentGenerator>
		<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
		<jdbcConnection driverClass="com.mysql.jdbc.Driver"
			connectionURL="jdbc:mysql://localhost:3306/taotao" userId="root"
			password="root">
		</jdbcConnection>
		<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 
			NUMERIC 类型解析为java.math.BigDecimal -->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!-- targetProject:生成PO类的位置 -->
		<javaModelGenerator targetPackage="com.taotao.pojo"
			targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
			<!-- 从数据库返回的值被清理前后的空格 -->
			<property name="trimStrings" value="true" />
		</javaModelGenerator>
        <!-- targetProject:mapper映射文件生成的位置 -->
		<sqlMapGenerator targetPackage="com.taotao.mapper" 
			targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
		</sqlMapGenerator>
		<!-- targetPackage:mapper接口生成的位置 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="com.taotao.mapper" 
			targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
		</javaClientGenerator>
		<!-- 指定数据库表 -->
		<table schema="" tableName="tb_content"></table>
		<table schema="" tableName="tb_content_category"></table>
		<table schema="" tableName="tb_item"></table>
		<table schema="" tableName="tb_item_cat"></table>
		<table schema="" tableName="tb_item_desc"></table>
		<table schema="" tableName="tb_item_param"></table>
		<table schema="" tableName="tb_item_param_item"></table>
		<table schema="" tableName="tb_order"></table>
		<table schema="" tableName="tb_order_item"></table>
		<table schema="" tableName="tb_order_shipping"></table>
		<table schema="" tableName="tb_user"></table>

	</context>
</generatorConfiguration>

        以下代码是我根据自己项目需求修改之后的完整配置代码,与原配置文件相比,改动之处如下(代码下方)

<?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="testTables" targetRuntime="MyBatis3">
		<!--javaBean 实现序列化接口 -->
		<plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
		<!-- 生成entity时,生成toString -->
		<plugin type="org.mybatis.generator.plugins.ToStringPlugin"></plugin>
		<!-- 自定义查询指定字段 -->
		<plugin type="org.mybatis.generator.plugins.field.FieldsPlugin"></plugin>
		<commentGenerator type="org.mybatis.generator.plugins.comment.MyCommentGenerator">
			<!-- 是否去除自动生成的注释 true:是 : false:否 -->
			<!-- <property name="suppressAllComments" value="true" /> -->
		</commentGenerator>
		<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
		<jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver"
			connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:XE" userId="temp"
			password="temp">
		</jdbcConnection>
		<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 
			NUMERIC 类型解析为java.math.BigDecimal -->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!-- targetProject:生成PO类的位置 -->
		<javaModelGenerator targetPackage="com.briup.crm.common.bean"
			targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
			<!-- 从数据库返回的值被清理前后的空格 -->
			<property name="trimStrings" value="true" />
		</javaModelGenerator>
        <!-- targetProject:mapper映射文件生成的位置 -->
		<sqlMapGenerator targetPackage="com.briup.crm.dao" 
			targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
		</sqlMapGenerator>
		<!-- targetPackage:mapper接口生成的位置 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="com.briup.crm.dao" 
			targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="true" />
		</javaClientGenerator>
		<!-- 指定数据库表 -->
		<table schema="" tableName="cst_activity">
			<columnOverride column="atv_cust_id" javaType="java.lang.Long" />
			<columnOverride column="atv_id" javaType="java.lang.Long" />
		</table>
		<table schema="" tableName="cst_customer">
			<columnOverride column="cust_id" javaType="java.lang.Long" />
			<columnOverride column="cust_manager_id" javaType="java.lang.Integer" />
			<columnOverride column="cust_level" javaType="java.lang.Integer" />
			<columnOverride column="cust_satisfy" javaType="java.lang.Integer" />
			<columnOverride column="cust_credit" javaType="java.lang.Integer" />
			<columnOverride column="cust_bankroll" javaType="java.lang.Long" />
			<columnOverride column="cust_turnover" javaType="java.lang.Long" />
		</table>
		<table schema="" tableName="cst_linkman">
			<columnOverride column="lkm_id" javaType="java.lang.Long" />
			<columnOverride column="lkm_cust_id" javaType="java.lang.Long" />
		</table>
		<table schema="" tableName="cst_log">
			<columnOverride column="log_id" javaType="java.lang.Long" />
		</table>
		<table schema="" tableName="cst_service">
			<columnOverride column="svr_id" javaType="java.lang.Long" />
			<columnOverride column="svr_satisfy" javaType="java.lang.Integer" />
		</table>
		<table schema="" tableName="orders">
			<columnOverride column="odr_id" javaType="java.lang.Long" />
			<columnOverride column="odr_cust_id" javaType="java.lang.Long" />
		</table>
		<table schema="" tableName="orders_line">
			<columnOverride column="odd_id" javaType="java.lang.Long" />
			<columnOverride column="odd_order_id" javaType="java.lang.Long" />
			<columnOverride column="odd_count" javaType="java.lang.Long" />
			<columnOverride column="odd_price" javaType="java.lang.Long" />
			<columnOverride column="odd_id" javaType="java.lang.Long" />
		</table>
		<table schema="" tableName="product">
			<columnOverride column="prod_id" javaType="java.lang.Long" />
			<columnOverride column="prod_price" javaType="java.lang.Long" />
		</table>
		<table schema="" tableName="sal_chance">
			<columnOverride column="chc_id" javaType="java.lang.Long" />
			<columnOverride column="chc_rate" javaType="java.lang.Integer" />
		</table>
		<table schema="" tableName="sal_plan">
			<columnOverride column="pla_id" javaType="java.lang.Long" />
			<columnOverride column="pla_chc_id" javaType="java.lang.Long" />
		</table>
		<table schema="" tableName="storage">
			<columnOverride column="stk_id" javaType="java.lang.Long" />
			<columnOverride column="stk_count" javaType="java.lang.Integer" />
		</table>
		<table schema="" tableName="sys_role">
			<columnOverride column="role_id" javaType="java.lang.Long" />
			<columnOverride column="role_flag" javaType="java.lang.Integer" />
		</table>
		<table schema="" tableName="sys_user">
			<columnOverride column="usr_id" javaType="java.lang.Long" />
			<columnOverride column="usr_flag" javaType="java.lang.Integer" />
			<columnOverride column="usr_role_id" javaType="java.lang.Long" />
		</table>

	</context>
</generatorConfiguration>

        改动处如下:



3:运行src下的GeneratorSqlmap.java

        运行完毕后右击generatorSqlmapCustom项目,选择Refresh刷新generator项目之后即可看到自动生成的包名与要完成的原始项目包名一致,且包中生成了所有的实体类文件、映射文件和mapper文件

4. 将生成的所有文件移到原始项目对应包下


到这里,逆向工程自动生成代码已全部完成,至于网上有说该逆向工程也可生成service层文件等功能,有需要再去学习,目前对此还不大了解。

最后,总结一下我在完成generator自动生成代码项目时作出的修改 + 修改后遇到的一些问题:

修改【generator项目中】:

    1. 修改数据库连接配置信息

    2. 修改pojo类,mapper,xxMapper.xml的包名

    3. 修改要连接的数据库表名

修改后仍然遇到了问题:

    1. 在配置文件中添加了配置文件,却未向项目中导入相应插件(即上图中的:可选改动项)

            解决:项目中添加相应插件(下图部分,需要哪个添加哪个即可)

            

    2.在我的原始项目pojo类中居然出现了BigDecimal类型

           分析原因是:我开始没有在配置文件中指定数据库表中number字段转换后的java类型。

              解决: 添加指定转换类型代码。具体代码见上文中的完整配置代码最后部分(指定数据库表)


若文中出现不妥之处,欢迎路过的各路大虾们指出来,灰常感谢。大笑

猜你喜欢

转载自blog.csdn.net/qq_19314763/article/details/79657612