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

作者:红旗下的小兵 时间:2024-01-18 07:25:29 

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连接数据库及查询数据完整流程

来源:https://blog.csdn.net/qq_42778001/article/details/118184025

标签:Springboot,数据库
0
投稿

猜你喜欢

  • Node.js服务器开启Gzip压缩教程

    2024-04-22 22:14:49
  • Python 性能优化技巧总结

    2023-03-01 00:36:46
  • MySQL复制表的三种方式(小结)

    2024-01-17 11:33:09
  • ASP(JScript)构建SQL语句“类”

    2008-04-30 07:12:00
  • C#使用Socket快速判断数据库连接是否正常的方法

    2024-01-28 06:49:00
  • Python 分发包中添加额外文件的方法

    2023-02-15 08:43:11
  • 两行Python代码实现pdf转word功能

    2023-06-11 08:55:23
  • Python使用xlrd和xlwt实现自动化操作Excel

    2021-08-24 10:54:19
  • 关于分页

    2011-07-01 12:39:03
  • ASP判断一个字符串中只包含字母和数字

    2008-08-08 12:12:00
  • Python pyecharts绘制词云图代码

    2021-03-18 03:17:08
  • Pandas替换及部分替换(replace)实现流程详解

    2023-11-04 02:58:38
  • 使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示

    2022-08-08 05:41:40
  • Python名片管理系统+猜拳小游戏案例实现彩(色控制台版)

    2021-10-26 03:52:44
  • Windows10下Tensorflow2.0 安装及环境配置教程(图文)

    2022-03-31 04:02:28
  • Go内存节省技巧简单实现方法

    2024-04-27 15:25:05
  • CentOS 7下Python 2.7升级至Python3.6.1的实战教程

    2023-09-13 07:56:46
  • 浅谈Python基础—判断和循环

    2021-04-21 03:53:46
  • 使用php+swoole对client数据实时更新(一)

    2024-05-03 15:13:08
  • Python动态语言与鸭子类型详解

    2021-02-21 07:22:49
  • asp之家 网络编程 m.aspxhome.com