Mybatis-generator修改源代码实现自定义方法,返回List对象(一)

来源:互联网 发布:网站怎么做优化 编辑:程序博客网 时间:2024/06/09 17:45

Mybatis-generator修改源代码实现自定义方法,返回Lsit对象——第一篇

本文结合网上的诸多教程,详细介绍通过修改Mybatis-generator的源代码, 在自动生成dao层和XML文件时,添加一个返回List的方法,数据库使用Mysql
- 1、获取Mybatis-generator源代码,并创建项目
- 2、组合源代码中的示例,实现Dao(Mapper)层添加一个方法
- 3、实现XML文件添加Dao(Mapper)层的实现


目的:

  • 近期经常要搭建新项目,使用的SSM框架,而且经常要改数据库结构,但是在用Mybatis-generator自动生成的时候,仅有几个默认的方法,
  • 这里写图片描述
    感觉不够用,例如我需要下面这样的方法:
 User user= new User(); List<User> list=userMapper.selectByObject(user);

设置实体类user对象的任何属性,根据属性查询出所有的数据,属性为null则SQL语句中不添加这个条件
不设置任何属性,则默认返回所有数据

1、 获取Mybatis-generator源码,并创建项目

网上有非常多的教程,比如一些修改格式、注释的教程,大家也可以去看看,那么我们这里先讲讲怎么获取源代码。
首先我建一个maven项目,我用的是Myeclipse10,建好以后,在pom.xml中添加这个3个依赖:

    <dependency>        <groupId>org.mybatis.generator</groupId>            <artifactId>mybatis-generator-core</artifactId>            <version>1.3.2</version>    </dependency>    <dependency>        <groupId>log4j</groupId>        <artifactId>log4j</artifactId>        <version>1.2.17</version>     </dependency>    <dependency>        <groupId>org.apache.ant</groupId>        <artifactId>ant</artifactId>        <version>1.9.7</version>    </dependency>

junit 的依赖必须还存在,把这些包下载下来以后,打开org.mybatis.generator里头的随便一个CLASS文件,
这里写图片描述

刚开始显示找不到源码,过一会儿就会把源码下载下来,然后你去你的maven库中找,比如这是我的路径:H:\mavenjar\org\mybatis\generator\mybatis-generator-core\1.3.2
这里写图片描述

带-sources的就是源代码的jar,
把它解压,就可以得到.java的文件
这里写图片描述
打开路劲可以看到这些文件夹,在项目中创建src/main/java目录,然后建立 org.mybatis.generator 包,将截图中的文件全选复制到这个包下面,
然后在src/main/resources 文件夹下添加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>    <classPathEntry        location="H:\generator\mysql-connector-java-5.1.6-bin.jar" />    <context id="mysqlTables" targetRuntime="MyBatis3">        <commentGenerator>            <property name="suppressAllComments" value="true" />        </commentGenerator>        <jdbcConnection driverClass="com.mysql.jdbc.Driver"            connectionURL="jdbc:mysql://localhost:3306/servermonitor"            userId="root" password="123456">        </jdbcConnection>        <javaTypeResolver>            <property name="forceBigDecimals" value="false" />        </javaTypeResolver>         <!-- 生成model模型,对应的包,存放位置可以指定具体的路径,如/ProjectName/src,也可以使用MAVEN来自动生成 -->        <javaModelGenerator targetPackage="com.servermonitor.entity"            targetProject="src/main/java">            <property name="enableSubPackages" value="true" />            <property name="trimStrings" value="true" />        </javaModelGenerator>         <!--对应的xml mapper文件  -->        <sqlMapGenerator targetPackage="mybatis" targetProject="src/main/resources">            <property name="enableSubPackages" value="true" />        </sqlMapGenerator>        <!-- 对应的dao接口 -->        <javaClientGenerator type="XMLMAPPER"            targetPackage="com.servermonitor.dao" targetProject="src/main/java">            <property name="enableSubPackages" value="true" />        </javaClientGenerator>         <!-- 这里是数据库的表名table_user 以及 POJO类的名字User --> <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />    </context></generatorConfiguration>

我直接将Mysql的包放在 H:\generator\mysql-connector-java-5.1.6-bin.jar这里,这个可以自己去改,
然后创建一个包,一个生成的类,
项目结构截图
生成类的代码如下:

package org.mybatis.generator.extend;  import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.net.URLEncoder;import org.mybatis.generator.api.ShellRunner;  public class MyTestRun {      public static void main(String[] args) {          String config = MyTestRun.class.getClassLoader().getResource("generatorConfig.xml").getFile();          try {            config=URLDecoder.decode(config, "UTF-8");        } catch (UnsupportedEncodingException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        String[] arg = { "-configfile", config, "-overwrite" };          ShellRunner.main(arg);      }  }  

我本身的工作空间文件夹名称有空格,所以在获取路径的时候,会出现%20这种情况,所以需要转码,你们如果没有这种的,是不需要decode的,就是try里头的代码;
把项目报错的的地方改好,然后执行这个main方法,就会生成一系列的文件,这里就不介绍了,生成文件的后,大家可以看到dao层的方法只有几个默认的方法,前提是你已经连接好了数据库,并且你的数据库里有个表
下一篇我们会找到生成它们的方法,并做修改

阅读全文
0 0
原创粉丝点击