springboot集成mybatis+通用mapper+mybatis-generator
前言
在java后端开发中,springboot已然成为主流框架为广大程序员所喜爱,因为springboot的极简配置性、与第三方的集成配置真的是做得非常优秀,用起来舒服得不要不要的,因此这一篇文章就来玩一下一些框架插件的集成。
先简单介绍一下每个框架或插件的功能和用途:
mybatis
mybatis是一个不完全的orm框架,支持定制化 SQL、存储过程以及高级映射。优化了JDBC操作访问数据库的同时,保留了由程序员自己定制化编写sql的传统,比较灵活
通用mapper
通用mapper封装了一些简单的对数据库的增删改查操作,减少了程序员编写一些简单的sql语句的麻烦,但比较遗憾的是只支持对单表的操作,即是涉及到多表的联合查询、关联之类的操作都不支持,只得乖乖自己写代码。
mybatis-generator
这个插件可以帮助我们自动生成与数据库表对应的实体类、mapper接口和mapper.xml文件,简化创建过程
创建springboot的maven工程
在idea的初始界面点击Create New Project,选择spring initializer,一路next即可。
完整的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.gjx</groupId>
<artifactId>mybatis_mapper</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mybatis_mapper</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--Mybatis依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--mybatis通用mapper依赖-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.2</version>
</dependency>
<!--数据库连接依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--单元测试依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<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.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>
</project>
集成mybatis
1、引入依赖
因上一步完整的pom.xml中已经引入了mybatis的依赖,此步已经完成,相关依赖请看pom.xml中注释
2、编写application.yml文件
在yml中配置数据库链接,mybatis配置,如下
#端口配置
server:
port: 8088
#jdbc配置
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mppro?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
username: root
password: root
#mybatis配置
mybatis:
#实体类所在包名,mybatis需要设置locations
mapper-locations: classpath:mapper/*Mapper.xml
type-aliases-package: com.gjx.mybatis_mapper.entity
3、创建数据库表
CREATE TABLE `user` (
`id` int(32) NOT NULL AUTO_INCREMENT,
`userName` varchar(32) NOT NULL,
`passWord` varchar(50) NOT NULL,
`realName` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
4、创建UserMapper.xml、User实体类
在resources下创建mapper包,用于存放与dao接口想对应的xml文件,UserMapper.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="com.gjx.mybatis_mapper.dao.UserMapper">
<resultMap id="BaseResultMap" type="com.gjx.mybatis_mapper.entity.User">
<result column="id" jdbcType="INTEGER" property="id" />
<result column="userName" jdbcType="VARCHAR" property="userName" />
<result column="passWord" jdbcType="VARCHAR" property="passWord" />
<result column="realName" jdbcType="VARCHAR" property="realName" />
</resultMap>
<select id="Sel" resultType="com.gjx.mybatis_mapper.entity.User">
select * from user where id = #{id}
</select>
</mapper>
User实体类,放于entity包
package com.gjx.mybatis_mapper.entity;
import org.springframework.stereotype.Repository;
import javax.persistence.*;
/**
* @Author gjx
* @email 13450753745@163.com
* @description
* @Date 2019/11/5
*/
@Repository
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "userName")
private String userName;
@Column(name = "passWord")
private String passWord;
@Column(name = "realName")
private String realName;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", passWord='" + passWord + '\'' +
", realName='" + realName + '\'' +
'}';
}
}
5、controller/service/impl
controller
package com.gjx.mybatis_mapper.controller;
import com.gjx.mybatis_mapper.entity.User;
import com.gjx.mybatis_mapper.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
/**
* @Author gjx
* @email 13450753745@163.com
* @description
* @Date 2019/11/5
*/
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/getUser")
@ResponseBody
public String GetUser(){
return userService.Sel(1).toString();
}
@RequestMapping("/list")
@ResponseBody
public List<User> getAll(){
return userService.getAll();
}
}
service
package com.gjx.mybatis_mapper.service;
import com.gjx.mybatis_mapper.entity.User;
import java.util.List;
public interface UserService {
public User Sel(int id);
List<User> getAll();
}
impl
package com.gjx.mybatis_mapper.service.impl;
import com.gjx.mybatis_mapper.dao.UserMapper;
import com.gjx.mybatis_mapper.entity.User;
import com.gjx.mybatis_mapper.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author gjx
* @email 13450753745@163.com
* @description
* @Date 2019/11/5
*/
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserMapper userMapper;
@Override
public User Sel(int id) {
return userMapper.Sel(id);
}
@Override
public List<User> getAll() {
return userMapper.selectAll();
}
}
6、演示
启动项目后,访问 http://localhost:8088/user/list,结果如下,
集成mybatis成功
集成generator
1、导入依赖
此步省略,在之前已引入完整包
2、创建generatorConfig.xml配置文件
在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>
<!-- defaultModelType="flat" 设置复合主键时不单独为主键创建实体 targetRuntime设置为MyBatis3Simple表示不生成example -->
<context id="MySql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<!-- 生成的POJO实现java.io.Serializable接口 -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
<!--注释-->
<commentGenerator>
<!-- 去掉生成的实体类、dao等文件中的注释 -->
<property name="suppressAllComments" value="true"/>
<!-- 将数据库中表的字段描述信息添加到注释 -->
<property name="addRemarkComments" value="true"/>
<!-- 注释里不添加日期 -->
<property name="suppressDate" value="true"/>
</commentGenerator>
<!-- 数据库连接 -->
<jdbcConnection
driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mppro"
userId="root"
password="root"/>
<!-- 生成POJO对象,并将类放到com.songguoliang.springboot.entity包下 -->
<javaModelGenerator targetPackage="com.gjx.mybatis_mapper.entity" targetProject="src/main/java">
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 生成mapper xml文件,并放到resources下的mapper文件夹下 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"></sqlMapGenerator>
<!-- 生成mapper xml对应dao接口,放到com.songguoliang.springboot.mapper包下-->
<javaClientGenerator targetPackage="com.gjx.mybatis_mapper.dao" targetProject="src/main/java" type="XMLMAPPER"></javaClientGenerator>
<!-- table标签可以有多个,至少一个,tableName指定表名,可以使用_和%通配符 -->
<table tableName="t_room_use">
<!-- 是否只生成POJO对象 -->
<property name="modelOnly" value="false"/>
<!-- 数据库中表名有时我们都会带个前缀,而实体又不想带前缀,这个配置可以把实体的前缀去掉
注意:匹配规则时要注意首字母必须为大写
-->
<domainObjectRenamingRule searchString="^T" replaceString=""/>
</table>
</context>
</generatorConfiguration>
3、创建一个数据库表t_room_use
CREATE TABLE `t_room_use` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键Id',
`floor_code` varchar(255) DEFAULT NULL COMMENT '楼层编码',
`which_floor` varchar(255) DEFAULT NULL COMMENT '所在楼层',
`room_number` varchar(255) DEFAULT NULL COMMENT '房间号',
`area` decimal(10,2) DEFAULT NULL COMMENT '面积',
`application` varchar(255) DEFAULT NULL COMMENT '用途',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4384 DEFAULT CHARSET=utf8;
4、pom.xml文件添加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>
5、运行插件
如下
运行后即生成了如下类和xml
集成generator成功
集成通用mapper
1、修改application.xml文件
将如下内容复制粘贴
#通用mapper配置
mapper:
#公用接口类路径
mappers: com.gjx.mybatis_mapper.baseDao.IBaseDao
identity: MYSQL
2、导入依赖
此步省略
3、在需要使用通用mapper的mapper接口中继承IBaseDao
@Respository
public interface UserMapper extends IBaseDao<User>{}
4、在实体类中添加相关注解
/**
* 必须加@Repository和@Table
* 以及在属性中标明主键注解,和@Column
*/
@Repository
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "userName")
private String userName;
@Column(name = "passWord")
private String passWord;
@Column(name = "realName")
private String realName;
}
5、测试
创建UserService后在方法中调用userMapper的方法,可以看到在userMapper中没有写方法然而却多了很多方法,这些都是通用mapper自带的方法,减少我们编写一些简单的增删改查方法
集成通用mapper成功