Mabatis三剑客分别是:mybatis-generator、mybatis-plugin、mybatis-pagehelper
一. mybatis-generator
根据我们的数据库自动生成pojo、dao和xml文件
pojo里面放的是跟数据库字段一一对应的对象、dao层是接口,供service使用,xml是这个dao层接口的实现,sql语句都写在xml里
1.引入mabatis-generator
pom.xml里引入配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
引入generatorConfig.xml
在启动类的同级目录下 创建两个包 pojo 和 dao
generatorConfig.xml文件配置根据实际情况更改
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>
<!--导入属性配置-->
<properties resource="jdbc.properties"></properties>
<!--指定特定数据库的jdbc驱动jar包的位置-->
<classPathEntry location="${db.driverLocation}"/>
<context id="default" targetRuntime="MyBatis3">
<!-- optional,旨在创建class时,对注释进行控制 -->
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--jdbc的数据库连接 -->
<jdbcConnection
driverClass="${db.driverClassName}"
connectionURL="${db.url}"
userId="${db.username}"
password="${db.password}">
</jdbcConnection>
<!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制-->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- Model模型生成器,用来生成含有主键key的类,记录类 以及查询Example类
targetPackage 指定生成的model生成所在的包名
targetProject 指定在该项目下所在的路径
-->
<!--<javaModelGenerator targetPackage="com.mmall.pojo" targetProject=".\src\main\java">-->
<javaModelGenerator targetPackage="com.abudory.server.pojo" targetProject="./src/main/java">
<!-- 是否允许子包,即targetPackage.schemaName.tableName -->
<property name="enableSubPackages" value="false"/>
<!-- 是否对model添加 构造函数 -->
<property name="constructorBased" value="true"/>
<!-- 是否对类CHAR类型的列的数据进行trim操作 -->
<property name="trimStrings" value="true"/>
<!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法,只有构造方法 -->
<property name="immutable" value="false"/>
</javaModelGenerator>
<!--mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 -->
<!--<sqlMapGenerator targetPackage="mappers" targetProject=".\src\main\resources">-->
<sqlMapGenerator targetPackage="mappers" targetProject="./src/main/resources">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
-->
<!-- targetPackage:mapper接口dao生成的位置 -->
<!--<javaClientGenerator type="XMLMAPPER" targetPackage="com.mmall.dao" targetProject=".\src\main\java">-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.abudory.server.dao" targetProject="./src/main/java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<table tableName="order_detail" domainObjectName="OrderDetail" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
<table tableName="order_master" domainObjectName="OrderMaster" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
<table tableName="product_category" domainObjectName="ProductCategory" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
<table tableName="product_info" domainObjectName="ProductInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
<table tableName="user_info" domainObjectName="UserInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
<!-- mybatis插件的搭建 -->
</context>
</generatorConfiguration>
新建jdbc.properties
db.driverLocation=D:\\apache-maven-3.5.3-bin\\localRepsoitory\\mysql\\mysql-connector-java\\5.1.46\\mysql-connector-java-5.1.46.jar
db.driverClassName=com.mysql.jdbc.Driver
db.username=root
db.password=root
db.url=jdbc:mysql://localhost/ordering_pro?characterEncoding=utf-8
在application.yml中添加
server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1/ordering_pro
username: root
password: root
mybatis:
mapper-locations: classpath*:/mappers/*.xml
还需要在启动类中添加注解@MapperScan,用来扫描dao
@MapperScan("com.abudory.server.dao")
最后 Maven Projects--------->plugins------->mybatis-generator
二、mybatis-plugin
这是一个能够追踪dao接口和mapper文件里xml的一个插件
1.提供Mapper接口与配置文件中对应SQL的导航
2.提供Mapper接口与配置文件中对应SQL的导航
3.编辑XML文件时自动补全
4.根据Mapper接口, 使用快捷键生成xml文件及SQL标签
5.ResultMap中的property支持自动补全,支持级联(属性A.属性B.属性C)
6.快捷键生成@Param注解
7.XML中编辑SQL时, 括号自动补全
8.XML中编辑SQL时, 支持参数自动补全(基于@Param注解识别参数)
9.自动检查Mapper XML文件中ID冲突
10.自动检查Mapper XML文件中错误的属性值
11.支持Find Usage
12.支持重构从命名
13.支持别名
14.自动生成ResultMap属性
15.快捷键: Option + Enter(Mac) | Alt + Enter(Windows)
效果:点击dao可以追踪到xml,,同理点击xml的sql右边小箭头,可以追踪到dao方法 直接下载该插件即可
三、Mybatis-pageHelper
1. 在pom文件中添加依赖
<!--mybatis pageHelper 分页查询-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.0</version>
</dependency>
2.在启动类添加配置
pageHelper 4.0.x 使用此配置
/**
* @Description: TODO pageHelper 4.0.x 使用此配置
* TODO 配置mybatis的分页插件pageHelper 此配置必须要写
* @Param: []
* @return: com.github.pagehelper.PageHelper
* @Author: ABU
* @Date: 2018/12/19
*/
@Bean
public PageHelper pageHelper() {
System.out.println("开始配置数据分页插件");
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("offsetAsPageNum", "true");
properties.setProperty("rowBoundsWithCount", "true");
properties.setProperty("reasonable", "true");
properties.setProperty("dialect", "mysql"); //配置mysql数据库的方言
pageHelper.setProperties(properties);
return pageHelper;
}
针对 pageHelper 5.1.2 使用此配置
/**
* @Description: TODO 针对 pageHelper 5.1.2 使用此配置
* @Param:
* @return:
* @Author: ABU
* @Date: 2018/12/19
*/
/* 配置mybatis的分页插件pageHelper!!!!!!
@Bean
public PageInterceptor pageInterceptor() {
PageInterceptor pageInterceptor = new PageInterceptor();
Properties properties = new Properties();
properties.setProperty("offsetAsPageNum", "true");
properties.setProperty("rowBoundsWithCount", "true");
properties.setProperty("reasonable", "true");
pageInterceptor.setProperties(properties);
return pageInterceptor;
}*/
3. 具体使用
PageHelper.startPage(pageNum,pageSize);
List<User> list = userMapper.selectAll(0);
PageInfo pageInfo = new PageInfo(list);
// return ServerResponse.createBySuccess(pageInfo);