SpringBoot学习笔记(四) --- SpringBoot整合mybatis(idea+gradle)

本文详细介绍了如何在SpringBoot项目中整合MyBatis,包括项目搭建、配置数据源、编写实体类、DAO层、Service层及Controller层代码,以及使用注解实现数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 新建项目,初始依赖为Web、MySQL、MyBatis

在这里插入图片描述

2. 项目结构

在这里插入图片描述
SpringBoot会引入当前版本支持的最大的版本号的组件,譬如mysql引入的就是8.0.15的版本,如果不习惯的话。可以自己去修改依赖引入的代码

在这里插入图片描述

3. 网application.properties文件中,添加属性

在这里插入图片描述
在application.properties文件中添加属性,在启动时,SpringBoot容器会,将这些属性自动装填到各自的Bean中去

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql:///user?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root

mybatis.type-aliases-package=com.example.springbootdemo4.pojo
mybatis.mapper-locations=classpath:/static/mapper/*Mapper.xml

前面四句,是标准的数据四件套,驱动,url,数据库用户名,数据库 密码

后面的第六行,是指定pojo的别名包,这样你在写mapper文件时,就不需要写pojo对象的全路径了

后面第七行,是指定mapper.xml文件夹目录

注意,等号前后不要有空格,不然会出错

在这里插入图片描述
往启动类上加一个注解,扫描dao的包

package com.example.springbootdemo4;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.springbootdemo4.dao")
public class Springbootdemo4Application {

    public static void main(String[] args) {
        SpringApplication.run(Springbootdemo4Application.class, args);
    }

}

4. 构建项目结构

在这里插入图片描述
就按照正常,SSM框架搭建的格式,添加pojo层,dao层,mapper.xml文件夹,service层,controller层

5. 各个层的文件添加

pojo

在这里插入图片描述
User,java

package com.example.springbootdemo4.pojo;

import java.io.Serializable;

public class User implements Serializable {

    private int id;
    private String name;
    private String gender;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", age=" + age +
                '}';
    }
}

dao

在这里插入图片描述
UserMapper.java

package com.example.springbootdemo4.dao;

import com.example.springbootdemo4.pojo.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

public interface UserMapper {

    public List<User> findAll();
    
}

Mapper.xml文件

在这里插入图片描述
UserMapper.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="com.example.springbootdemo4.dao.UserMapper">
    <select id="findAll" resultType="user">
        select * from user;
    </select>
</mapper>

service

在这里插入图片描述

UserService.java

package com.example.springbootdemo4.service;

import com.example.springbootdemo4.pojo.User;

import java.util.List;

public interface UserService {

    public List<User> findAll();

}

在这里插入图片描述
UserServiceImpl.java

package com.example.springbootdemo4.service;

import com.example.springbootdemo4.dao.UserMapper;
import com.example.springbootdemo4.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> findAll() {
        return userMapper.findAll();
    }

}

controller

在这里插入图片描述
UserController.java

package com.example.springbootdemo4.controller;

import com.example.springbootdemo4.pojo.User;
import com.example.springbootdemo4.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/findAll")
    @ResponseBody
    public List<User> findAll(){
        return userService.findAll();
    }

}

6.启动项目

在这里插入图片描述
这里出现了一个警告,是因为在当前版本的时候,驱动的路径变为了com.mysql.cj.jdbc,Driver

那么我们将Driver的class路径改为最新的,重新启动

7. 修改过后启动项目,访问localhost:8080/findAll

在这里插入图片描述
发现又报了一个错误 java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.****

这个错误是因为,最新版本的mysql需要你指定时区等信息

spring.datasource.url=jdbc:mysql:///user?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8

还以一种是版本冲突问题,就是报了个 CLIENT_PLUGIN_AUTH is required
在这种情况下,你可以将版本号降低到5.1.38左右

8. 修改配置文件

在这里插入图片描述

9. 再次启动访问

在这里插入图片描述
SpringBoot系列号称是0配置,0XML,所以我们使用mapper.xml,就显得不太合适了

那么我们除了mapper.xml之外,还能使用那些手段呢?

  1. 使用MyBatis的注解方式
  2. 使用MyBatis-plus
  3. 使用tk-Mybatis
  4. 放弃MyBatis,使用JPA

那么我接下来演示的是使用MyBatis注解的方式,以后会演示其他方式

10. 使用注解的方式

dao

在这里插入图片描述
增加了一个insert的功能,我在数据库中使用的id自增的方式。

@Insert("insert into user values(null, #{name}, #{gender}, #{age})")
public void insert(User user);

service层

在这里插入图片描述
UserService.java

public void insert(User user);

UserServiceImpl.java

@Override
public void insert(User user) {
    userMapper.insert(user);
}

controller层

在这里插入图片描述

@RequestMapping("/insert")
@ResponseBody
public String insert(){
    User user = new User();
    user.setName("大天师");
    user.setAge(22);
    user.setGender("男");

    userService.insert(user);
    return "ok";
}

11. 启动访问localhost:8080/insert

查看数据库

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值