GVKun编程网logo

在 Mybatis 的另一个结果 Map 中选择部门列表作为集合(mybatis结果集用一个map接收)

15

在本文中,我们将给您介绍关于在Mybatis的另一个结果Map中选择部门列表作为集合的详细内容,并且为您解答mybatis结果集用一个map接收的相关问题,此外,我们还将为您提供关于java-myba

在本文中,我们将给您介绍关于在 Mybatis 的另一个结果 Map 中选择部门列表作为集合的详细内容,并且为您解答mybatis结果集用一个map接收的相关问题,此外,我们还将为您提供关于java-mybaits-015-mybatis逆向工程最佳实践【基础mybatis-generator、tk.mybatis、mubatis-plus】、Mabatis三剑客分别是:mybatis-generator、mybatis-plugin、mybatis-pagehelper、Mybaits 源码解析 (一)----- 搭建一个mybatis框架(MyBatis HelloWorld)、mybatis mapper 映入另一个 mapper 文件内容的知识。

本文目录一览:

在 Mybatis 的另一个结果 Map 中选择部门列表作为集合(mybatis结果集用一个map接收)

在 Mybatis 的另一个结果 Map 中选择部门列表作为集合(mybatis结果集用一个map接收)

如何解决在 Mybatis 的另一个结果 Map 中选择部门列表作为集合?

Java 8.0 (Springboot),甲骨文数据库

我的 Java 类为 -

public class AllEmployee{
List<Employee> employees;
}

public class Employee {
    String globalId;
    int empId;
    String name;
    List<Department> departmentList;
    }
    
public class Department {
    int empId;
    int depId;
    String depValue;
}

MyBatis xml配置-

<resultMap id="empMapper" type="Employee">
        <id property="globalId" column="globalId" />
        <result property="empId" column="empId" />
        <result property="name" column="name" />
        <collection property="departmentList" javaType="ArrayList" ofType="Department"/>
        <id property="empId" column="empId" />
        <result property="depId" column="depId" />
        <result property="depValue" column="depValue" />
        </collection>
</resultMap>

<select id="retriveAllEmployees" resultMap="empMapper">
        SELECT ee.empId,ee.name,dt.depId,dt.depValue FROM employee ee
        INNER JOIN department dt on dt.empId = ee.empId
        <where>
            globalId IN
            <foreach collection="globalIdList" item="globalId" separator="," open="(" close=")">
                #{globalId}
            </foreach>
        </where>
    </select>

正确的json输出应该是-

{
  "employees": [
    {
      "empId": 1,"name": "alton","departmentList": [
        {
          "depId": 2,"depValue": "fire"
        },{
          "depId": 4,"depValue": "ice"
        }
      ]
    }
  ]
}

但是在下面的json格式中得到错误的输出- (外部对象被重复多次)

{
  "employees": [
    {
      "empId": 1,"depValue": "fire"
        }
      ]
    },{
      "empId": 1,"departmentList": [
        {
          "depId": 4,"depValue": "ice"
        }
      ]
    }
  ]
}

一旦我从 mybatis 获取对象,我就可以使用流和对象操作来纠正响应,但是我需要在 mybatis 中以正确的方式将其直接转换为我们想要的对象。 谁能纠正我,我在这个 xml 代码中遗漏了什么。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

java-mybaits-015-mybatis逆向工程最佳实践【基础mybatis-generator、tk.mybatis、mubatis-plus】

java-mybaits-015-mybatis逆向工程最佳实践【基础mybatis-generator、tk.mybatis、mubatis-plus】

一、概述

三款框架的功能对比

 

Mybatis-generator

通用Mapper

Mybatis-Plus

代码生成器

支持自动生成Model,Mapper,Mapper XML文件

生成方式不够灵活;

生成代码功能较为简单

支持自动生成Entity,Mapper,Mapper XML文件;

提供通用的Mapper模板,生成方式较灵活;

生成的Model文件包含注释能够很好地与数据库表完成映射

支持自动生成Entity,Mapper,Mapper XML,Service,Controller文件;

提供BaseMapper接口

CRUD操作

代码生成后每个Mapper有固定的CRUD方法;

在每个Mapper上分别扩展

提供通用Mapper接口;方便构造统一service

可以扩展通用接口

提供BaseMapper接口;

可以扩展通用接口

条件构造器

每个实体类自己的Example构造条件【对象方式】

提供通用Example【构建sql】

提供Wrapper进行复杂条件构造

乐观锁

 

支持

支持

主键策略

 

支持

支持

分页

 

 

支持

逻辑删除

 

 

支持

通用枚举

 

 

支持

攻击Sql阻断

 

 

支持

性能分析

 

 

支持

  通用Mapper是对Mybatis-generator的升级改造,解决了使用Mybatis-generator可能需要大量重构的问题,并且在这个基础上加入了一些新的功能。

  Mybatis-Plus可以看作是在另一个方向上对Mybatis的升级改造,不仅能够根据数据库表快速生成pojo实体类,还封装了大量CRUD方法,使用Wrapper解决了复杂条件构造等问题,更是根据开发中常见的问题给出了一系列解决方案。

  在拥有Maven和Spring boot的开发框架下,MBG、通用Mapper和MP都可以快速地完成安装,相比于MBG和通用Mapper仅需要执行插件就可以完成基本的开发工作,MP可能需要更多的开发工作量。

  最佳实践参看代码:https://github.com/bjlhx15/java_base_architecture.git

二、Mybatis-generator

  MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成器。它为所有版本的MyBatis以及版本2.2.0之后的iBATIS版本生成代码。它将根据数据库表生成可用于访问表的文件。

  Mybatis-generator主要完成的工作是依据数据库表创建对应的model、dao、mapping文件,可以通过Maven插件或者mybatis-generator的jar包生成。

  这里介绍Maven插件使用方法:

    1、在pom.xml文件中加入mybatis-generator系列插件;

    2、创建generatorConfig.xml文件,在配置文件中指定数据库连接地址、生成类的存放地址、生成对应表的类名等信息;

    3、执行mybatis-generator插件,即可生成相应文件;

    4、此外,mybatis-generator自动生成了example类用于构造复杂的筛选条件

  Mybatis-generator使用较为简单,生成的DAO类及映射文件中包含基本的CRUD操作。

  需要注意的是,在一次项目中多次执行mybatis-generator,xml文件会追加,会覆盖原本的Model、DAO;可以使用如下方式

    

    1、每次清理要生成的xml

    2、自动生成的写入auto,

    3、个人扩展的使用上图方式

  可以参看上述github代码

三、通用Mapper【tk.mybatis】

官网:https://github.com/abel533/Mapper/wiki

  当数据库字段变化频繁时,使用MBG(mybatis-generator)会带来大量的重构工作,对此,通用Mapper给出的解决办法是:给予开发者一个具备丰富的单表方法并且容易扩展的通用的Mapper。

  通用Mapper是对单表的CRUD操作进行了较为详细的实现,使得开发人员可以随意的按照自己的需求选择通用的方法,同时允许开发人员便捷地对通用Mapper进行扩展。

1. 在pom.xml中添加插件配置

<!-- 命令:mvn mybatis-generator:generate -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.6</version>
                <configuration>
                    <!-- 配置实际调用地址-->
                    <configurationFile>src/main/resources/mybatis_generatorConfig/generatorConfig-base.xml
                    </configurationFile>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.38</version>
                    </dependency>
                    <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper</artifactId>
                        <version>4.0.0</version>
                    </dependency>
                </dependencies>
            </plugin>
View Code

  可以看到,通用Mapper的代码生成实际上是使用了MGB,因此通用Mapper的代码生成器只是调用了MGB,然后在这个基础上加入了一些元素来方便开发。

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>
    <!--导入属性配置,前面我们写的一个配置文件,你也可以直接使用mybatis的jdbc的配置文件 -->
    <properties resource="jdbc.properties"></properties>
    <!-- 数据库驱动,注意,这里必须要修改成你的数据库的驱动地址 -->
    <!--    如果 pom配置这里可以不写-->
    <!--    <classPathEntry  location=".m2/repository/mysql/mysql-connector-java/5.1.8/mysql-connector-java-5.1.8.jar"/>-->

    <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>
        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
            <property name="caseSensitive" value="true"/>
        </plugin>

        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="${jdbc.driver}"
                        connectionURL="${jdbc.url}"
                        userId="${jdbc.username}" password="${jdbc.password}">
        </jdbcConnection>

<!--        <javaTypeResolver>-->
<!--            <property name="forceBigDecimals" value="false"/>-->
<!--        </javaTypeResolver>-->
        <!-- targetProject:生成PO类的位置 -->
        <javaModelGenerator targetPackage="com.github.bjlhx15.mybatis.springboot.base.model.auto"
                            targetProject="../tk-mybatis-springboot-base1/src/main/java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- targetProject:mapper xml 映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="autoxml"
                         targetProject="../tk-mybatis-springboot-base1/src/main/resources/mapper/">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!--targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.github.bjlhx15.mybatis.springboot.base.repository.auto"
                             targetProject="../tk-mybatis-springboot-base1/src/main/java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>

        <!-- 指定数据库表 -->
        <table tableName="accountbalance" domainObjectName="AccountBalance">
            <generatedKey column="id" sqlStatement="JDBC"/>
        </table>


    </context>
</generatorConfiguration>
View Code

  与MGB原有的配置文件相比,这里只是多了一个插件的配置,这个插件的作用是:配置生成的Mapper接口都会自动继承这个接口,也就是说,使用通用Mapper生成的mapper接口即使看上去空空如也,但已经具备了大量的对数据库的操作方法。此外,通用 Mapper 专用代码生成器生成的 Model 会在原有基础上增加 @Table,@Id,@Column 等注解,方便自动与数据库字段进行映射。

3. 在 pom.xml 这一级目录的命令行窗口执行 mvn mybatis-generator:generate或者直接在执行mvn插件即可。

4. 通用Mapper同样有Example的设计,与MGB不同的是,MDB会对每一个表生成对应的Example类,而通用Mapper提供了一个统一的Example类,这个类和 MBG 生成的相比,需要自己设置属性名,这个类还额外提供了更多的方法。

  通用Mapper可以看作是MGB的改进和扩展,一定程度上解决了使用MGB重构的问题。

  可以参看上述github代码

四、Mybatis-Plus

  官网地址:https://mp.baomidou.com/guide/generator.html

  (以下简称MP)是Mybatis的增强工具(MBG和通用Mapper可看成插件),在Mybatis的基础上增加了很多功能,简化开发,提高效率。

在Spring Boot中的引入:

1. 在maven中添加MP启动器

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.1.2</version>
</dependency>

2. 要使用代码生成器还需要添加模板引擎依赖

参看地址:AutoGenerator的使用参考 https://mybatis.plus/guide/generator.html 。

添加 模板引擎 依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎。

Velocity(默认):

<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.1</version>
</dependency>

Freemarker:

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.29</version>
</dependency>

Beetl:

<dependency>
    <groupId>com.ibeetl</groupId>
    <artifactId>beetl</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>

注意!如果您选择了非默认引擎,需要在 AutoGenerator 中 设置模板引擎。

AutoGenerator generator = new AutoGenerator();

// set freemarker engine
generator.setTemplateEngine(new FreemarkerTemplateEngine());

// set beetl engine
generator.setTemplateEngine(new BeetlTemplateEngine());

// set custom engine (reference class is your custom engine class)
generator.setTemplateEngine(new CustomTemplateEngine());

// other config
...
View Code

3、代码的自动生成。AutoGenerator是MP的代码生成器,通过调用AutoGenerator,进行相应的模板、策略配置可以快速生成Entity、Mapper、Mapper XML、Service、Controller各个模块的代码。

4. MP将通用的CRUD操作封装进BaseMapper接口,而自动生成的Mapper接口便自动继承了BaseMapper接口。复杂的Sql操作,则可以使用QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper)进行动态Sql拼接。

5、此外,MP还支持分页、逻辑删除、通用枚举、Sql注入等功能,在:https://mp.baomidou.com/guide/generator.html

  还有性能分析插件:https://mp.baomidou.com/guide/performance-analysis-plugin.html

与MBG不同,使用Mybatis-Plus自动生成代码需要编写代码,通过调用AutoAutoGenerator类实现代码生成,从这方面来说不如使用插件方便。但是它丰富的功能以及只是相对复杂的配置还是使它领先于MBG以及通用Mapper。

 

 

 

 

 

 

 

 

双方都

Mabatis三剑客分别是:mybatis-generator、mybatis-plugin、mybatis-pagehelper

Mabatis三剑客分别是:mybatis-generator、mybatis-plugin、mybatis-pagehelper

<divid="content_views">

<h3 id="本文用的是mavenidea15"><a name="t0"></a> 本文用的是maven,idea15</h3> <p> Mabatis三剑客分别是:mybatis-generator、mybatis-<a href="https://www.baidu.com/s?wd=plugin&amp;tn=24004469_oem_dg&amp;rsv_dl=gh_pl_sl_csd" target="_blank">plugin</a>、mybatis-pagehelper</p> <h2 id="一mybatis-generator"><a name="t1"></a> <a name="t1"target="_blank"></a>一、mybatis-generator</h2> <p> 根据我们的数据库自动生成pojo、dao和xml文件&nbsp;<br> pojo里面放的是跟数据库字段一一对应的对象、dao层是接口,供service使用,xml是这个dao层接口的实现,sql语句都写在xml里</p> <h4 id="1引入mabatis-generator"> <a name="t2"target="_blank"></a>1.引入mabatis-generator</h4> <p> pom.xml里引入配置</p> <prename="code" onclick="hljs.copyCode(event)"><code><ol><li><div><divdata-line-number="1"></div></div><div><div><span><span>&lt;</span><span><span><span>plugin</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="2"></div></div><div><div> <span><span>&lt;</span><span><span><span>groupId</span></span></span><span>&gt;</span></span>org.apache.maven.plugins<span><span>&lt;/</span><span><span><span>groupId</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="3"></div></div><div><div> <span><span>&lt;</span><span><span><span>artifactId</span></span></span><span>&gt;</span></span>maven-compiler-plugin<span><span>&lt;/</span><span><span><span>artifactId</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="4"></div></div><div><div> <span><span>&lt;</span><span><span><span>configuration</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="5"></div></div><div><div> <span><span>&lt;</span><span><span><span>source</span></span></span><span>&gt;</span></span>1.7<span><span>&lt;/</span><span><span><span>source</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="6"></div></div><div><div> <span><span>&lt;</span><span><span><span>target</span></span></span><span>&gt;</span></span>1.7<span><span>&lt;/</span><span><span><span>target</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="7"></div></div><div><div> <span><span>&lt;</span><span><span><span>encoding</span></span></span><span>&gt;</span></span>UTF-8<span><span>&lt;/</span><span><span><span>encoding</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="8"></div></div><div><div> <span><span>&lt;</span><span><span><span>compilerArguments</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="9"></div></div><div><div> <span><span>&lt;</span><span><span><span>extdirs</span></span></span><span>&gt;</span></span>${project.basedir}/src/main/webapp/WEB-INF/lib/<span><span>&lt;/</span><span><span><span>extdirs</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="10"></div></div><div><div> <span><span>&lt;/</span><span><span><span>compilerArguments</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="11"></div></div><div><div> <span><span>&lt;/</span><span><span><span>configuration</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="12"></div></div><div><div><span><span>&lt;/</span><span><span><span>plugin</span></span></span><span>&gt;</span></span></div></div></li></ol></code><divdata-title="复制"></div></pre><p> 引入generatorConfig.xml&nbsp;<br> generatorConfig.xml</p> <prename="code" onclick="hljs.copyCode(event)"><code><ol><li><div><divdata-line-number="1"></div></div><div><div><span><span><span>&lt;?</span>xml version=<span>"1.0"</span> encoding=<span>"UTF-8"</span><span>?&gt;</span></span></span></div></div></li><li><div><divdata-line-number="2"></div></div><div><div><span><span><span>&lt;!DOCTYPE generatorConfiguration</span></span></span></div></div></li><li><div><divdata-line-number="3"></div></div><div><div><span> PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"</span></div></div></li><li><div><divdata-line-number="4"></div></div><div><div><span> "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"&gt;</span></div></div></li><li><div><divdata-line-number="5"></div></div><div><div> </div></div></li><li><div><divdata-line-number="6"></div></div><div><div><span><span>&lt;</span><span><span><span>generatorConfiguration</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="7"></div></div><div><div> <span><span>&lt;!--导入属性配置--&gt;</span></span></div></div></li><li><div><divdata-line-number="8"></div></div><div><div> <span><span>&lt;</span><span><span><span>properties</span></span></span><span> </span><span><span><span>resource</span></span></span><span>=</span><span><span><span>"datasource.properties"</span></span></span><span>&gt;</span></span><span><span>&lt;/</span><span><span><span>properties</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="9"></div></div><div><div> </div></div></li><li><div><divdata-line-number="10"></div></div><div><div> <span><span>&lt;!--指定特定数据库的jdbc驱动jar包的位置--&gt;</span></span></div></div></li><li><div><divdata-line-number="11"></div></div><div><div> <span><span>&lt;</span><span><span><span>classPathEntry</span></span></span><span> </span><span><span><span>location</span></span></span><span>=</span><span><span><span>"${db.driverLocation}"</span></span></span><span>/&gt;</span></span></div></div></li><li><div><divdata-line-number="12"></div></div><div><div> </div></div></li><li><div><divdata-line-number="13"></div></div><div><div> <span><span>&lt;</span><span><span><span>context</span></span></span><span> </span><span><span><span>id</span></span></span><span>=</span><span><span><span>"default"</span></span></span><span> </span><span><span><span>targetRuntime</span></span></span><span>=</span><span><span><span>"MyBatis3"</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="14"></div></div><div><div> </div></div></li><li><div><divdata-line-number="15"></div></div><div><div> <span><span>&lt;!-- optional,旨在创建class时,对注释进行控制 --&gt;</span></span></div></div></li><li><div><divdata-line-number="16"></div></div><div><div> <span><span>&lt;</span><span><span><span>commentGenerator</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="17"></div></div><div><div> <span><span>&lt;</span><span><span><span>property</span></span></span><span> </span><span><span><span>name</span></span></span><span>=</span><span><span><span>"suppressDate"</span></span></span><span> </span><span><span><span>value</span></span></span><span>=</span><span><span><span>"true"</span></span></span><span>/&gt;</span></span></div></div></li><li><div><divdata-line-number="18"></div></div><div><div> <span><span>&lt;</span><span><span><span>property</span></span></span><span> </span><span><span><span>name</span></span></span><span>=</span><span><span><span>"suppressAllComments"</span></span></span><span> </span><span><span><span>value</span></span></span><span>=</span><span><span><span>"true"</span></span></span><span>/&gt;</span></span></div></div></li><li><div><divdata-line-number="19"></div></div><div><div> <span><span>&lt;/</span><span><span><span>commentGenerator</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="20"></div></div><div><div> </div></div></li><li><div><divdata-line-number="21"></div></div><div><div> <span><span>&lt;!--jdbc的数据库连接 --&gt;</span></span></div></div></li><li><div><divdata-line-number="22"></div></div><div><div> <span><span>&lt;</span><span><span><span>jdbcConnection</span></span></span></span></div></div></li><li><div><divdata-line-number="23"></div></div><div><div><span> </span><span><span><span>driverClass</span></span></span><span>=</span><span><span><span>"${db.driverClassName}"</span></span></span><span></span></div></div></li><li><div><divdata-line-number="24"></div></div><div><div> <span><span><span>connectionURL</span></span></span><span>=</span><span><span><span>"${db.url}"</span></span></span><span></span></div></div></li><li><div><divdata-line-number="25"></div></div><div><div> <span><span><span>userId</span></span></span><span>=</span><span><span><span>"${db.username}"</span></span></span><span></span></div></div></li><li><div><divdata-line-number="26"></div></div><div><div> <span><span><span>password</span></span></span><span>=</span><span><span><span>"${db.password}"</span></span></span><span>&gt;</span></div></div></li><li><div><divdata-line-number="27"></div></div><div><div> <span><span>&lt;/</span><span><span><span>jdbcConnection</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="28"></div></div><div><div> </div></div></li><li><div><divdata-line-number="29"></div></div><div><div> </div></div></li><li><div><divdata-line-number="30"></div></div><div><div> <span><span>&lt;!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制--&gt;</span></span></div></div></li><li><div><divdata-line-number="31"></div></div><div><div> <span><span>&lt;</span><span><span><span>javaTypeResolver</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="32"></div></div><div><div> <span><span>&lt;</span><span><span><span>property</span></span></span><span> </span><span><span><span>name</span></span></span><span>=</span><span><span><span>"forceBigDecimals"</span></span></span><span> </span><span><span><span>value</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span>/&gt;</span></span></div></div></li><li><div><divdata-line-number="33"></div></div><div><div> <span><span>&lt;/</span><span><span><span>javaTypeResolver</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="34"></div></div><div><div> </div></div></li><li><div><divdata-line-number="35"></div></div><div><div> </div></div></li><li><div><divdata-line-number="36"></div></div><div><div> <span><span><span>&lt;!-- Model模型生成器,用来生成含有主键key的类,记录类 以及查询Example类</span></span></span></div></div></li><li><div><divdata-line-number="37"></div></div><div><div><span> targetPackage 指定生成的model生成所在的包名</span></div></div></li><li><div><divdata-line-number="38"></div></div><div><div><span> targetProject 指定在该项目下所在的路径</span></div></div></li><li><div><divdata-line-number="39"></div></div><div><div><span> --&gt;</span></div></div></li><li><div><divdata-line-number="40"></div></div><div><div> <span><span>&lt;!--&lt;javaModelGenerator targetPackage="com.mmall.pojo" targetProject=".\src\main\java"&gt;--&gt;</span></span></div></div></li><li><div><divdata-line-number="41"></div></div><div><div> <span><span>&lt;</span><span><span><span>javaModelGenerator</span></span></span><span> </span><span><span><span>targetPackage</span></span></span><span>=</span><span><span><span>"com.mmall.pojo"</span></span></span><span> </span><span><span><span>targetProject</span></span></span><span>=</span><span><span><span>"./src/main/java"</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="42"></div></div><div><div> <span><span>&lt;!-- 是否允许子包,即targetPackage.schemaName.tableName --&gt;</span></span></div></div></li><li><div><divdata-line-number="43"></div></div><div><div> <span><span>&lt;</span><span><span><span>property</span></span></span><span> </span><span><span><span>name</span></span></span><span>=</span><span><span><span>"enableSubPackages"</span></span></span><span> </span><span><span><span>value</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span>/&gt;</span></span></div></div></li><li><div><divdata-line-number="44"></div></div><div><div> <span><span>&lt;!-- 是否对model添加 构造函数 --&gt;</span></span></div></div></li><li><div><divdata-line-number="45"></div></div><div><div> <span><span>&lt;</span><span><span><span>property</span></span></span><span> </span><span><span><span>name</span></span></span><span>=</span><span><span><span>"constructorBased"</span></span></span><span> </span><span><span><span>value</span></span></span><span>=</span><span><span><span>"true"</span></span></span><span>/&gt;</span></span></div></div></li><li><div><divdata-line-number="46"></div></div><div><div> <span><span>&lt;!-- 是否对类CHAR类型的列的数据进行trim操作 --&gt;</span></span></div></div></li><li><div><divdata-line-number="47"></div></div><div><div> <span><span>&lt;</span><span><span><span>property</span></span></span><span> </span><span><span><span>name</span></span></span><span>=</span><span><span><span>"trimStrings"</span></span></span><span> </span><span><span><span>value</span></span></span><span>=</span><span><span><span>"true"</span></span></span><span>/&gt;</span></span></div></div></li><li><div><divdata-line-number="48"></div></div><div><div> <span><span>&lt;!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法,只有构造方法 --&gt;</span></span></div></div></li><li><div><divdata-line-number="49"></div></div><div><div> <span><span>&lt;</span><span><span><span>property</span></span></span><span> </span><span><span><span>name</span></span></span><span>=</span><span><span><span>"immutable"</span></span></span><span> </span><span><span><span>value</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span>/&gt;</span></span></div></div></li><li><div><divdata-line-number="50"></div></div><div><div> <span><span>&lt;/</span><span><span><span>javaModelGenerator</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="51"></div></div><div><div> </div></div></li><li><div><divdata-line-number="52"></div></div><div><div> <span><span>&lt;!--mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 --&gt;</span></span></div></div></li><li><div><divdata-line-number="53"></div></div><div><div> <span><span>&lt;!--&lt;sqlMapGenerator targetPackage="mappers" targetProject=".\src\main\resources"&gt;--&gt;</span></span></div></div></li><li><div><divdata-line-number="54"></div></div><div><div> <span><span>&lt;</span><span><span><span>sqlMapGenerator</span></span></span><span> </span><span><span><span>targetPackage</span></span></span><span>=</span><span><span><span>"mappers"</span></span></span><span> </span><span><span><span>targetProject</span></span></span><span>=</span><span><span><span>"./src/main/resources"</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="55"></div></div><div><div> <span><span>&lt;</span><span><span><span>property</span></span></span><span> </span><span><span><span>name</span></span></span><span>=</span><span><span><span>"enableSubPackages"</span></span></span><span> </span><span><span><span>value</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span>/&gt;</span></span></div></div></li><li><div><divdata-line-number="56"></div></div><div><div> <span><span>&lt;/</span><span><span><span>sqlMapGenerator</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="57"></div></div><div><div> </div></div></li><li><div><divdata-line-number="58"></div></div><div><div> <span><span><span>&lt;!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码</span></span></span></div></div></li><li><div><divdata-line-number="59"></div></div><div><div><span> type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象</span></div></div></li><li><div><divdata-line-number="60"></div></div><div><div><span> type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象</span></div></div></li><li><div><divdata-line-number="61"></div></div><div><div><span> type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口</span></div></div></li><li><div><divdata-line-number="62"></div></div><div><div><span> --&gt;</span></div></div></li><li><div><divdata-line-number="63"></div></div><div><div> </div></div></li><li><div><divdata-line-number="64"></div></div><div><div> <span><span>&lt;!-- targetPackage:mapper接口dao生成的位置 --&gt;</span></span></div></div></li><li><div><divdata-line-number="65"></div></div><div><div> <span><span>&lt;!--&lt;javaClientGenerator type="XMLMAPPER" targetPackage="com.mmall.dao" targetProject=".\src\main\java"&gt;--&gt;</span></span></div></div></li><li><div><divdata-line-number="66"></div></div><div><div> <span><span>&lt;</span><span><span><span>javaClientGenerator</span></span></span><span> </span><span><span><span>type</span></span></span><span>=</span><span><span><span>"XMLMAPPER"</span></span></span><span> </span><span><span><span>targetPackage</span></span></span><span>=</span><span><span><span>"com.mmall.dao"</span></span></span><span> </span><span><span><span>targetProject</span></span></span><span>=</span><span><span><span>"./src/main/java"</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="67"></div></div><div><div> <span><span>&lt;!-- enableSubPackages:是否让schema作为包的后缀 --&gt;</span></span></div></div></li><li><div><divdata-line-number="68"></div></div><div><div> <span><span>&lt;</span><span><span><span>property</span></span></span><span> </span><span><span><span>name</span></span></span><span>=</span><span><span><span>"enableSubPackages"</span></span></span><span> </span><span><span><span>value</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> /&gt;</span></span></div></div></li><li><div><divdata-line-number="69"></div></div><div><div> <span><span>&lt;/</span><span><span><span>javaClientGenerator</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="70"></div></div><div><div> </div></div></li><li><div><divdata-line-number="71"></div></div><div><div> </div></div></li><li><div><divdata-line-number="72"></div></div><div><div> <span><span>&lt;</span><span><span><span>table</span></span></span><span> </span><span><span><span>tableName</span></span></span><span>=</span><span><span><span>"mmall_shipping"</span></span></span><span> </span><span><span><span>domainObjectName</span></span></span><span>=</span><span><span><span>"Shipping"</span></span></span><span> </span><span><span><span>enableCountByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableUpdateByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableDeleteByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableSelectByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>selectByExampleQueryId</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span>&gt;</span></span><span><span>&lt;/</span><span><span><span>table</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="73"></div></div><div><div> <span><span>&lt;</span><span><span><span>table</span></span></span><span> </span><span><span><span>tableName</span></span></span><span>=</span><span><span><span>"mmall_cart"</span></span></span><span> </span><span><span><span>domainObjectName</span></span></span><span>=</span><span><span><span>"Cart"</span></span></span><span> </span><span><span><span>enableCountByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableUpdateByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableDeleteByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableSelectByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>selectByExampleQueryId</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span>&gt;</span></span><span><span>&lt;/</span><span><span><span>table</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="74"></div></div><div><div> <span><span>&lt;</span><span><span><span>table</span></span></span><span> </span><span><span><span>tableName</span></span></span><span>=</span><span><span><span>"mmall_cart_item"</span></span></span><span> </span><span><span><span>domainObjectName</span></span></span><span>=</span><span><span><span>"CartItem"</span></span></span><span> </span><span><span><span>enableCountByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableUpdateByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableDeleteByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableSelectByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>selectByExampleQueryId</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span>&gt;</span></span><span><span>&lt;/</span><span><span><span>table</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="75"></div></div><div><div> <span><span>&lt;</span><span><span><span>table</span></span></span><span> </span><span><span><span>tableName</span></span></span><span>=</span><span><span><span>"mmall_category"</span></span></span><span> </span><span><span><span>domainObjectName</span></span></span><span>=</span><span><span><span>"Category"</span></span></span><span> </span><span><span><span>enableCountByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableUpdateByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableDeleteByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableSelectByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>selectByExampleQueryId</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span>&gt;</span></span><span><span>&lt;/</span><span><span><span>table</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="76"></div></div><div><div> <span><span>&lt;</span><span><span><span>table</span></span></span><span> </span><span><span><span>tableName</span></span></span><span>=</span><span><span><span>"mmall_order"</span></span></span><span> </span><span><span><span>domainObjectName</span></span></span><span>=</span><span><span><span>"Order"</span></span></span><span> </span><span><span><span>enableCountByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableUpdateByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableDeleteByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableSelectByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>selectByExampleQueryId</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span>&gt;</span></span><span><span>&lt;/</span><span><span><span>table</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="77"></div></div><div><div> <span><span>&lt;</span><span><span><span>table</span></span></span><span> </span><span><span><span>tableName</span></span></span><span>=</span><span><span><span>"mmall_order_item"</span></span></span><span> </span><span><span><span>domainObjectName</span></span></span><span>=</span><span><span><span>"OrderItem"</span></span></span><span> </span><span><span><span>enableCountByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableUpdateByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableDeleteByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableSelectByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>selectByExampleQueryId</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span>&gt;</span></span><span><span>&lt;/</span><span><span><span>table</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="78"></div></div><div><div> <span><span>&lt;</span><span><span><span>table</span></span></span><span> </span><span><span><span>tableName</span></span></span><span>=</span><span><span><span>"mmall_pay_info"</span></span></span><span> </span><span><span><span>domainObjectName</span></span></span><span>=</span><span><span><span>"PayInfo"</span></span></span><span> </span><span><span><span>enableCountByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableUpdateByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableDeleteByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableSelectByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>selectByExampleQueryId</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span>&gt;</span></span><span><span>&lt;/</span><span><span><span>table</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="79"></div></div><div><div> <span><span>&lt;</span><span><span><span>table</span></span></span><span> </span><span><span><span>tableName</span></span></span><span>=</span><span><span><span>"mmall_product"</span></span></span><span> </span><span><span><span>domainObjectName</span></span></span><span>=</span><span><span><span>"Product"</span></span></span><span> </span><span><span><span>enableCountByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableUpdateByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableDeleteByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableSelectByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>selectByExampleQueryId</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="80"></div></div><div><div> <span><span>&lt;</span><span><span><span>columnOverride</span></span></span><span> </span><span><span><span>column</span></span></span><span>=</span><span><span><span>"detail"</span></span></span><span> </span><span><span><span>jdbcType</span></span></span><span>=</span><span><span><span>"VARCHAR"</span></span></span><span> /&gt;</span></span></div></div></li><li><div><divdata-line-number="81"></div></div><div><div> <span><span>&lt;</span><span><span><span>columnOverride</span></span></span><span> </span><span><span><span>column</span></span></span><span>=</span><span><span><span>"sub_images"</span></span></span><span> </span><span><span><span>jdbcType</span></span></span><span>=</span><span><span><span>"VARCHAR"</span></span></span><span> /&gt;</span></span></div></div></li><li><div><divdata-line-number="82"></div></div><div><div> <span><span>&lt;/</span><span><span><span>table</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="83"></div></div><div><div> <span><span>&lt;</span><span><span><span>table</span></span></span><span> </span><span><span><span>tableName</span></span></span><span>=</span><span><span><span>"mmall_user"</span></span></span><span> </span><span><span><span>domainObjectName</span></span></span><span>=</span><span><span><span>"User"</span></span></span><span> </span><span><span><span>enableCountByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableUpdateByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableDeleteByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>enableSelectByExample</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span> </span><span><span><span>selectByExampleQueryId</span></span></span><span>=</span><span><span><span>"false"</span></span></span><span>&gt;</span></span><span><span>&lt;/</span><span><span><span>table</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="84"></div></div><div><div> </div></div></li><li><div><divdata-line-number="85"></div></div><div><div> </div></div></li><li><div><divdata-line-number="86"></div></div><div><div> <span><span>&lt;!-- mybatis插件的搭建 --&gt;</span></span></div></div></li><li><div><divdata-line-number="87"></div></div><div><div> <span><span>&lt;/</span><span><span><span>context</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="88"></div></div><div><div><span><span>&lt;/</span><span><span><span>generatorConfiguration</span></span></span><span>&gt;</span></span></div></div></li></ol></code><divdata-title="复制"></div></pre><h4 id="2新建datasourceproperties文件配置数据库连接信息这里配置本地数据库"> <a name="t3"target="_blank"></a>2.新建datasource.properties文件,配置数据库连接信息(这里配置本地数据库)</h4> <p> <img src="https://img-blog.csdn.net/20170501211807876?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjg0MTIwOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述" title=""></p> <prename="code" onclick="hljs.copyCode(event)"><code><ol><li><div><divdata-line-number="1"></div></div><div><div>db.driverLocation=<span><span>F</span></span><span><span>:</span>/IdeaProjects/mmall/src/main/tool/mysql-connector-java-</span><span><span>5.1</span></span>.<span><span>6</span></span>-bin.jar</div></div></li><li><div><divdata-line-number="2"></div></div><div><div>db.driverClassName=com.mysql.jdbc.<span>Driver</span></div></div></li><li><div><divdata-line-number="3"></div></div><div><div>db.url=<span><span>jdbc:</span></span><span><span>mysql:</span></span>/<span><span>/localhost:3306/mmall</span></span>?useUnicode=<span><span>true</span></span>&amp;characterEncoding=<span>UTF</span>-<span><span>8</span></span></div></div></li><li><div><divdata-line-number="4"></div></div><div><div>db.username=root</div></div></li><li><div><divdata-line-number="5"></div></div><div><div>db.password=<span><span>940724</span></span></div></div></li></ol></code><divdata-title="复制"></div></pre><p> 配置完之后,就点击idea的左下角有个小按钮,把右侧的maven project按钮调出来(右侧已有的请忽略)&nbsp;<br><img src="https://img-blog.csdn.net/20170501212050752?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjg0MTIwOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述" title="">&nbsp;<br> 点击maven project,并选定插件加载(双击就行)&nbsp;<br><img src="https://img-blog.csdn.net/20170501212307103?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjg0MTIwOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述" title="">&nbsp;<br> 下方的控制台,出现build success就是成功了,就会发现dao的包和pojo包会生成好了接口和数据对象实体类,以及生成一个mapper文件夹,里面存储着数据库里各个实体的xml文件</p> <p> 注意mapper里生成的文件夹,我在创建的时候把时间戳给加里了,如果要完美的用的话,需要把时间戳优化一下</p> <h4 id="把insert标签下的createtimejdbctypetimestamp和updatetimejdbctypetimestamp改成now"> <a name="t4"target="_blank"></a>把insert标签下的#{createTime,jdbcType=TIMESTAMP}和#{updateTime,jdbcType=TIMESTAMP}改成now()</h4> <h4 id="把update标签下的updatetimejdbctypetimestamp改成now"> <a name="t5"target="_blank"></a>把update标签下的#{updateTime,jdbcType=TIMESTAMP}改成now()</h4> <p> 这个now()方法是数据库自带的函数,表示现在的时间</p> <hr><h2 id="二mybatis-plugin"><a name="t2"></a> <a name="t6"target="_blank"></a>二、mybatis-plugin</h2> <p> 我用的是idea15,如果其他版本不好用的,可以换成idea 15&nbsp;<br> 这是一个能够追踪dao接口和mapper文件里xml的一个插件</p> <ul><li> <p> 提供Mapper接口与配置文件中对应SQL的导航</p> </li><li> <p> 提供Mapper接口与配置文件中对应SQL的导航</p> </li><li> <p> 编辑XML文件时自动补全</p> </li><li> <p> 根据Mapper接口, 使用快捷键生成xml文件及SQL标签</p> </li><li> <p> ResultMap中的property支持自动补全,支持级联(属性A.属性B.属性C)</p> </li><li> <p> 快捷键生成@Param注解</p> </li><li> <p> XML中编辑SQL时, 括号自动补全</p> </li><li> <p> XML中编辑SQL时, 支持参数自动补全(基于@Param注解识别参数)</p> </li><li> <p> 自动检查Mapper XML文件中ID冲突</p> </li><li> <p> 自动检查Mapper XML文件中错误的属性值</p> </li><li> <p> 支持<a href="https://www.baidu.com/s?wd=Find&amp;tn=24004469_oem_dg&amp;rsv_dl=gh_pl_sl_csd" target="_blank">Find</a> Usage</p> </li><li> <p> 支持重构从命名</p> </li><li> <p> 支持别名</p> </li><li> <p> 自动生成ResultMap属性</p> </li><li> <p> 快捷键: Option + Enter(<a href="https://www.baidu.com/s?wd=Mac&amp;tn=24004469_oem_dg&amp;rsv_dl=gh_pl_sl_csd" target="_blank">Mac</a>) | Alt + Enter(Windows)(直接跳转到mapper中的sql语句的快捷键是:“Ctrl+ALT+B”)</p> </li></ul><h4 id="效果点击dao可以追踪到xml同理点击xml的sql右边小箭头可以追踪到dao方法"> <a name="t7"target="_blank"></a>效果:点击dao可以追踪到xml,,同理点击xml的sql右边小箭头,可以追踪到dao方法</h4> <p> <img src="https://img-blog.csdn.net/20170501230749182?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjg0MTIwOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述" title=""></p> <h4 id="1安装插件"> <a name="t8"target="_blank"></a>1、安装插件:</h4> <p> <img src="https://img-blog.csdn.net/20170501214736063?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjg0MTIwOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述" title="">&nbsp;<br> 然后重启下idea</p> <h4 id="2mybatis-plugin插件破解"> <a name="t9"target="_blank"></a>2.mybatis-plugin插件破解</h4> <p> 到这个网址去&nbsp;<br><a href="https://github.com/myoss/profile/tree/master/idea/plugin/MybatisPlugin" rel="nofollow"target="_blank">https://github.com/myoss/profile/tree/master/idea/plugin/MybatisPlugin</a>&nbsp;<br> 你看到了一个Git仓库,先clone下来,不会clone的down下来,记住路径&nbsp;<br> 接下来,你看到一堆版本,选择你安装的mybatis_plugin版本号,比如我的是IDEA15版本的,我安装版本就是v2.64,进入v2.64你会看到一个com文件夹,牢牢记住这个文件夹有大作用</p> <p> <img src="https://img-blog.csdn.net/20170501222135388?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjg0MTIwOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEa" alt="这里写图片描述" title=""></p> <p> 点击如图所示的右上角的fork,登录自己的github,登录之后,会发现右边有个绿色的Dowload图标,点击那个就可以下载别人的项目了&nbsp;<br><img src="https://img-blog.csdn.net/20170501224229186?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjg0MTIwOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述" title=""></p> <h3 id="1-windows破解"><a name="t3"></a> <a name="t10"target="_blank"></a>(1) windows破解</h3> <p> 首先你要找到mybatis_plus.jar的位置,位置一般在这里&nbsp;<br> C:\Users\youname(你自己的文档).IntelliJIdea\config\plugins\mybatis_plus\lib&nbsp;<br> 用winRAR打开&nbsp;<br><img src="https://img-blog.csdn.net/20170501225736536?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjg0MTIwOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述" title="">&nbsp;<br> 将下载好的破解,与plugin插件压缩包中的文件更换,拖入压缩包,更换就行&nbsp;<br><img src="https://img-blog.csdn.net/20170501225438518?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjg0MTIwOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述" title=""></p> <h3 id="重启你的idea完毕破解搞定"><a name="t4"></a> <a name="t11"target="_blank"></a>重启你的IDEA,完毕,破解搞定</h3> <h3 id="2mac破解"><a name="t5"></a> <a name="t12"target="_blank"></a>(2)mac破解</h3> <p> 使用find命令在你的用户目录下查找mybatis_plus.jar这个文件</p> <prename="code" onclick="hljs.copyCode(event)"><code><span>find</span> <span>~ -name</span> <span>"mybatis_plus.jar"</span></code><divdata-title="复制"></div></pre><p> OK,拿到一个地址,然后进去</p> <prename="code" onclick="hljs.copyCode(event)"><code><span>cd</span> /Users/XXXXX/Library/Application Support/IntelliJIdea15/mybatis_plus/lib</code><divdata-title="复制"></div></pre><p> 看到了2个文件</p> <prename="code" onclick="hljs.copyCode(event)"><code><ol><li><div><divdata-line-number="1"></div></div><div><div><span>#创建一个文件夹</span></div></div></li><li><div><divdata-line-number="2"></div></div><div><div>mkdir m</div></div></li><li><div><divdata-line-number="3"></div></div><div><div><span>#进去 </span></div></div></li><li><div><divdata-line-number="4"></div></div><div><div>cd m</div></div></li><li><div><divdata-line-number="5"></div></div><div><div><span>#拷贝到m文件夹中 </span></div></div></li><li><div><divdata-line-number="6"></div></div><div><div><span>cp</span> ../mybatis_plus<span>.jar</span> .</div></div></li><li><div><divdata-line-number="7"></div></div><div><div><span>#解压jar包</span></div></div></li><li><div><divdata-line-number="8"></div></div><div><div>jar xf mybatis_plus<span>.jar</span> </div></div></li><li><div><divdata-line-number="9"></div></div><div><div><span>#复制com文件夹到这里 路径根据你情况而定,版本号也根据你情况而定</span></div></div></li><li><div><divdata-line-number="10"></div></div><div><div><span>cp</span> -r ~/Workspace/github/mybatis_plus/idea/plugin/MybatisPlugin/v2<span>.7</span>\~v2<span>.83</span>/<span>com</span> .</div></div></li><li><div><divdata-line-number="11"></div></div><div><div><span>#重新打为jar包</span></div></div></li><li><div><divdata-line-number="12"></div></div><div><div>jar cf mybatis_plus<span>.jar</span> *</div></div></li><li><div><divdata-line-number="13"></div></div><div><div><span>#复制到m的上层目录</span></div></div></li><li><div><divdata-line-number="14"></div></div><div><div><span>cp</span> mybatis_plus<span>.jar</span> ../</div></div></li></ol></code><divdata-title="复制"></div></pre><h3 id="重启你的idea完毕破解搞定-1"><a name="t6"></a> <a name="t13"target="_blank"></a>重启你的IDEA,完毕,破解搞定</h3> <hr><h2 id="三mybatis-pagehelper"><a name="t7"></a> <a name="t14"target="_blank"></a>三、Mybatis-pageHelper</h2> <p> 是一个开源的分页插件(如下网址有插件的全介绍)&nbsp;<br><a href="https://github.com/pagehelper/Mybatis-PageHelper" rel="nofollow"target="_blank">https://github.com/pagehelper/Mybatis-PageHelper</a>&nbsp;<br> 它的原理,是通过spring的AOP来实现的,这个插件能在执行sql的时候,把相关的数据再执行一次</p> <h4 id="1pomxml里添加依赖"> <a name="t15"target="_blank"></a>1.pom.xml里添加依赖</h4> <prename="code" onclick="hljs.copyCode(event)"><code><ol><li><div><divdata-line-number="1"></div></div><div><div><span><span>&lt;</span><span><span><span>dependency</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="2"></div></div><div><div> <span><span>&lt;</span><span><span><span>groupId</span></span></span><span>&gt;</span></span>com.github.pagehelper<span><span>&lt;/</span><span><span><span>groupId</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="3"></div></div><div><div> <span><span>&lt;</span><span><span><span>artifactId</span></span></span><span>&gt;</span></span>pagehelper<span><span>&lt;/</span><span><span><span>artifactId</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="4"></div></div><div><div> <span><span>&lt;</span><span><span><span>version</span></span></span><span>&gt;</span></span>4.1.0<span><span>&lt;/</span><span><span><span>version</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="5"></div></div><div><div> <span><span>&lt;/</span><span><span><span>dependency</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="6"></div></div><div><div> </div></div></li><li><div><divdata-line-number="7"></div></div><div><div> <span><span>&lt;</span><span><span><span>dependency</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="8"></div></div><div><div> <span><span>&lt;</span><span><span><span>groupId</span></span></span><span>&gt;</span></span>com.github.miemiedev<span><span>&lt;/</span><span><span><span>groupId</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="9"></div></div><div><div> <span><span>&lt;</span><span><span><span>artifactId</span></span></span><span>&gt;</span></span>mybatis-paginator<span><span>&lt;/</span><span><span><span>artifactId</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="10"></div></div><div><div> <span><span>&lt;</span><span><span><span>version</span></span></span><span>&gt;</span></span>1.2.17<span><span>&lt;/</span><span><span><span>version</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="11"></div></div><div><div> <span><span>&lt;/</span><span><span><span>dependency</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="12"></div></div><div><div> </div></div></li><li><div><divdata-line-number="13"></div></div><div><div> <span><span>&lt;</span><span><span><span>dependency</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="14"></div></div><div><div> <span><span>&lt;</span><span><span><span>groupId</span></span></span><span>&gt;</span></span>com.github.jsqlparser<span><span>&lt;/</span><span><span><span>groupId</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="15"></div></div><div><div> <span><span>&lt;</span><span><span><span>artifactId</span></span></span><span>&gt;</span></span>jsqlparser<span><span>&lt;/</span><span><span><span>artifactId</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="16"></div></div><div><div> <span><span>&lt;</span><span><span><span>version</span></span></span><span>&gt;</span></span>0.9.4<span><span>&lt;/</span><span><span><span>version</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="17"></div></div><div><div> <span><span>&lt;/</span><span><span><span>dependency</span></span></span><span>&gt;</span></span></div></div></li></ol></code><divdata-title="复制"></div></pre><h4 id="2在spring配置文件里添加配置"> <a name="t16"target="_blank"></a>2.在spring配置文件里添加配置</h4> <prename="code" onclick="hljs.copyCode(event)"><code><ol><li><div><divdata-line-number="1"></div></div><div><div> <span><span>&lt;</span><span><span><span>bean</span></span></span><span> </span><span><span><span>id</span></span></span><span>=</span><span><span><span>"sqlSessionFactory"</span></span></span><span> </span><span><span><span>class</span></span></span><span>=</span><span><span><span>"org.mybatis.spring.SqlSessionFactoryBean"</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="2"></div></div><div><div> <span><span>&lt;</span><span><span><span>property</span></span></span><span> </span><span><span><span>name</span></span></span><span>=</span><span><span><span>"dataSource"</span></span></span><span> </span><span><span><span>ref</span></span></span><span>=</span><span><span><span>"dataSource"</span></span></span><span>/&gt;</span></span></div></div></li><li><div><divdata-line-number="3"></div></div><div><div> <span><span>&lt;</span><span><span><span>property</span></span></span><span> </span><span><span><span>name</span></span></span><span>=</span><span><span><span>"mapperLocations"</span></span></span><span> </span><span><span><span>value</span></span></span><span>=</span><span><span><span>"classpath*:mappers/*Mapper.xml"</span></span></span><span>/&gt;</span></span></div></div></li><li><div><divdata-line-number="4"></div></div><div><div> </div></div></li><li><div><divdata-line-number="5"></div></div><div><div> <span><span>&lt;!-- 分页插件 --&gt;</span></span></div></div></li><li><div><divdata-line-number="6"></div></div><div><div> <span><span>&lt;</span><span><span><span>property</span></span></span><span> </span><span><span><span>name</span></span></span><span>=</span><span><span><span>"plugins"</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="7"></div></div><div><div> <span><span>&lt;</span><span><span><span>array</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="8"></div></div><div><div> <span><span>&lt;</span><span><span><span>bean</span></span></span><span> </span><span><span><span>class</span></span></span><span>=</span><span><span><span>"com.github.pagehelper.PageHelper"</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="9"></div></div><div><div> <span><span>&lt;</span><span><span><span>property</span></span></span><span> </span><span><span><span>name</span></span></span><span>=</span><span><span><span>"properties"</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="10"></div></div><div><div> <span><span>&lt;</span><span><span><span>value</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="11"></div></div><div><div> dialect=mysql</div></div></li><li><div><divdata-line-number="12"></div></div><div><div> <span><span>&lt;/</span><span><span><span>value</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="13"></div></div><div><div> <span><span>&lt;/</span><span><span><span>property</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="14"></div></div><div><div> <span><span>&lt;/</span><span><span><span>bean</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="15"></div></div><div><div> <span><span>&lt;/</span><span><span><span>array</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="16"></div></div><div><div> <span><span>&lt;/</span><span><span><span>property</span></span></span><span>&gt;</span></span></div></div></li><li><div><divdata-line-number="17"></div></div><div><div> </div></div></li><li><div><divdata-line-number="18"></div></div><div><div> <span><span>&lt;/</span><span><span><span>bean</span></span></span><span>&gt;</span></span></div></div></li></ol></code><divdata-title="复制"></div></pre><p> 注意不同数据库的方言的使用</p> <h2 id="这样三剑客就都配置ok了"><a name="t8"></a> <a name="t17"target="_blank"></a>这样三剑客就都配置OK了</h2> </div>

Mybaits 源码解析 (一)----- 搭建一个mybatis框架(MyBatis HelloWorld)

Mybaits 源码解析 (一)----- 搭建一个mybatis框架(MyBatis HelloWorld)

源码分析之前先搭一个mybatis的demo,这个在看源码的时候能起到了很大的作用,因为在看源码的时候,会恍然大悟,为什么要这么配置,为什么要这么写。(老鸟可以跳过这篇)

开发环境的准备

创建maven项目

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mybatis.chenhao</groupId>
    <artifactId>mybatisDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <!-- mybatis版本号 -->
        <mybatis.version>3.4.2</mybatis.version>
    </properties>
    <dependencies>

        <!--mybatis依赖 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <!-- mysql驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>

    </dependencies>

</project>

创建mybatis的配置文件

mybatis-config.xml

<?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>

    <!-- 引入外部配置文件 -->
    <properties resource="db.properties"></properties>
    <environments default="default">
        <environment id="default">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper class="mapper.DemoMapper"></mapper>
    </mappers>
</configuration>

db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8
jdbc.username=chenhao
jdbc.password=123456

entity和mapper

Employee

package entity;

/***
 *
 *@Author ChenHao
 *@Description:
 *@Date: Created in 14:58 2019/10/26
 *@Modified By:
 *
 */
public class Employee {
    int id;
    String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", name=''" + name + ''\'''' +
                ''}'';
    }
}

EmployeeMapper

package mapper;

import entity.Employee;
import java.util.List;

/***
 *
 *@Author ChenHao
 *@Description:
 *@Date: Created in 14:58 2019/10/26
 *@Modified By:
 *
 */
public interface EmployeeMapper {
    List<Employee> getAll();
}

EmployeeMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.EmployeeMapper">

    <resultMap id="baseMap" type="entity.Employee">
        <result property="id" column="id" jdbcType="INTEGER"></result>
        <result property="name" column="name" jdbcType="VARCHAR"></result>

    </resultMap>
    <select id="getAll" resultMap="baseMap">
        select * from employee
    </select>
</mapper>

测试

public static void main(String[] args) throws IOException {
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession sqlSession = sqlSessionFactory.openSession();
    try {
         EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
         List<Employee> all = employeeMapper.getAll();
         for (Employee item : all)
            System.out.println(item);
    } finally {
        sqlSession.close();
    }
}

测试结果:

Employee{id=1, name=''name1''}
Employee{id=2, name=''name2''}
Employee{id=3, name=''name3''}

好了,MyBatis HelloWorld我们已经搭建完了,后面的源码分析文章我们将以这个为基础来分析

 

原文出处:https://www.cnblogs.com/java-chen-hao/p/11743516.html

mybatis mapper 映入另一个 mapper 文件内容

mybatis mapper 映入另一个 mapper 文件内容

MyBatis 引入外部文件的 resultMap

一。使用 
1. 有 resultMap 属性的标签都可以使用

<select resultMap="命名空间.resultMap 的 id"></select>
<association resultMap="命名空间.resultMap 的 id"></association>
<collection resultMap="命名空间.resultMap 的 id"></collection>

2. 某些标签的 extends 熟悉应该也能使用 (猜测的,待验证)

https://blog.csdn.net/lxxxzzl/article/details/43833903

<resultMap extends="命名空间.resultMap 的 id"></resultMap>

public class CocTreeNode extends CocBean implements TreeNode<CocTreeNode> {
 
  private String level1, level2;
 
  public void setLevel1(String level1){...}
  public void setLevel2(String level2){...}
 
  public String getLevel1(){...}
  public String getLevel1(){...}
 
}
 
public class CocBean {
 
  protected String name;
  protected Double volume;
 
  public void setName(String name){...}
  public void setVolume(Double volume){...}
 
  public String getName(){...}
  public Double getVolume(){...}
 
}

 

二、映射 xml 文件

利用 resultMap 的 extends 属性。

<resultMap id="CocBeanResult" type="CocBean">
    <result property="name" column="NAME"/>
    <result property="volume" column="VOLUME"/>
</resultMap>
 
<resultMap id="simpleRow" type="CocTreeNode" extends="CocBeanResult">
    <result property="level1" column="LEVEL1"/>
    <result property="level2" column="LEVEL2"/>
</resultMap>


二。格式
命名空间.resultMap 的 id

 

mybatis 公用代码抽取到单独的 mapper.xml 文件

同任何的代码库一样,在 mapper 中,通常也会有一些公共的 sql 代码段会被很多业务 mapper.xml 引用到,比如最常用的可能是分页和数据权限过滤了,尤其是在 oracle 中的分页语法。为了减少骨架性代码,通常将它们抽象到 sql 中,但是肯定又不能在每个 mapper 中也包含,这样就没有意义了。此时,可以将这部分移到专门的 mapper.xml 中,比如 common.xml,其中包含如下: 

 

<?xml version="1.0" encoding="UTF-8"?> 
 
<!DOCTYPE mapper  
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<mapper namespace="Common">
    <sql id="Common.pagingStart">
    </sql>
    <sql id="Common.pagingEnd">
        <![CDATA[ limit #{startWith,jdbcType=INTEGER},#{rows,jdbcType=INTEGER} ]]>
    </sql>
</mapper>

然后在具体的 mapper.xml 可以通过 namespace 进行引用,如下: 

<select id="queryPage" resultMap="clientPage" parameterType="java.util.Map">
        <include refid="Common.pagingStart"/>
        <include refid="commonSelect"/>
            <!-- 这里有个额外的1是为了避免额外处理最后一个”,“ -->
        <include refid="commonFrom"/>
        <include refid="commonWhere"/>
          <if test="clientId != null" >
            and CLIENT_ID = #{clientId,jdbcType=VARCHAR}
          </if>
          <if test="clientName != null" >
            and CLIENT_NAME like ''%${clientName}''
          </if>
          <if test="telephone != null" >
            and TELEPHONE = #{telephone,jdbcType=VARCHAR}
          </if>
        order by client_id
        <include refid="Common.pagingEnd"/>
    </select>

引用:

https://silencelyn.iteye.com/blog/2420214

 

关于在 Mybatis 的另一个结果 Map 中选择部门列表作为集合mybatis结果集用一个map接收的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于java-mybaits-015-mybatis逆向工程最佳实践【基础mybatis-generator、tk.mybatis、mubatis-plus】、Mabatis三剑客分别是:mybatis-generator、mybatis-plugin、mybatis-pagehelper、Mybaits 源码解析 (一)----- 搭建一个mybatis框架(MyBatis HelloWorld)、mybatis mapper 映入另一个 mapper 文件内容的相关知识,请在本站寻找。

本文标签: