Spring Boot 教程(2) - Mybatis
1. 什么是Mybatis?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
2. Spring Boot 整合 Mybatis
2.1 引入maven坐标
<!--springboot父工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <dependencies>
<!--springboot框架web组件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<!--mybatis整合springboot组件-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<!--mysql数据库连接驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<!--lombok组件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
</dependencies> <build>
<!--springboot的maven插件-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
2.2 编写代码
2.2.1 创建如图所示的目录结构
记得两个mapper文件的路径要一致,在编译之后mybatis的映射文件和接口文件才会在同一个目录下。
2.2.2 代码编写
2.2.2.1 创建配置文件和启动类
application.yml
:butterflytri:
databaseurl-port: 127.0.0.1:3306 # 数据库端口
database-name: student_db # 数据库名
server:
port: 8080 # 应用端口
servlet:
context-path: /butterflytri # 应用映射
spring:
application:
name: mybatis # 应用名称
datasource:
url: jdbc:mysql://${butterflytri.databaseurl-port}/${butterflytri.database-name}?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
driver-class-name: com.mysql.jdbc.Driver
username: root
password: root
mybatis:
type-aliases-package: org.wjf.entity # entity别名
mapper-locations: classpath:org/wjf/mapper/*Mapper.xml # mapper映射包扫描
启动类
MybatisApplication.java
:package org.butterflytri; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; /**
* @author: WJF
* @date: 2020/5/16
* @description: MybatisApplication
*/
@SpringBootApplication
public class MybatisApplication { public static void main(String[] args) {
SpringApplication.run(MybatisApplication.class,args);
} }
2.2.2.2 创建实体类Student
在entity包下创建
Student.java
实体类。package org.butterflytri.entity; import lombok.Getter;
import lombok.Setter;
import lombok.ToString; import java.io.Serializable; /**
* @author: WJF
* @date: 2020/5/16
* @description: Student
*/ @ToString
@Getter
@Setter
public class Student implements Serializable { private Long id; private String studentName; private String studentNo; private String sex; private Integer age; }
2.2.2.3 编写mybatis接口文件
在mapper包下创建
StudentMapper.java
接口。package org.butterflytri.mapper; import org.apache.ibatis.annotations.Mapper;
import org.butterflytri.entity.Student; import java.util.List; /**
* @author: WJF
* @date: 2020/5/16
* @description:
*/
@Mapper
public interface StudentMapper { /**
* 查询所有学生信息
* @return List<Student>
*/
List<Student> findAll(); /**
* 通过id查询学生信息
* @param id
* @return Student
*/
Student findOne(Long id); /**
* 通过学号查询学生信息
* @param studentNo
* @return Student
*/
Student findByStudentNo(String studentNo); }
2.2.2.4 创建mybatis映射文件
在mapper包下创建
StudentMapper.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="org.butterflytri.mapper.StudentMapper">
<sql id="propertyMapper">
`ID` AS id,
`STUDENT_NAME` AS studentName,
`STUDENT_NO` AS studentNo,
`SEX` AS sex,
`AGE` AS age
</sql>
<select id="findAll" resultType="org.butterflytri.entity.Student">
SELECT
<include refid="propertyMapper"></include>
FROM
`t_student`
</select>
<select id="findOne" parameterType="java.lang.Long" resultType="org.butterflytri.entity.Student">
SELECT
<include refid="propertyMapper"></include>
FROM
`t_student`
WHERE
`ID` = #{id}
</select>
<select id="findByStudentNo" parameterType="java.lang.String" resultType="org.butterflytri.entity.Student">
SELECT
<include refid="propertyMapper"></include>
FROM
`t_student`
WHERE
`STUDENT_NO` = #{studentNo}
</select>
</mapper>
2.2.2.5 Service层
在service包下创建
StudentService.java
接口,在impl包下创建StudentServiceImpl.Java
类并继承StudentService.Java
接口。StudentService.java
:package org.butterflytri.service; import org.butterflytri.entity.Student; import java.util.List; /**
* @author: WJF
* @date: 2020/5/16
* @description: StudentService
*/ public interface StudentService { public List<Student> findAll(); public Student findOne(Long id); public Student findByStudentNo(String studentNo);
}StudentServiceImpl.java
:package org.butterflytri.service.impl; import org.butterflytri.entity.Student;
import org.butterflytri.mapper.StudentMapper;
import org.butterflytri.service.StudentService;
import org.springframework.stereotype.Service; import javax.annotation.Resource;
import java.util.List; /**
* @author: WJF
* @date: 2020/5/16
* @description: StudentServiceImpl
*/
@Service
public class StudentServiceImpl implements StudentService { @Resource
private StudentMapper studentMapper; @Override
public List<Student> findAll() {
return studentMapper.findAll();
} @Override
public Student findOne(Long id) {
return studentMapper.findOne(id);
} @Override
public Student findByStudentNo(String studentNo) {
return studentMapper.findByStudentNo(studentNo);
}
}
2.2.2.6 Controller层
在controller包下创建
StudentController.java
控制器类。package org.butterflytri.controller; import org.butterflytri.entity.Student;
import org.butterflytri.service.StudentService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource;
import java.util.List; /**
* @author: WJF
* @date: 2020/5/16
* @description: StudentController
*/
@RestController
@RequestMapping("/student")
public class StudentController { @Resource
private StudentService studentService; @RequestMapping("/findAll")
public List<Student> findAll() {
return studentService.findAll();
} @RequestMapping("/findOne")
public Student findOne(Long id) {
return studentService.findOne(id);
} @RequestMapping("/findByStudentNo")
public Student findByStudentNo(String studentNo) {
return studentService.findByStudentNo(studentNo);
} }
2.2.2.7 启动工程,访问路径
启动工程,访问三个接口:
findAll
:findOne
:findByStudentNo
:
3. 项目地址
本项目传送门:spring-boot-mybatis
此教程会一直更新下去,觉得博主写的可以的话,关注一下,也可以更方便下次来学习。
Spring Boot 教程(2) - Mybatis的更多相关文章
- Spring boot教程mybatis访问MySQL的尝试
Windows 10家庭中文版,Eclipse,Java 1.8,spring boot 2.1.0,mybatis-spring-boot-starter 1.3.2,com.github.page ...
- Spring Boot教程(三十八)使用MyBatis注解配置详解(1)
之前在Spring Boot中整合MyBatis时,采用了注解的配置方式,相信很多人还是比较喜欢这种优雅的方式的,也收到不少读者朋友的反馈和问题,主要集中于针对各种场景下注解如何使用,下面就对几种常见 ...
- Spring Boot教程(三十七)整合MyBatis
Spring中整合MyBatis就不多说了,最近大量使用Spring Boot,因此整理一下Spring Boot中整合MyBatis的步骤.搜了一下Spring Boot整合MyBatis的文章,方 ...
- Spring Boot:整合MyBatis框架
综合概述 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单 ...
- Spring Boot:实现MyBatis分页
综合概述 想必大家都有过这样的体验,在使用Mybatis时,最头痛的就是写分页了,需要先写一个查询count的select语句,然后再写一个真正分页查询的语句,当查询条件多了之后,会发现真的不想花双倍 ...
- Spring Boot:实现MyBatis动态数据源
综合概述 在很多具体应用场景中,我们需要用到动态数据源的情况,比如多租户的场景,系统登录时需要根据用户信息切换到用户对应的数据库.又比如业务A要访问A数据库,业务B要访问B数据库等,都可以使用动态数据 ...
- Spring Boot:实现MyBatis动态创建表
综合概述 在有些应用场景中,我们会有需要动态创建和操作表的需求.比如因为单表数据存储量太大而采取分表存储的情况,又或者是按日期生成日志表存储系统日志等等.这个时候就需要我们动态的生成和操作数据库表了. ...
- Spring Boot 教程
Spring Boot 系列教程: Spring Boot:快速入门教程 Spring Boot:整合Swagger文档 Spring Boot:整合MyBatis框架 Spring Boot:实现M ...
- 程序员DD 《Spring boot教程系列》补充
最近在跟着程序员DD的Spring boot教程系列学习Spring boot,由于年代原因,Spring boot已经发生了一些变化,所以在这里进行一些补充. 补充的知识大多来自评论区,百度,Sta ...
随机推荐
- UVA10599:Robots(II)(最长上升子序列)
Your company provides robots that can be used to pick up litter from fields after sporting events an ...
- (转)logback配置详解
找到一篇很详细的关于logback配置的介绍: 贴上原文链接:logback使用配置详解 1.介绍 Logback是由log4j创始人设计的另一个开源日志组件,它当前分为下面下个模块: logback ...
- VS中的生成和重新生成的区别
2019独角兽企业重金招聘Python工程师标准>>> 生成 在上次编译的基础上,只对改动过的文件重新生成,没有改动过的文件不会重新生成. 重新生成 对所有的文件都重新生成.如果引用 ...
- Linux下文件完整性监控工具Tripwire详解
Tripwire 是目前最为著名的Unix下文件系统完整性检查的软件工具,这一软件采用的技术核心就是对每个要监控的文件产生一个数字签名,保留下来.当文件现在的数字签名与保留的数字签名不一致时,那么现在 ...
- 数学--数论--HDU 12151七夕节 Plus (因子和线性筛)
Problem Description 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!" ...
- python(string 模块)
1.string 模块下关键字源码定义 whitespace = ' \t\n\r\v\f' ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz' ascii_ ...
- 【学习笔记】Shell-1 变量:命名规范、变量赋值/取值/取消、局部变量/全局变量、预设环境变量
1.Shell变量 从变量的实质上来说,变量名是指向一片用于存储数据的内存空间. Shell变量是一种弱类型的变量,即声明变量时不需要指定其变量类型,也不需求遵循“先声明再使用”的规定,想用即可用. ...
- Liunx常用操作(五)-如何查询文档中的冒号与引号
liunx下面有如下一段包含json格式的文档 一.单查所有冒号: .txt | grep [:] 结果如下: 二.单查所有引号: 这里需要转义 .txt | grep [\"] 三.gre ...
- 爬虫系列 一次采集.NET WebForm网站的坎坷历程
今天接到一个活,需要统计人员的工号信息,由于种种原因不能直接连数据库 [无奈].[无奈].[无奈].采取迂回方案,写个工具自动登录网站,采集用户信息. 这也不是第一次采集ASP.NET网站,以前采集的 ...
- leeCode刷题 lc184
Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id. +----+-------+--------+--------------+| Id ...