Springboot集成mybatis
1.新建项目导入依赖
完整pom:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cy</groupId>
<artifactId>mybatis_springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mybatis_springboot</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.编写yml文件
spring:
# 数据库连接信息
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=UTF-8
# 这里修改成你自己的mysql用户名和密码
username: root
password: root
server:
# 修改程序端口
port: 8888
# mybatis配置
mybatis:
# 映射文件所在路径
mapperLocations: classpath:mapper/*.xml
3.编写mapper层接口
import com.cy.mybatis_springboot.pojo.Student;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface StudentMapper {
//新增学生
int addStudent(Student student);
//根据id删除学生
int deleteStudent(@Param("id") int id);
//修改学生信息
int updateStudent(@Param("id")int id,@Param("name")String name,@Param("age")int age);
//根据id来查询学生
Student queryStudentById(@Param("id") int id);
//查询所有学生
List<Student> queryAllStudent();
}
4.接口对应的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">
<!--namespace 唯一命名空间:对应你的mapper层接口的路径-->
<mapper namespace="com.cy.mybatis_springboot.mapper.StudentMapper">
<!--封装结果集 在我们操作数据库时,尽量避免去使用"*"-->
<!--column:实体类对应的属性 property:表中对应的字段 jdbcType:表中字段对应的数据类型-->
<resultMap id="student" type="com.cy.mybatis_springboot.pojo.Student">
<id column="id" property="id" jdbcType="INTEGER"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="age" property="age" jdbcType="INTEGER"/>
</resultMap>
<sql id="baseSql">
id,name,age
</sql>
<insert id="addStudent">
INSERT INTO student (name,age) VALUES (#{name},#{age})
</insert>
<delete id="deleteStudent">
DELETE FROM student WHERE id = #{id}
</delete>
<update id="updateStudent">
UPDATE student SET name=#{name},age=#{age} WHERE id = #{id}
</update>
<select id="queryStudentById" resultMap="student">
SELECT
<include refid="baseSql"/>
FROM student WHERE id = #{id}
</select>
<select id="queryAllStudent" resultMap="student">
SELECT
<include refid="baseSql"/>
FROM student
</select>
</mapper>
5.service层接口
import com.cy.mybatis_springboot.pojo.Student;
import java.util.List;
public interface StudentService {
//新增学生
int addStudent(Student student);
//根据id删除学生
int deleteStudentById(int id);
//修改学生信息
Student updateStudent(int id,String name,int age);
//根据id来查询学生
Student queryStudentById(int id);
//查询所有学生
List<Student> queryAllStudent();
}
6.service实现类
import com.cy.mybatis_springboot.mapper.StudentMapper;
import com.cy.mybatis_springboot.pojo.Student;
import com.cy.mybatis_springboot.service.StudentService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class StudentServiceImpl implements StudentService {
@Resource
private StudentMapper studentMapper;
@Override
public int addStudent(Student student) {
return studentMapper.addStudent(student);
}
@Override
public int deleteStudentById(int id) {
return studentMapper.deleteStudent(id);
}
@Override
//多次对表进行操作所以加上@Transactional ---> 要么都成功 要么都失败
//同时需要在启动类添加@EnableTransactionManagement注解
@Transactional(rollbackFor = Exception.class)
public Student updateStudent(int id, String name, int age) {
//修改之前先做查询看是否存在该学生
if (null == studentMapper.queryStudentById(id)) {
return null;
}
studentMapper.updateStudent(id, name, age);
//返回修改后的学生信息
return studentMapper.queryStudentById(id);
}
@Override
public Student queryStudentById(int id) {
return studentMapper.queryStudentById(id);
}
@Override
public List<Student> queryAllStudent() {
return studentMapper.queryAllStudent();
}
}
7.controller层代码
import com.cy.mybatis_springboot.mapper.StudentMapper;
import com.cy.mybatis_springboot.mapper.TestMapper;
import com.cy.mybatis_springboot.pojo.Account;
import com.cy.mybatis_springboot.pojo.Student;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
public class TestController {
@Resource
private TestMapper testMapper;
@Resource
private StudentMapper studentMapper;
@GetMapping("/{id}")
public Account selectAccountById(@PathVariable("id") int id) {
return testMapper.selectAccountById(id);
}
@GetMapping("stu/{id}")
public Student queryStudentById(@PathVariable("id") int id) {
return studentMapper.queryStudentById(id);
}
@GetMapping("/all")
public List<Student> queryAllStudent() {
return studentMapper.queryAllStudent();
}
}
整体项目目录
建表语句:
/*
Navicat MySQL Data Transfer
Source Server : real
Source Server Version : 50722
Source Host : localhost:3306
Source Database : test
Target Server Type : MYSQL
Target Server Version : 50722
File Encoding : 65001
Date: 2019-12-18 13:55:11
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
8.启动项目用postman进行测试
1).新增
http://localhost:8888/student/add
测试结果:
2.查询所有
http://localhost:8888/student/all
测试结果:
3).根据id删除学生
我们刚刚新增了一条"张飞"的记录 id为3 我们现在将他删掉
http://localhost:8888/student/3
测试结果:
对应数据库刷新后可以看到只有Rose一条记录了
4).修改学生信息
http://localhost:8888/student/2?name=Jack&age=19
因为我们在修改学生信息的时候返回的是修改后的学生信息
所以可以看到如下图所示信息
对应数据库数据
5).最后根据id查询学生信息
http://localhost:8888/student/2
测试结果:
9.补充说明
在controller层用到的
@RequestBody: 表示传入的参数要以json格式传入
@RequestParam: 表示在访问路径后需要拼接的参数并且括号内的内容要与参数的变量名一致
@PathVariable: 表示URL绑定的占位符,括号内的内容要与我们在路径中{}里面的内容用保持一致
10.本项目所有代码地址
https://github.com/yong1220/mybatis_springboot.git
至此本文内容结束,希望对你的学习有帮助~