Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件。
官网:http://mybatis.org/generator/
1.导入依赖
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
。。。。。。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--mybatis自动生成代码插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<!-- 是否覆盖,true表示会替换生成的JAVA文件,false则不覆盖 -->
<overwrite>true</overwrite>
</configuration>
<dependencies>
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
2.配置yml,数据库配置
spring:
datasource:
username: root
password: face
url: jdbc:mysql://192.168.8.83:3306/facelog?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
3.配置generatorConfig.xml
指定表及实体类路径、dao接口路径、射文件路径等。
每次更改三个地址生产地址(targetProject),然后再更改 生成的结构目录 以及 数据库(targetPackage+table )就可以了
<?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>
<!-- defaultModelType="flat" 设置复合主键时不单独为主键创建实体 -->
<context id="MySql" defaultModelType="flat">
<!-- 生成的POJO实现java.io.Serializable接口 -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
<!--注释-->
<commentGenerator>
<!-- 将数据库中表的字段描述信息添加到注释 -->
<property name="addRemarkComments" value="true"/>
<!-- 注释里不添加日期 -->
<property name="suppressDate" value="true"/>
</commentGenerator>
<!-- 数据库连接 -->
<!--jdbc:mysql://localhost:3306/表名-->
<!--密码记得修改-->
<jdbcConnection
driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/dgfz"
userId="root"
password="201314"/>
<!-- 生成POJO对象,并将类放到com.songguoliang.springboot.entity包下 -->
<javaModelGenerator targetPackage="com.example.testgenerator.entity" targetProject="src/main/java"></javaModelGenerator>
<!-- 生成mapper xml文件,并放到resources下的mapper文件夹下 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"></sqlMapGenerator>
<!-- 生成mapper xml对应dao接口,放到com.songguoliang.springboot.mapper包下-->
<javaClientGenerator targetPackage="com.example.testgenerator.mapper" targetProject="src/main/java" type="XMLMAPPER"></javaClientGenerator>
<!-- table标签可以有多个,至少一个,tableName指定表名,可以使用_和%通配符 -->
<table tableName="sys_user">
<!-- 是否只生成POJO对象 -->
<property name="modelOnly" value="false"/>
<!-- 数据库中表名有时我们都会带个前缀,而实体又不想带前缀,这个配置可以把实体的前缀去掉 -->
<domainObjectRenamingRule searchString="^Sys" replaceString=""/>
</table>
<table tableName="sys_app">
<!-- 是否只生成POJO对象 -->
<property name="modelOnly" value="false"/>
<!-- 数据库中表名有时我们都会带个前缀,而实体又不想带前缀,这个配置可以把实体的前缀去掉 -->
<domainObjectRenamingRule searchString="^Sys" replaceString=""/>
</table>
</context>
</generatorConfiguration>
这边dtd可能会报错
把报错的dtd复制过来
4.运行插件
来生成配置文件里面定义的 各种实体类和实体类的dao接口,以及dao配文
5.实体模板类的使用
不仅仅生成实体类,还会生成实体模板类。那实体模板类的使用
https://blog.csdn.net/zhemeban/article/details/71901759
实体模板类的功能 就是 条件查询。
第一步:new 一个实体模板类实例,如XXXexample
第二步:通过example创建Criteria对象,用来存储条件 ,如:Criteria criteria = example.createCriteria();
第三步:dao接口实现类对象 调用 selectByExample(criteria ),来实现查询的方法
@Test
public void selectByExample(){
//1.创建Example对象:封装所有需要的条件
FactoryExample example = new FactoryExample();
//2.通过Example创建Critera对象,用于存储条件
FactoryExample.Criteria criteria = example.createCriteria();
//3.1 factory_name=?
//criteria.andFactoryNameEqualTo("测试工厂2号");
//3.2 factory_name like ?
//criteria.andFactoryNameLike("%工厂%");
//3.3 factory_name like ? and ctype = '1'
criteria.andFactoryNameLike("%工厂%");
List<Factory> list = factoryDao.selectByExample(example);
for(Factory f:list){
System.out.println(f);
}
}
}
6. 插件
https://blog.csdn.net/weixin_43245066/article/details/119860351
7. mybatis的拦截器
https://blog.csdn.net/beiduofen2011/article/details/123979628