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

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值