Springboot连接数据库及查询数据完整流程

 更新时间:2021年06月25日 15:59:21   作者:红旗下的小兵  
今天给大家带来的是关于Springboot的相关知识,文章围绕着Springboot连接数据库及查询数据完整流程展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下

Springboot连接数据库

第一步

springboot继承Mybatis及数据库连接依赖(上一篇文章已经记录 )

 第二步

resources -> application.properties
application.properties中增加数据库连接配置

# 增加数据库连接
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/spring?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=lvxingchen
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

第三步

domain -> User
创建实体类,属性要跟数据库表字段一致

package com.lxc.springboot.domain;
 
public class User {
    private int id;
    private String user;
    private String name;
    private int age;
    private String password;
 
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", user='" + user + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", password='" + password + '\'' +
                '}';
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getUser() {
        return user;
    }
 
    public void setUser(String user) {
        this.user = user;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
}

第四步

mapper -> UserMapper
创建UserMapper接口,这也是项目的持久层,与数据查询相关的,之后我们需要让sprongboot知道,mapper文件夹就是数据持久层接口,所以,在项目入口文件中还要使用@MapperScan注解定义持久层。

package com.lxc.springboot.mapper;
 
import com.lxc.springboot.domain.User;
 
import java.util.List;
 
public interface UserMapper {
    public List<User> getUserList();
}

在项目入口文件中的配置:

@ComponentScan("com.lxc.springboot")
@SpringBootApplication
@MapperScan("com.lxc.springboot.mapper") // 让springboot知道mapper是这个项目的持久层
public class BootAndVueProjectApplication {
    private static final Logger LOG = LoggerFactory.getLogger(BootAndVueProjectApplication.class);
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(BootAndVueProjectApplication.class);
        //  SpringApplication.run(BootAndVueProjectApplication.class, args);
        Environment env = app.run(args).getEnvironment();
        LOG.info("启动成功!");
        LOG.info("地址:\thttp://127.0.0.1:{}", env.getProperty("server.port"));
    }
}

然后,创建UserMapper接口的 sql映射文件userMapper.xml,通常我会把这个文件放在resources -> mapper文件夹中

<?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:对应接口的全路径;
id:对应接口的方法;
resultType:结果类型。
-->
<mapper namespace="com.lxc.springboot.mapper.UserMapper" >
    <select id="getUserList" resultType="com.lxc.springboot.domain.User">
        select id, user, name, age, password from user
    </select>
 
</mapper>

定义完之后,springboot怎么能知道 resources -> mapper -> userMapper.xml是一个sql映射文件呢,此时需要在resources -> application.properties 中去配置:

# 配置mybatis所有的Mapper.xml所在的路径
mybatis.mapper-locations=classpath:/mapper/**/*.xml

第五步

service -> UserService
接口定义完,我们来创建service服务层,所有的业务逻辑的处理在这一层实现,也负责调用持久层接口。

package com.lxc.springboot.service;
 
import com.lxc.springboot.domain.User;
import com.lxc.springboot.mapper.UserMapper;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.util.List;
/**
 * service层调用持久层
 * @Service // 让spring扫描到这个包
 *
 * @Autowired和@Resource
 * 两个注解都可以把一个类注入进来(相当于import)
 * Resource JDK自带的
 * Autowired spring自带的
 */
@Service // 让spring扫描到这个包
public class UserService {
    @Resource
    public UserMapper userMapper;
    public List<User> getList() {
        return userMapper.getUserList();
    }
}

第六步

controller-> TestController

既然服务都写完了,也查询到数据了,那么来定义一个控制层Controller,负责调用service层,编写前端api接口,这一层也算是一个中转层。

这里着重记录下 ComResponse这个类,restful接口在返回给前端JSON数据时,同时也会返回一些公共的数据,如:状态码(code)、响应信息(message)等等,在这里我们统一处理,编写一个公共类,里边有这些公共字段属性,同时还需要有一个data数据属性,类型一般是:List , 之所以要把公共类定义为泛型,因为,在setData的时候,类型不确定,所以需要定义为泛型, 返回给前端的格式如下:

{
        code: 200,
        message: "查询成功",
        data: [{ name:"lxc", age: 20 }, { name: "123", age: 100 }]
}

package com.lxc.springboot.controller;
 
import com.lxc.springboot.commonResponse.ComResponse;
import com.lxc.springboot.service.UserService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
 
import javax.annotation.Resource;
 
@RestController // 通常返回一个json或 字符串
//@Controller // 一般是返回一个页面
public class TestController {
 
    @Resource // 把service层userService注入进来
    private UserService userService; 
 
    // 调用service层
    @RequestMapping(value = "/service")
    public ComResponse getService() {
        ComResponse<List<User>> objComResponse = new ComResponse<>();
        List<User> userList = userService.getList();
        objComResponse.setData(userList);
        objComResponse.setMsg("返回成功")
        return objComResponse;
    }
}

公共类:
commonResponse -> ComResponse

package com.lxc.springboot.commonResponse;
/**
 *
 * @param <T>
 *     ComResponse 是一个泛型类,返回的是一个泛型,外界可以传入任何类型的值
 *     理解泛型:
 *     有点像js方法,你给它传任何类型都可以,但是最后返回的类型是setData时候传的对象!!!
 */
public class ComResponse<T> {
 
    private String msg = "返回成功";
    private int code = 200;
    private T data;
 
    public String getMsg() {
        return msg;
    }
 
    public void setMsg(String msg) {
        this.msg = msg;
    }
 
    public int getCode() {
        return code;
    }
 
    public void setCode(int code) {
        this.code = code;
    }
 
    public T getData() {
        return data;
    }
 
    public void setData(T data) {
        this.data = data;
    }
}

第七步

启动项目测试:

到此这篇关于Springboot连接数据库及查询数据完整流程的文章就介绍到这了,更多相关Springboot连接数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Retry重试框架的使用讲解

    Spring Retry重试框架的使用讲解

    重试的使用场景比较多,比如调用远程服务时,由于网络或者服务端响应慢导致调用超时,此时可以多重试几次。用定时任务也可以实现重试的效果,但比较麻烦,用Spring Retry的话一个注解搞定所有,感兴趣的可以了解一下
    2022-10-10
  • Mybatis-plus如何查询表中指定字段(不查询全部字段)

    Mybatis-plus如何查询表中指定字段(不查询全部字段)

    这篇文章主要介绍了Mybatis-plus如何查询表中指定字段(不查询全部字段),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Java中long类型与Long类型的区别和大小比较详解

    Java中long类型与Long类型的区别和大小比较详解

    这篇文章主要给大家介绍了Java中long类型与Long类型区别和大小比较的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • java关于持久层面试题目整理

    java关于持久层面试题目整理

    在本篇文章里小编给大家分享的是一篇关于java关于持久层面试题目整理内容,需要的朋友们可以学习下。
    2020-03-03
  • mybatis之增删改查

    mybatis之增删改查

    本篇文章主要介绍了Mybatis实现数据的增删改查实例(CRUD),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-07-07
  • Java 自定义注解及利用反射读取注解的实例

    Java 自定义注解及利用反射读取注解的实例

    下面小编就为大家带来一篇Java 自定义注解及利用反射读取注解的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Java算法之BFS,DFS,动态规划和贪心算法的实现

    Java算法之BFS,DFS,动态规划和贪心算法的实现

    广度优先搜索(BFS)和深度优先搜索(DFS)是图遍历算法中最常见的两种算法,主要用于解决搜索和遍历问题。动态规划和贪心算法则用来解决优化问题。本文就来看看这些算法的具体实现吧
    2023-04-04
  • java面向对象的三大特性之一继承用法实例分析

    java面向对象的三大特性之一继承用法实例分析

    这篇文章主要介绍了java面向对象的三大特性之一继承用法,结合实例形式分析了java面向对象程序设计中继承的基本原理与具体使用方法,需要的朋友可以参考下
    2019-11-11
  • java中stringbuffer线程安全分析实例详解

    java中stringbuffer线程安全分析实例详解

    在本篇文章里小编给大家整理的是一篇关于java中stringbuffer线程安全分析实例详解内容,有兴趣的朋友们可以学习下。
    2021-01-01
  • java并发包JUC诞生及详细内容

    java并发包JUC诞生及详细内容

    这篇文章主要为大家介绍了java并发包JUC的诞生及JUC增加的内容详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02

最新评论