3、Spring Boot 2.x整合Mybatis并且实现单表的增删除改查

上一篇创建了一个最简单的Spring Boot 2.x项目,算是有了一个初步的认识。

这一篇我们在上一篇项目的基础上,实现以下目标:

1、项目中整合Mybatis Generator进行mapper相关文件的自动生成;

2、整合Mybatis连接数据库并且实现单表的增删改查;

3、并且使用Sping Boot 2.x默认的HikariCP作为数据库连接池;

一、引入相关依赖

在pom.xml中添加如下依赖项:

 


	org.springframework.boot
	spring-boot-starter-jdbc


	mysql
	mysql-connector-java


	org.mybatis.spring.boot
	mybatis-spring-boot-starter
	1.3.2

并且排除tomcat的默认jdbc;在spring-boot-starter-web依赖进行修改,如下


	org.springframework.boot
	spring-boot-starter-web
	
		
		
			org.apache.tomcat
			tomcat-jdbc
		
	

 

只需要导入spring-boot-starter-jdbc依赖springboot就默认使用Hikari作为数据库连接池了

二、创建数据库表

数据库名称:bgms

用户名:bgms

密码:bgms

我们创建的表的结构如下:

CREATE TABLE `tb_user_info` (
  `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID号,自动增长',
  `USER_NAME` varchar(32) DEFAULT NULL COMMENT '用户名',
  `PASSWORD` varchar(64) DEFAULT NULL COMMENT '密码',
  `AGE` int(11) DEFAULT NULL COMMENT '年龄',
  `EMAIL` varchar(128) DEFAULT NULL COMMENT '邮箱',
  `CREATE_TIME` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

三、整合mybatis-generator并生成mybatis相关文件(实体类,映射文件等)

为了使实体类,映射文件以及数据库操作相关的类自动生成,我们使用mybatis-generator进行生成,这里我们对其进行整合

1、准备工作

在com.aicode.bgms下分别创建mapper、model目录;

在resources下分别创建mapping/generator目录;

将generatorConfig.xml文件复制到generator目录下:

generatorConfig.xml代码如下:




    
    
    
        
            
            
            
        
        
        
        
        
            
        
        
        
            
            
        
        
        
            
        
        
        
            
        
        
        

 

 修改mysql连接池使用的jar包地址为你自己本地的地址,修改classPathEntry中的location;

修改其他相关内容,包括model路径,mapping路径,dao文件路径以及数据库表名和对应要生成的类名。

2、在pom.xml中的下添加mybatis-generator插件;



	org.mybatis.generator
	mybatis-generator-maven-plugin
	1.3.2
	
                ${basedir}/src/main/resources/generator/generatorConfig.xml
		true
		true
	

3、在application.properties中添加如下配置内容

 

spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp

server.port=8080

# datasource start
#数据库连接相关配置
spring.datasource.url=jdbc:mysql://localhost:3306/bgms?zeroDateTimeBehavior=convertToNull&autoReconnect=true&autoReconnectForPools=true&useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=bgms
spring.datasource.password=bgms
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# Hikari will use the above plus the following to setup connection pooling
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=15
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=DatebookHikariCP
spring.datasource.hikari.max-lifetime=1765000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1
# datasource end

# mybatis start
# mybatis日志配置
logging.level.com.battcn=DEBUG
#注意:一定要对应mapper映射xml文件的所在路径
mybatis.mapper-locations=classpath:mapping/*.xml
mybatis.type-aliases-package=com.aicode.bgms.model
# 驼峰命名规范 如:数据库字段role_code,实体字段要写成 roleCode
mybatis.configuration.map-underscore-to-camel-case=true
# mybatis end

注册上面的mysql驱动类已经变为com.mysql.cj.jdbc.Driver,而不是原来的com.mysql.jdbc.Driver,因为我们引入mysql的jar包依赖时没有标注版本号,查看spring boot的使用版本为,如下图:

3、Spring Boot 2.x整合Mybatis并且实现单表的增删除改查_第1张图片

另外上面配置中,我们采用spring boot推荐的HiKariCP进行数据库连接。HiKariCP起源于BoneCP。号称性能最好,可以完美地PK掉其他连接池。参考地址:

https://jolbox.com/benchmarks.html

网上对HiKariCP更是好评如潮。

英文不太好的同学也可以参考网友的博文:

https://blog.csdn.net/clementad/article/details/46928621

https://blog.csdn.net/zxl315/article/details/80420688

且不论HiKariCP是否是真的有说的那么优秀吧,这里我们也为了简单,暂且使用它。

4、Intellij Idea 中mybatis-generator启动配置

在Idea中点击依次点击,菜单Run——〉Edit Configurations...

进入如下Run/Debug Run Configurations界面,然后点击左上角的"+",然后选择maven

 

3、Spring Boot 2.x整合Mybatis并且实现单表的增删除改查_第2张图片

 

 如上图所示,Name输入generator,Command line输入:

mybatis-generator:generate -e

然后点击"ok"按钮;

5、生成实体类及映射文件

运行上一步配置的generator,此时会生成mybatis相关的实体类及映射文件,生成后,如下图所示:

 

3、Spring Boot 2.x整合Mybatis并且实现单表的增删除改查_第3张图片

可以看到新生成的四个文件:UserInfoMapper.java、UserInfoExample.java、UserInfo.java、UserInfoMapper.xml;

此四个文件为自动生成,这里不再贴出,浪费篇幅;

另外,有时我们可能需要自己写一些操作数据库的mapper方法,这里为了不修改自动生成的代码,我们把自行编写的dao方法放在extra目录下xxxxExtraMapper.java中,如下图:

 

3、Spring Boot 2.x整合Mybatis并且实现单表的增删除改查_第4张图片

UserInfoExtraMapper.java

package com.aicode.bgms.mapper.extra;

import com.aicode.bgms.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface UserInfoExtraMapper {

    UserInfo findUserInfoByUserName(@Param("userName") String userName);
}

UserInfoExtraMapper.xml

 




    
        
        
        
        
        
        
    

    
        ID, USER_NAME, PASSWORD, AGE, EMAIL, CREATE_TIME
    

    
    

如果有自定义的pojo类,可以放在model目录下的extra目录下,命名方式参考其他扩展文件。

四、创建Service相关类

1、创建Service接口类

在com.aicode.bgms下创建service包,然后创建UserInfoSerevice.java接口类,如下:

package com.aicode.bgms.service;

import com.aicode.bgms.model.UserInfo;
import com.aicode.bgms.model.UserInfoExample;

import java.util.List;

public interface UserInfoService {

    List findUserListByExample(UserInfoExample example);

    List findAll();

    UserInfo findUserInfoByUserName(String userName);

    UserInfo getUserInfoById(Integer id);

    int addUserInfo(UserInfo userInfo);

    int updateUserInfo(UserInfo userInfo);

    int removeUserInfoById(Integer id);
}

2、创建Service实现类

在com.aicode.bgms.service包下创建impl包,然后创建UserInfoServiceImpl.java类

 

package com.aicode.bgms.service;

import com.aicode.bgms.mapper.UserInfoMapper;
import com.aicode.bgms.mapper.extra.UserInfoExtraMapper;
import com.aicode.bgms.model.UserInfo;
import com.aicode.bgms.model.UserInfoExample;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserInfoServiceImpl implements UserInfoService {

    @Autowired
    private UserInfoMapper userInfoMapper;

    @Autowired
    private UserInfoExtraMapper userInfoExtraMapper;

    @Override
    public List findUserListByExample(UserInfoExample example) {
        return userInfoMapper.selectByExample(example);
    }

    @Override
    public List findAll() {
        return userInfoMapper.selectByExample(new UserInfoExample());
    }

    @Override
    public UserInfo findUserInfoByUserName(String userName) {
        return userInfoExtraMapper.findUserInfoByUserName(userName);
    }

    @Override
    public UserInfo getUserInfoById(Integer id) {
        return userInfoMapper.selectByPrimaryKey(id);
    }

    @Override
    public int addUserInfo(UserInfo userInfo) {
        return userInfoMapper.insertSelective(userInfo);
    }

    @Override
    public int updateUserInfo(UserInfo userInfo) {
        return userInfoMapper.updateByPrimaryKeySelective(userInfo);
    }

    @Override
    public int removeUserInfoById(Integer id) {
        return userInfoMapper.deleteByPrimaryKey(id);
    }
}

 

这个时候,在代码中自动装配UserInfoMapper和UserInfoExtraMapper时,Idea会报红,但不影响正常运行,如果您想去掉,可以进行如下设置,依次进行如下操作:

File—〉Settings—〉Inspections—〉右侧找到Spinrg—〉Spring Core —〉Code—〉Autowiring for Bean Class,将右部的Severity设置为Warning即可。

3、Spring Boot 2.x整合Mybatis并且实现单表的增删除改查_第5张图片 五、编辑控制层类

在com.aicode.bgms.controller包下创建UserInfoController.java类

package com.aicode.bgms.controller;

import com.aicode.bgms.model.UserInfo;
import com.aicode.bgms.service.UserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class UserInfoController {

    @Autowired
    private UserInfoService userInfoService;

    @GetMapping("/list")
    public List list(){
        return userInfoService.findAll();
    }

    @PostMapping("/add")
    public int add(UserInfo userInfo){
        return userInfoService.addUserInfo(userInfo);
    }

    @GetMapping("/get/{id}")
    public UserInfo get(@PathVariable("id") Integer id){
        return userInfoService.getUserInfoById(id);
    }

    @PatchMapping("/edit")
    public UserInfo modify(UserInfo userInfo) {
        Integer id = userInfo.getId();
        userInfoService.updateUserInfo(userInfo);
        UserInfo userInfoTmp = userInfoService.getUserInfoById(id);
        return userInfoTmp;
    }

    @DeleteMapping("/del/{id}")
    public int del(@PathVariable("id") Integer id){
        return userInfoService.removeUserInfoById(id);
    }

}

 

代码比较简单,没有添加多余的注释。

这里为了测试接口方便采用了注解@RestController。后面要返回页面时,我们再修改为@Controller

关于@RestController与@Controller的区别如下:

@RestController注解相当于@ResponseBody + @Controller合在一起的作用

1) 、如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。

2) 、如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。

    如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

以上代码是按照RESTful的方式进行构建的。

相关注解说明:

  • @GetMapping,处理 Get 请求
  • @PostMapping,处理 Post 请求
  • @PatchMapping,用于更新资源,相比较PutMapping要传全部数据,patch只需传部分属性即可
  • @DeleteMapping,处理删除请求
  • @PatchMapping,用于更新部分资源

文件中代码如下:

@GetMapping(value="/xxx")
等价于
@RequestMapping(value = "/xxx",method = RequestMethod.GET)

@PostMapping(value="/xxx")
等价于
@RequestMapping(value = "/xxx",method = RequestMethod.POST)

@PutMapping(value="/xxx")
等价于
@RequestMapping(value = "/xxx",method = RequestMethod.PUT)

@DeleteMapping(value="/xxx")
等价于
@RequestMapping(value = "/xxx",method = RequestMethod.DELETE)

@PatchMapping(value="/xxx")
等价于
@RequestMapping(value = "/xxx",method = RequestMethod.PATCH)

请求 地址 说明

get /list 获取所有用户信息

post /add 创建一个用户信息

patch /edit 修改用户信息

get /get/{id} 根据 ID 获取用户信息

delete /del/{id} 根据 ID 删除用户信息

好了,剩下的代码可以自己分析了,这里只是为了方便进行RESTful测试,没有对代码进行详细编写。

测试

启动类配置

需要在启动类中添加如下注解:

@MapperScan(basePackages = "com.aicode.bgms.mapper")

方可正常启动。

 

你可能感兴趣的:(Spring,Boot)