SpringBoot整合MyBatis/Plus

1.SpringBoot整合MyBatis

1.1整合案例

需求:整合SpringBoot和Mybatis,向数据库中查询数据。

项目结构:

1.1.1创建数据库和表

-- 创建数据库
DROP DATABASE IF EXISTS springboot_mybatis;
CREATE DATABASE springboot_mybatis;
USE springboot_mybatis; -- 创建表
CREATE TABLE monster(
`id` INT NOT NULL AUTO_INCREMENT,
`age` INT NOT NULL,
`birthday` DATE DEFAULT NULL,
`email` VARCHAR(255) DEFAULT NULL,
`gender` CHAR(1) DEFAULT NULL,
`name` VARCHAR(255) DEFAULT NULL,
`salary` DOUBLE NOT NULL,
PRIMARY KEY(`id`)
)CHARSET=utf8;

插入测试数据:

1.1.2引入依赖

在pom.xml中引入mybatis及相关的依赖

<!--导入SpringBoot父工程-->
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.5.3</version>
</parent> <dependencies>
<!--web starter-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mybatis starter-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<!--mysql驱动,使用版本仲裁-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--配置处理器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--springboot test starter-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!--druid 数据源,也可以使用默认的数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.17</version>
</dependency>
</dependencies>

1.1.3配置数据源

在resource/application.yml中配置数据源,并完成SpringBoot项目启动测试

spring:
datasource: #配置数据源
url: jdbc:mysql://localhost:3306/springboot_mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
server:
port: 9090

创建配置类,设置Druid数据源:

这里如果引入的依赖是druid-starter,可以直接在yml文件中配置

package com.li.springboot.mybatis.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; /**
* @author 李
* @version 1.0
*/
@Configuration
public class DruidDataSourceConfig {
@ConfigurationProperties("spring.datasource")
@Bean
public DataSource dataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
}

1.1.4指定mapper.xml路径

在application.yml文件中配置mybatis,指定要扫描的mapper.xml文件的路径

在ssm整合中,这一步也是在applicationContext.xml容器文件中指定

mybatis:
mapper-locations: classpath:mapper/*.xml #指定要扫描的mapper.xml路径

1.1.5代码实现

(1)创建JavaBean--Monster.java,用于表映射

package com.li.springboot.mybatis.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor; import java.util.Date; /**
* @author 李
* @version 1.0
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Monster {
private Integer id;
private Integer age;
private Date birthday;
private String email;
private String name;
private String gender;
private Double salary;
}

(2)创建mapper接口,用于声明方法

package com.li.springboot.mybatis.mapper;

import com.li.springboot.mybatis.bean.Monster;
import org.apache.ibatis.annotations.Mapper; /**
* @author 李
* @version 1.0
* 使用注解@mapper,就可以将mapper接口对象注入容器
*/
@Mapper//除了使用注解,也可以直接指定要扫描的包
public interface MonsterMapper {
//根据id查询数据记录
public Monster getMonsterById(Integer id);
}

(3)在resource/mapper目录下创建接口对应的mapper.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.li.springboot.mybatis.mapper.MonsterMapper">
<!--配置getMonsterById方法-->
<select id="getMonsterById" resultType="com.li.springboot.mybatis.bean.Monster">
SELECT *
FROM `monster`
WHERE `id` = #{id}
</select>
</mapper>

(4)进行测试:

如果要写测试类,一定要写主程序

package com.li.springboot.mybatis;

import com.li.springboot.mybatis.bean.Monster;
import com.li.springboot.mybatis.mapper.MonsterMapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; /**
* @author 李
* @version 1.0
*/
@SpringBootTest
public class ApplicationTest {
@Resource
private MonsterMapper monsterMapper;//注入的实际上是它的代理类 //测试MonsterMapper接口是否可用
@Test
public void getMonsterMapper() {
Monster monster = monsterMapper.getMonsterById(1);
System.out.println("monster=" + monster);
}
}

测试结果:成功从数据库中获取信息。

接下来的Service、Controller层和ssm没有多大区别,这里不再赘述

1.1.6补充-对mybatis的配置

  • SpringBoot对mybatis的配置有两种方式:

(1)使用传统方式配置,即使用mybatis-config.xml。不过要先在application.yml文件中指定mybatis配置文件的路径。

mybatis:
config-location: #指定mybatis-config.xml文件的路径

(2)直接使用application.yml文件进行配置,例如:

mybatis:
type-aliases-package: com.li.springboot.mybatis.bean #指定别名
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #指定标准的日志输出
  • 两种方式的选择:

    1. 如果配置比较简单,可以在yml中直接配置
    2. 如果配置内容较多,可以单独地做一个配置文件

1.2注意事项和使用细节

SpringBoot中日期默认是格林尼治标准时间,和中国标准时相差8小时,可以通过注解@JsonFormat解决此问题:

其中pattern表示日期格式,timezone表示时区,GMT是格林尼治时间

2.SpringBoot整合MyBatis-Plus

2.1MyBatis-Plus基本介绍

MyBatisPlus官方文档

  1. MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。

  2. 强大的CRUD操作:内置了通用Mapper、通用Service,通过少量配置即可实现单表大部分CRUD操作,更有强大的条件构造器,满足各类需求。

2.2整合案例

需求:整合SpringBoot和MyBatis-Plus,向数据库中查询数据。

2.2.1创建数据库和表

略,表结构同上。

2.2.2引入依赖

pom.xml文件中引入mybatis-plus starter和其他依赖。

<!--导入SpringBoot父工程-->
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.5.3</version>
</parent> <!--引入必要依赖-->
<dependencies>
<!--web starter-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <!--MyBatis-plus starter-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency> <!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency> <!--配置处理器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency> <!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency> <!--springboot test starter-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency> <!--druid 数据源,也可以使用默认的数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.17</version>
</dependency>
</dependencies>

2.2.3配置数据源

(1)在resource/application.yml中配置数据源

server:
port: 9090
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot_mybatisplus?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: 123456

(2)创建配置类,设置Druid数据源:这一步和mybatis整合相同,见上1.1.3操作

2.2.4代码实现

(1)创建JavaBean--Monster.java,用于表映射(同1.1.4的操作,略)

(2)创建mapper接口,用于声明方法

相比于mybatis需要自己声明方法,MP提供了一个通用的BaseMapper,有很多通用的方法,通过继承,我们就可以直接使用,简化开发

package com.li.springboot.mybatisplus.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.li.springboot.mybatisplus.bean.Monster;
import org.apache.ibatis.annotations.Mapper; /**
* @author 李
* @version 1.0
* BaseMapper是MyBatisPlus内置的通用Mapper,提供了很多的方法
* 如果它提供的方法不能满足业务需求,我们可以在这里开发新的方法
*/
@Mapper
public interface MonsterMapper extends BaseMapper<Monster> { }

如果在这一步没有自定义的接口方法,就不需要使用Mapper.xml文件实现声明

(3)开发Service

MP也提供了一个通用的Service接口,里面也提供了很多方法

package com.li.springboot.mybatisplus.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.li.springboot.mybatisplus.bean.Monster; /**
* @author 李
* @version 1.0
* 1.在mybatis中,是在MonsterService声明方法,然后在其实现类实现
* 2.而在MyBatis-Plus中,我们可以通过继承父接口:IService,从而使用里面的很多方法
* 3.如果它提供的方法不能满足业务需求,再开发新的方法
*/
@Service
public interface MonsterService extends IService<Monster> {
}

注意:如果在业务Service接口声明了自定义方法,通常会创建一个实现类实现接口方法,问题是:由于业务Service接口继承了IService接口,那么业务Service的实现类要同时实现两个接口的方法才行,非常麻烦。

解决方案是:业务实现类通过继承ServiceImpl类解决问题。ServiceImpl类是MyBatis-Plus提供的一个类,它已经实现了IService的方法。这样业务实现类就只需要实现业务Service自定义的方法。

业务实现类MonsterServiceImpl:

package com.li.springboot.mybatisplus.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.li.springboot.mybatisplus.bean.Monster;
import com.li.springboot.mybatisplus.mapper.MonsterMapper;
import com.li.springboot.mybatisplus.service.MonsterService; /**
* @author 李
* @version 1.0
*/
public class MonsterServiceImpl
extends ServiceImpl<MonsterMapper, Monster>
implements MonsterService {
//通过继承ServiceImpl,这个实现类中就只用实现业务Service自定义的方法
}

controller层的实现和mybatis的大同小异,这里就不写了

2.2.5补充-对MP的配置

  • MyBatis-Plus的配置和MyBatis配置几乎没有区别,在SpringBoot中,同样可以通过如下方式进行配置:

(1)使用传统的配置文件配置,不过要先在application.yml文件中指定配置文件的路径:

mybatis-plus:
config-location: xxx #指定mp配置文件的路径

(2)直接使用application.yml文件进行配置,例如:

mybatis-plus:
configuration: # 进行mybatis-plus配置,配置项和mybatis一样
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  • @MapperScan注解(修饰于主程序)可以替代@Mapper(修饰于mapper接口),basePackages属性可以接收多个值

2.3注意事项和使用细节

MyBatis-Plus的注解

(1)@TableName

描述:表名注解,标识实体类对应的表。如果实体类的类名和表名一致,则该注解可以省略,否则需要通过@TableName指定表名

(2)为了开发方便,IDEA可以安装MyBatisX插件,参考文档。该插件具有如下功能:XML 跳转、生成代码(需先在 idea 配置 Database 配置数据源)、重置模板、JPA 提示(生成新增、生成查询、生成修改、生成删除)

day13-SpringBoot整合MyBatis/Plus的更多相关文章

  1. SpringBoot整合Mybatis之项目结构、数据源

    已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结. 之前在网上找过不少关于springboot的教程,都是一些比 ...

  2. SpringBoot整合Mybatis【非注解版】

    接上文:SpringBoot整合Mybatis[注解版] 一.项目创建 新建一个工程 ​ 选择Spring Initializr,配置JDK版本 ​ 输入项目名 ​ 选择构建web项目所需的state ...

  3. SpringBoot整合Mybatis注解版---update出现org.apache.ibatis.binding.BindingException: Parameter 'XXX' not found. Available parameters are [arg1, arg0, param1, param2]

    SpringBoot整合Mybatis注解版---update时出现的问题 问题描述: 1.sql建表语句 DROP TABLE IF EXISTS `department`; CREATE TABL ...

  4. springboot学习随笔(四):Springboot整合mybatis(含generator自动生成代码)

    这章我们将通过springboot整合mybatis来操作数据库 以下内容分为两部分,一部分主要介绍generator自动生成代码,生成model.dao层接口.dao接口对应的sql配置文件 第一部 ...

  5. springboot整合mybatis出现的一些问题

    springboot整合mybatis非常非常的简单,简直简单到发指.但是也有一些坑,这里我会详细的指出会遇到什么问题,并且这些配置的作用 整合mybatis,无疑需要mapper文件,实体类,dao ...

  6. springBoot整合mybatis、jsp 或 HTML

    springBoot整合mybatis.jsp Spring Boot的主要优点: 1:  为所有Spring开发者更快的入门: 2:  开箱即用,提供各种默认配置来简化项目配置: 3:  内嵌式容器 ...

  7. SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)

    1.概念:SpringBoot 整合 MyBatis 2.背景 SpringBoot 得到最终效果是一个简化到极致的 WEB 开发,但是只要牵扯到 WEB 开发,就绝对不可能缺少数据层操作,所有的开发 ...

  8. SpringBoot整合Mybatis完整详细版二:注册、登录、拦截器配置

    接着上个章节来,上章节搭建好框架,并且测试也在页面取到数据.接下来实现web端,实现前后端交互,在前台进行注册登录以及后端拦截器配置.实现简单的未登录拦截跳转到登录页面 上一节传送门:SpringBo ...

  9. SpringBoot整合Mybatis完整详细版

    记得刚接触SpringBoot时,大吃一惊,世界上居然还有这么省事的框架,立马感叹:SpringBoot是世界上最好的框架.哈哈! 当初跟着教程练习搭建了一个框架,传送门:spring boot + ...

  10. 【SpringBoot系列1】SpringBoot整合MyBatis

    前言: 一直看网上说SpringBoot是解锁你的配置烦恼,一种超级快速开发的框架.一直挺想学的,正好最近也有时间,就学了下 这个是SpringBoot整合MyBatis的一个教程,用了阿里的drui ...

随机推荐

  1. 如何在matlab中快速绘制一个函数的图像

    在malab绘制曲线图,并在x,y轴上加上说明 直接贴代码 clear,clck=1:1:10;y1=pi./atan(sqrt(k))-1;plot(k,y1)xlabel('Rz');ylabel ...

  2. MyBatis Plus 设置ID的自增 /非自增时遇到的问题

    非自增时 自己设置ID 其他可参考------>主键策略的几种类型 https://blog.csdn.net/hxyascx/article/details/105401767

  3. JavaScript 之 数组在内存中的存储方式(连续或不连续)

    最近在纠结一个问题,就是数组这个引用类型在JavaScript 中是不是和其他语言一样开辟了一个连续的内存来存储,但是在JS 中每个元素又可以是不同的类型,这就导致了没办法用一个相同大小的存储,所以数 ...

  4. phpExcel常用方法详解

    phpExcel常用方法详解[附有php导出excel加超级链接] 发表于4年前(2012-07-20 12:57) 阅读(510) | 评论(0) 0人收藏此文章, 我要收藏 赞0 http://w ...

  5. css中双冒号和单冒号区别

    :--是指的伪类 ::--是指的伪元素 1.字面意思: 伪类,1.css中有类选择器,某些元素并未定义类名,就可以通过伪类赋予样式,如:[:nth-child(n)]:2.伪类可以应用于元素执行某种状 ...

  6. 证书profile 申请

    ios  云打包   证书 和密码  在之前的笔记当中已申请好 证书profile 文件申请 登录苹果开放平台 申请前要添加身份,设备,设备那需要填写udid 方法链接https://www.jian ...

  7. idea设置svn忽略文件

    第一步: 第二步: 第三步:

  8. AutoCAD2018

    「AutoCAD_2018_SC.exe」https://www.aliyundrive.com/s/GvpR9yg6TWg 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线 ...

  9. 20200925--矩阵乘法(奥赛一本通P94 多维数组)

    计算两个矩阵的乘法.n*m阶的矩阵A乘以m*k阶的矩阵B得到的矩阵C是n*k阶的,且C[i][j]=A[i][0]*B[0][j]+A[i][1]*B[1][j]+...+A[i][m-1]*B[m- ...

  10. 使用python-docx提取word中的表格

    提取表格 import docx from docx import Document #导入库 path = '123.docx' #文件路径 document = Document(path) #读 ...