Spring Boot + Mybatis 快速整合

引言

最近在工作结束后抽时间学习了一下mybatis的知识,因为之前有学习过,但是经久不用,也未曾踏实地整理,因此有所淡忘。

super meeting会议管理系统是我厂最近开发的一套会议预约平台。持久层框架经讨论,选为灵活优秀的半自动持久层框架Mybatis。

关于mybatis的有点和简介不做本系列学习博客的重点,在此不做记录。

学习的方式采用视频+实践的学练组合方式。结合一直接触的spring boot框架,重温mybatis的使用和各种应用场景的解决方案。

学习的视频连接:https://www.bilibili.com/video/av21272940

项目搭建

pom依赖

项目采用maven管理的spring boot方式,添加pom依赖:

此处需要引入Mybatis的spring boot start包 和 mysql的驱动依赖

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency>

这两项依赖可以直接在spring boot初始化界面的Search for dependencies 中找到:https://start.spring.io/

如何搭建spring boot项目,请参考《SpringBoot————快速搭建springboot项目》

建库建表

为方便日后学习mapper的使用,此处直接建立两张关联表:dept(部门表)employee(员工表)

插入测试数据:

数据源配置

servert.port=8080
#mysql
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

此处先简单配置数据源,mybatis相关配置稍后介绍。

定义接口与Mapper配置文件

根据mybatis的接口式编程方式,定义数据库操作方法的api可以与Mapper进行动态绑定。

接口与mapper.xml文件进行绑定后,调用接口中的增删改查时,Mybatis会为用户创建一个代理对象,由这个代理对象执行操作。

Mapper接口

@Mapper
public interface EmpDao {/*** 根据员工id查找员工*/Employee getEmpById(Integer empId);
}

@Mapper代表这是一个mybatis可以识别的Mapper接口。

mybatis的mapper-locations配置项、@Mapper注解、<mapper>标签的namespace属性,三者可以使mybatis找到任意目录下的Mapper配置文件以及与其绑定的接口。因此,接口名称可以根据喜好使用Dao或者Mapper结尾,并没有限制。

Mapper.xml配置

添加mybatis 的mapper.xml文件约束:

官网查找地址:http://www.mybatis.org/mybatis-3/getting-started.html

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dao.EmpDao"><select id="getEmpById"  resultType="com.example.demo.entity.Employee">SELECT * FROM employee WHERE emp_id = #{empId}</select>
</mapper>

namespace指定绑定接口的全类名;id标识接口中与之绑定的方法;resultType表示返回值类型;#{empId}此处的empId代表接口中传入的参数(这里注意,如果是一个参数mybatis不会特殊处理;如果是多个参数,参数必须指定参数名,否则会报错!后续文章会说明这个问题。)

小提示:添加dtd约束后,如果在书写xml的时候没有任何提示,则可以在联网状态下Ctrl+左键点击约束中的链接“http://mybatis.org/dtd/mybatis-3-mapper.dtd”,这样可以加载xml的提示内容。

全局配置

最开始的spring 整合 mybatis的版本都是使用mybatis-config.xml配置文件,进行数据源,以及各种配置信息的配置。

当然这些配置项依然不变,变化的是配置项书写的方式,以及去掉了mybatis-config全局配置文件。

官网中提供了有关spring boot需要的mybatis的全部配置信息:

http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/index.html

而configuration属性,更是包含了其他更加详细的settings项:

NOTE configuration property cannot be used at the same time with the config-location.

在configuration中,包含诸如mapUnderscoreToCamelCase(下划线转驼峰)、lazyLoadingEnabled(懒加载)、aggressiveLazyLoading(侵入式懒加载)、cacheEnabled(全局缓存)等配置项都是configuration中的子配置项。

项目搭建所需的简单配置项如下:

#mybatis
mybatis.mapper-locations=classpath:com/example/demo/dao/xml/*.xml
mybatis.configuration.mapUnderscoreToCamelCase=true
mybatis.type-aliases-package=com.example.demo.entity

最后观察一下我们的项目结构:

测试

为了简便测试,我们定义一个controller直接调用dao层的方法,以此来进行方法的测试,web接口采用RESTful 风格。

@RestController
@RequestMapping("/emps")
public class EmpController {@Autowiredprivate EmpDao empDao;@GetMapping("/{empId}")public Employee getEmpById(@PathVariable Integer empId) {return empDao.getEmpById(empId);}
}

浏览器调用接口:

 

综上,就是关于spring boot + mybatis 的简单整合与使用,后续会进行更加深入的学习和使用。

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

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

相关文章

SQL关联查询————LEFT JOIN关键字的使用

引言 关联查询一直是非常重要的SQL使用技巧。 在一次查询操作中&#xff0c;使用mybatis进行条件查询&#xff0c;在没有使用 LEFT JOIN 关键字的情况下是这样写的&#xff1a; <!-- 查找成员 --><select id"selectUsers" resultMap"selectUsers_Res…

Java知识点全面汇总

&#xfeff;&#xfeff; 相关概念 面向对象的三个特征 封装&#xff0c;继承&#xff0c;多态&#xff0c;这个应该是人人皆知&#xff0c;有时候也会加上抽象。 多态的好处 允许不同类对象对同一消息做出响应&#xff0c;即同一消息可以根据发送对象的不同而采用多种不…

Git初学札记(八)————版本回退

引言 不论是使用svn还是git&#xff0c;版本回退都是一个非常重要的功能。 EGit版本回退 在History视图中&#xff0c;我们可以看到我们的commit历史&#xff0c;选中任意一个commit版本&#xff0c;右键reset —>Hard &#xff0c;即可回退到指定版本。 注意&#xff0c…

Java实现用户头像上传(修改默认文件大小限制)

概述 每次说起文件上传&#xff0c;就不得不提一下前端的实现方式&#xff0c;说来也奇怪&#xff0c;本博主最热门的博客居然也是文件上传&#xff0c;3万多的访问量占了总访问量的一多半&#xff1a;《传统form表单提交方式的文件上传与文件存储》&#xff0c;而且&#xff…

垃圾回收机制和JVM垃圾回收常见算法

垃圾回收机制和JVM垃圾回收常见算法垃圾回收的好处和特点&#xff1a; 好处&#xff1a; 1. 提高编程效率&#xff1b; 2. 垃圾回收机制保护程序的完整性。特点&#xff1a; 1. 只能回收无用对象的内存空间&#xff0c;对其他物理资源无能为力&#xff1b; 2. 为了更快回收不再…

Java 多线程 —— 死锁与锁的错误用法

引言 死锁状态的大致情况是&#xff1a;Thread_1在获得A对象的锁后&#xff0c;紧接着去请求B对象的锁 &#xff0c;Thread_2在获得了B对象的锁后&#xff0c;紧接着又去请求A对象的锁&#xff0c;如下图&#xff1a; 一、模拟一个死锁 public class DeadLockDemo {static cl…

Java提供了哪些IO方式? NIO如何实现多路复用?

Java提供了哪些IO方式&#xff1f; NIO如何实现多路复用&#xff1f;Java IO 方式有很多种&#xff0c;基于不同的 IO 抽象模型和交互方式&#xff0c;可以进行简单区分。 首先&#xff0c;传统的 java.io 包&#xff0c;它基于流模型实现&#xff0c;提供了我们最熟知的一些 I…

Multiple markers at this line

在类的package 关键字上莫名其妙的多了红色波浪线&#xff0c;代码也没有任何问题。 解决方法&#xff1a; 打开项目build path&#xff0c;删除jre system library&#xff0c;然后应用&#xff0c;再次添加一遍jdk1.8&#xff0c;选择工作区默认即可&#xff0c;应用&#…

Java零基础并发编程入门

Java零基础并发编程入门并发编程主要包括&#xff1a; 线程&#xff0c;同步&#xff0c;future&#xff0c;锁&#xff0c;fork/join&#xff0c; volatile&#xff0c;信号量&#xff0c;cas&#xff08;原子性&#xff0c;可见性&#xff0c;顺序一致性&#xff09;&#xf…

Java内置锁——synchronized

一、给对象加把锁 synchronized关键字是Java唯一内置的互斥锁&#xff0c;通过关键字 synchronized 可以保证同一时刻只有一个线程获得某个同步代码块的执行权&#xff0c;但不会导致其他线程执行非同步方法时阻塞。 当获得锁的线程执行完同步代码块后&#xff0c;线程会将锁…

处理对象(toString()方法详解和==与equals方法的区别)

处理对象&#xff08;toString&#xff08;&#xff09;方法详解和与equals方法的区别&#xff09;toString&#xff08;&#xff09;是一个非常特殊的方法&#xff0c;它是一个自我描述的方法。当程序员直接打印该对象的时候&#xff0c;系统会输出该对象的“自我描述”的信息…

Java并发编程实战——volatile

引言 Java 语言提供了一种弱同步机制——volatile 变量。它的作用是确保将变量的更新操作通知到其他线程。 当把变量声明为volatile后&#xff0c;编译器和运行时都会注意到这个变量是共享的&#xff0c;因此不会将该变量上的操作与其他内存操作一起重排序。 另外&#xff0…

Java中类的加载顺序介绍(ClassLoader)

Java中类的加载顺序介绍(ClassLoader)1、ClassNotFoundExcetpion   我们在开发中&#xff0c;经常可以遇见java.lang.ClassNotFoundExcetpion这个异常&#xff0c;今天我就来总结一下这个问题。对于这个异常&#xff0c;它实质涉及到了java技术体系中的类加载。Java的类加载机…

UP装机部署步骤大纲

Linux装机 插上网线&#xff0c;然后&#xff0c;Ubuntu系统安装&#xff08;略&#xff09; 更改root密码 以装机时设置的用户登陆后&#xff0c;sudo修改root用户密码&#xff0c;然后退出&#xff0c;重新登录root。 $ sudo passwd root 下载并安装JDK $ java (根据提…

Java类的初始化、变量的初始化

Java类的初始化、变量的初始化知识点 Java常量, final 修饰,值被设定后不能再被修改静态变量里, static 修饰,顾名思义&#xff0c;无须创建对象&#xff0c;便可在内存中申请一个存储空间进行存储成员变量, 也称实例变量&#xff0c;它随着当前对象的建立而建立&#xff0…

Java 多线程 —— wait 与 notify

引言 认识一下 Object 类中的两个和多线程有关的方法&#xff1a;wait 和 notify。 wait&#xff0c;当前线程进入 WAITING 状态&#xff0c;释放锁资源。 notify&#xff0c;唤醒等待中的线程&#xff0c;不释放锁资源。 一、使用 wait-notify 实现一个监控程序 实现一个…

重写equal()时为什么也得重写hashCode()之深度解读equal方法与hashCode方法渊源

重写equal()时为什么也得重写hashCode()之深度解读以及equal方法与hashCode方法渊源转载自&#xff1a;http://blog.csdn.net/javazejian/article/details/51348320 今天这篇文章我们打算来深度解读一下equal方法以及其关联方法hashCode()&#xff0c;我们准备从以下几点入手分…

Java8————Optional

引言 Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true&#xff0c;调用get()方法会返回该对象。 Optional 是个容器&#xff1a;它可以保存类型T的值&#xff0c;或者仅仅保存null。Optional提供很多有用的方法&#xff0c;这样我们就不用显式进…

数据库的几种去重方法总结

一、数据库中的去重操作&#xff08;删除数据库中重复记录的SQL语句&#xff09;主要有三种方法 &#xff08;1&#xff09;、rowid方法 &#xff08;2&#xff09;、group by 方法 &#xff08;3&#xff09;、distinct方法 1、用rowid方法 根据Oracle带的rowid属性&#xff0…

Java8————日期时间 API

引言 Java 1.0 中引入了 Date 类&#xff0c;Java 1.1 中引入了 Calendar &#xff0c;Java 8 中引入了java.time API &#xff0c;这是 Java 非常吸引人的一次对时间日期的升级。它修正了过去的缺陷&#xff0c;同时也清晰易用。在 Java 8 引入time api 中&#xff0c;Instan…