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层的方法只有几个默认的方法,前提是你已经连接好了数据库,并且你的数据库里有个表
下一篇我们会找到生成它们的方法,并做修改