springboot 整合mybatis_SpringBoot整合Mybatis、MybatisPuls

文末视频讲解


SpringBoot的版本是2.2.0

一、整合Mybatis

1-1、引入pom文件

  <dependency>     <groupId>mysqlgroupId>     <artifactId>mysql-connector-javaartifactId>     <version>8.0.19version> dependency>  <dependency>     <groupId>com.alibabagroupId>     <artifactId>druid-spring-boot-starterartifactId>     <version>1.1.23version> dependency>  <dependency>     <groupId>org.mybatis.spring.bootgroupId>     <artifactId>mybatis-spring-boot-starterartifactId>     <version>2.1.3version> dependency>

1-2、添加application.yml配置文件

添加MySql配置文件
spring:    datasource:        type: com.alibaba.druid.pool.DruidDataSource        driver-class-name: com.mysql.cj.jdbc.Driver        url: jdbc:mysql://ip:prot/database?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=UTC        username: root        password: 123456        dbcp2:            min-idle: 5                                 # 数据库连接池最小维持连接数            initial-size: 5                            # 初始连接数            max-total: 5                               # 最大连接数            max-wait-millis: 200                      # 等待链接获取的最大超时时间
添加Mybatis配置文件
mybatis:    type-aliases-package: com.xdx97.frame         # 所有Entity别名类所在包    mapper-locations: classpath:mappers/**/*Mapper.xml      # mapper映射文件 - classpath:mybatis/mapper/**/*.xml

1-3、测试

Frame
public class Frame {    private Integer id;    private String name;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}
TestMapper
import com.xdx97.frame.bean.Frame;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Param;@Mapperpublic interface TestMapper{    Frame selectById(@Param("idq") int id);}
TestMapper.xml
<?xml version="1.0" encoding="UTF-8"?>        <mapper namespace="com.xdx97.frame.mapper.TestMapper"><select id="selectById" parameterType="java.lang.Integer" resultType="com.xdx97.frame.bean.Frame">        SELECT id,name FROM frame WHERE id = #{idq}    select>mapper>
TestController
import com.xdx97.frame.bean.Frame;import com.xdx97.frame.mapper.TestMapper;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class TestController {        @Autowired    private TestMapper testMapper;    @GetMapping("/test")    public Frame fun(){        return testMapper.selectById(1);    }}

二、整合Mybatis-Plus

2-1、引入pom

  <dependency>     <groupId>com.baomidougroupId>     <artifactId>mybatis-plus-boot-starterartifactId>     <version>3.2.0version> dependency>

2-2、修改yml文件

mybatis:  type-aliases-package: com.xdx97.frame         # 所有Entity别名类所在包mybatis-plus:  mapper-locations: classpath:mappers/**/*Mapper.xml      # mapper映射文件 - classpath:mybatis/mapper/**/*.xml
2-3、修改TestMapper

继承BaseMapper

import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.xdx97.frame.bean.Frame;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Param;@Mapperpublic interface TestMapper extends BaseMapper {    Frame selectById(@Param("idq") int id);}

这样,baseMapper里面的方法我们就可以直接使用了

c4d7cfeac3c543c11245b28b2800a53b.png

三、其它

3-1、如果你需要用到枚举,那么你需要多配置一个handle

配置位置如下,具体handle如果写,百度一下

mybatis-plus:  mapper-locations: classpath:mappers/**/*Mapper.xml      # mapper映射文件 - classpath:mybatis/mapper/**/*.xml  type-handlers-package:
3-2、如果引入Mbatis-Plus后出现了如下异常
Invalid bound statement (not found):

如果你的xml等一些配置关联没有写错的话,那么请考虑下面这种情况

  • 如果引用mybatis-plus-boot-starter 依赖,需要配置 mybatis-plus.mapper-locations

  • 如果引用mybatis-plus 依赖,需要配置 mybatis.mapper-locations


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS 开发中遇到的问题

1. 关于纠结很久的KVO崩溃问题&#xff0c;其真正原因是&#xff0c;在删除roomItem的KVO之前,将这个对象已经赋值为nil,所以实际上并没有删除他的observer&#xff0c;因此而崩溃&#xff1b;长时间纠结的原因是受.cxx_destruct影响了思路 2.拷贝block 因为block变量默认是声明…

为旧版代码创建存根–测试技术6

任何阅读此博客的人都可能已经意识到&#xff0c;目前我正在开发一个包含大量旧代码的项目&#xff0c;这些旧代码庞大&#xff0c;扩展且编写时从未进行过任何测试。 在使用此遗留代码时&#xff0c;有一个行为异常的类非常普遍&#xff0c;整个团队都一次又一次地犯错。 为了…

C学习杂记(一)常见误会

一、sizeof是关键字&#xff0c;不是函数。 二、strlen是函数。

python性能解决_我们如何发现并解决Python代码中性能下降的问题

Python部落(python.freelycode.com)组织翻译&#xff0c;禁止转载&#xff0c;欢迎转发。 作者&#xff1a;Omer Lachish 最近&#xff0c;我们已经开始使用RQ库代替Celery库作为我们的任务运行引擎。第一阶段&#xff0c;我们只迁移了那些不直接进行查询工作的任务。这些任务包…

easyui $.parser.parse 页面重新渲染

一些dom元素是动态拼接上的easui的样式&#xff0c;由于页面已经渲染过了&#xff0c;所以需要手动执行渲染某个部件或者整个页面 $.parser.parse(); // parse all the page $.parser.parse(#cc); // parse the specified node $.parser.parse($("#grid").parent());…

Java EE6装饰器:在注入时装饰类

软件中常见的设计模式是装饰器模式 。 我们上一堂课&#xff0c;然后在它周围包装另一堂课。 这样&#xff0c;当我们调用类时&#xff0c;我们总是在到达内部类之前经过周围的类。 Java EE 6允许我们通过CDI创建装饰器&#xff0c;作为其AOP功能的一部分。 如果我们想实现仍然…

C语言代码规范(六)浮点型变量逻辑比较

无论是float还是double类型的变量&#xff0c;都有精度限制。所以一定要避免将浮点变量用""或"!"与数字比较&#xff0c;应该设法转化成为">"或"<"形式。 不建议使用的例子&#xff1a; if(0.0 x) if(0.0 ! x) 强烈推荐的例…

图灵机器人调用数据恢复_机器人也能撩妹?python程序员自制微信机器人,替他俘获女神芳心...

机器人也有感情还记得王传君饰演的《星语心愿之再爱》这部电影吗&#xff1f;王传君饰演的天才程序员“王鹏鹏”因工作原因不能陪伴照顾身在异地的女朋友“林亦男”&#xff0c;呆萌宅男“王鹏鹏”开发出一款以自己为原型的“王鹏鹏8.0”程序去陪伴异地恋的女友&#xff0c;后来…

Spark排错与优化

一. 运维 1. Master挂掉,standby重启也失效 Master默认使用512M内存&#xff0c;当集群中运行的任务特别多时&#xff0c;就会挂掉&#xff0c;原因是master会读取每个task的event log日志去生成spark ui&#xff0c;内存不足自然会OOM&#xff0c;可以在master的运行日志中看到…

在MySQL上使用带密码的GlassFish JDBC安全性

我在该博客上最成功的文章之一是有关在GlassFish上使用基于表单的身份验证来建立JDBC安全领域的文章 。 对这篇文章的一些评论使我意识到&#xff0c;要真正使它安全&#xff0c;应该做的还很多。 开箱即用的安全性 图片&#xff1a; TheKenChan &#xff08; CC BY-NC 2.0 &a…

mgo写入安全机制

mgo写入安全机制 mongo写入安全mgo写入安全mongo写入安全 mongo本身也有一整套的写入安全机制,但是在这篇的内容里只介绍一小部分相关部分.先放一个链接可以跳过本节不看直接看这个 链接. WriteConcern.NONE:没有异常抛出WriteConcern.NORMAL:仅抛出网络错误异常&#xff0c;没…

C学习杂记(二)笔试题:不使用任何中间变量如何将a、b的值进行交换

常见的方法如下 void swap1(int *a, int *b) {int temp *a;*a *b;*b temp; } 不使用中间变量的方法 void swap2(int *a, int *b) {*a *a *b;*b *a - *b;*a *a - *b; } 这种方法是不可取的&#xff0c;因为ab和a-b的运算可能会导致数据溢出。 void swap3(int *a, in…

利用python进行数据分析_利用python进行数据分析复现(1)

&#xfeff;一直以来&#xff0c;都想学习python数据分析相关的知识&#xff0c;总是拖拖拉拉&#xff0c;包括这次这个分享也是。《利用python进行数据分析 第2版》是一次无意之间在简书上看到的一个分享&#xff0c;我决定将很详细。一直都想着可以复现一下。但总有理由&…

在运行时交换出Spring Bean配置

如今&#xff0c;大多数Java开发人员都定期与Spring打交道&#xff0c;而我们当中的许多人已经熟悉了Spring的功能和局限性。 最近&#xff0c;我遇到了一个我从未遇到过的问题&#xff1a;引入了基于运行时引入的配置来重新连接Bean内部的功能。 这对于简单的配置更改或交换掉…

Proximal Algorithms--Accelerated proximal gradient method

4.3 Accelerated proximal gradient method&#xff1a; 加速近端梯度方法&#xff1a; 基本的近端梯度方法的所谓的“加速”版本&#xff0c;就是在算法中包含了一个外推(extrapolation)步骤&#xff0c;一个简单的版本是&#xff1a; yk1:xkωk(xk−xk−1)xk1:proxλkg(yk1−…

C语言代码规范(七)#define

#define 宏定义的使用 #define MAX(x, y) ( ((x) > (y)) ? (x) : (y) ) #define MIN(x, y) ( ((x) < (y)) ? (x) : (y) ) 在宏定义中要把参数用括号扩起来( ((x) > (y)) ? (x) : (y) )。 因为宏只是简单的文本替换&#xff0c;如果不注意&#xff0c;很容…

http 二进制_浅谈HTTP协议

HTTP一、HTTP协议http协议&#xff0c;是超文本传输协议&#xff0c;此协议是基于TCP/IP的协议&#xff0c;是互联网上应用最为广泛的一直网络协议是一种无状态协议&#xff0c;默认端口为80,。设计HTTP的最初目的是为了提供一种发布和接受HTML页面的方法。通过HTTP或者HTTPS协…

登陆注册

登陆注册&#xff0c;注册的账号存在服务器的数据库里&#xff0c;成功了就给你返回成功&#xff0c;失败了就返回失败 有三种登陆方式&#xff1a;普通注册&#xff0c;手机号注册&#xff0c;第三方注册转载于:https://www.cnblogs.com/SensenCoder/p/4885606.html

Java并发教程–线程池

Java 1.5中提供的最通用的并发增强功能之一是引入了可自定义的线程池。 这些线程池使您可以对诸如线程数&#xff0c;线程重用&#xff0c;调度和线程构造之类的东西进行大量控制。 让我们回顾一下。 首先&#xff0c;线程池。 让我们直接进入java.util.concurrent.ExecutorSer…

HTTPPost/AFNetWorking/JSONModel/NSPredicate

一、HTTPPost 1. POST方式发送请求 HTTP协议下默认数据发送请求方法是GET方式&#xff0c;若需要使用POST方法&#xff0c;则需要对发送的请求也就是request对象&#xff0c;进行属性设置。 步骤如下&#xff1a; > 要发送的请求对象&#xff0c;需要使用可变请求对象 [[NSM…