前言
在学习Springboot过程中,整合mybatis框架实现表数据的增删改查,话不多说,开始贴代码!
Spring Boot提供了一个名为spring-boot-starter-parent的工程,里面已经对各种常用依赖(并非全部)的版本进行了管理,我们的项目需要以这个项目为父工程,这样我们就不用操心依赖的版本问题了,需要什么依赖,直接引入坐标即可!
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
</parent>
springboot完整pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>springboot_demo</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
springboot整合mybatis
- SpringBoot官方并没有提供Mybatis的启动器,不过Mybatis官网自己实现了。在项目的 pom.xml 文件中加入
mybatis
依赖:
<!-- 通用mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
- 在 pom.xml 文件中加入
druid
依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
- 在 pom.xml 文件中加入
mysql
驱动依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
配置 application.yml
- 端口配置如下
server:
port: 9527
- 数据源配置如下:
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver # mysql是8.x版本的需要加cj,如果是低版本5.x的不需要加这个cj
url: jdbc:mysql://localhost:3306/cyw-study?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8
username: root
password: Wangchunyu123
- mybatis配置如下:
mybatis:
#classpath指的是resource文件夹
mapper-locations: classpath:/mapper/*.xml
configuration:
#开启驼峰命名规则 比如数据库字段是有下划线的t_no,那么代码中就要写成Tno代码里面自动把下划线的字母变成大写
map-underscore-to-camel-case: true
type-aliases-package: com.o2o.data
- 开启日志
logging:
level:
com:
o2o:
cy: debug
配置Mapper层包路径扫描注解@MapperScan
@MapperScan("com.o2o.mapper")
public class AutoTestApplication {
public static void main(String[] args) {
SpringApplication.run(AutoTestApplication.class, args);
}
}
Springboot实战
一,首先我们先创建一个实体类Teacher
,实体类其实就是对应一个数据表,其中的属性对应数据表中的字段。好处: 1.对对象实体的封装。 2.属性可以对字段定义和状态进行判断和过滤
package com.o2o.data;
import lombok.Data;
@Data
public class Teacher {
private String Tno;
private String Tname;
public Teacher(String t_no, String t_name) {
this.Tno = Tno;
this.Tname = Tname;
}
public Teacher(){
}
public String getT_no() {
return Tno;
}
public void setT_no(String t_no) {
this.Tno = t_no;
}
public String getT_name() {
return Tname;
}
public void setT_name(String t_name) {
this.Tname = Tname;
}
@Override
public String toString() {
return "Teacher{" +
"t_no='" + Tno + '\'' +
", t_name='" + Tname + '\'' +
'}';
}
}
二,接着在mapper层创建一个interface
接口,需要加@Mapper注解,提供findAll()方法
package com.o2o.mapper;
import com.o2o.data.Teacher;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface TeacherMapper {
//查询全部
List<Teacher> findAll();
}
三,再创建一个service层interface
接口和impl
层实现类,需要加@Server
注解
package com.o2o.service;
import com.o2o.data.Teacher;
import java.util.List;
public interface TeacherService {
List<Teacher> findAll();
}
package com.o2o.service.impl;
import com.o2o.data.Teacher;
import com.o2o.mapper.TeacherMapper;
import com.o2o.service.TeacherService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class TeacherServiceImpl implements TeacherService {
@Autowired
private TeacherMapper teacherMapper;
@Override
public List<Teacher> findAll() {
List<Teacher> teachers = teacherMapper.findAll();
return teachers;
}
}
四,创建一个mapper.xml文件,配置各种SQL语句(例如SELECT,INSERT,UPDATE和DELETE)的语句
<?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.o2o.mapper.TeacherMapper">
<select id="findAll" resultType="com.o2o.data.Teacher">
select * from teacher;
</select>
</mapper>
这里重点说下<select id="findAll" resultType="com.o2o.data.Teacher">
的含义
- select 标签的 id 属性是唯一标识,需要与mapper层接口方法名要一致
- resultType 表示输出结果的类型,适合无参数
- parameterType 表示输入参数的类型
五,创建controller层控制器,用来接收前端传入的参数
public返回的是一个list列表
,因为我们查询全部getTeacher()
没有参数,映射一个GetMapping
请求方法,传入路径名/test
package com.o2o.controller;
import com.o2o.data.Teacher;
import com.o2o.service.TeacherService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class TeacherController {
@Autowired
private TeacherService teacherService;
@GetMapping("/test")
public List<Teacher> getTeacher(){
List<Teacher> allTeachers = teacherService.findAll();
return allTeachers;
}
}
六,启动SpingApplication类进行测试
浏览器输入{ip}+端口号进行访问,我们看到已经成功查询到数据库teacher表
里的数据啦
表数据