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;
}
}
第七步
启动项目测试:
来源:https://blog.csdn.net/qq_42778001/article/details/118184025


猜你喜欢
- 废话不多说,直接上代码吧!# 矩阵操作# 将矩阵拉成向量import numpy as npx = np.arange(10).reshap
- pytest概述pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点:1、简单灵活,容易上手,文档丰富;2、支持参数
- 删除表数据操作清空所有表记录:TRUNCATE TABLE your_table_name;或者批量删除满足条件的表记录:BEGIN &nb
- 安装的是解压版的MYSQL1:解压之后copy 一个my.ini文件 然后添加字节编码配置:[client]default-characte
- 当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(包括机器故障、介质故障、误操作等),数据库有时也可能遭到
- 前言 角点通常被定义为两条边的交点,或者说,角点的局部邻域应该具有两个不同区域的不同方向的边界。角点检测(Corner Detec
- 本文实例讲述了Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作。分享给大家供大家参考,具体如下:Thinkphp5.0
- 第一种import win32clipboardimport time#速度快 容易出错class niubi(): def l
- Batch Normalization和Dropout是深度学习模型中常用的结构。但BN和dropout在训练和测试时使用却不相同。Batc
- 操作步骤A.cmd输入:pip install requests,安装requestsB.py文件导入:import requestsC.g
- 【作者翻译】结构和层次降低了复杂性并提高了可读性。你的文章或站点组织的越深入,用户就越容易理解你观点和得到你想传达的信息。在网页上,这点被通
- 本文实例为大家分享了python实现在线翻译的具体代码,供大家参考,具体内容如下具体效果请看图代码:import urllib.reques
- 视频观看视频敌人精灵这是我们“Shmup”项目的第2部分!在本课中,我们将添加一些敌人的精灵供玩家躲
- 在一些网页应用中,就比如在投票系统中,当我们进行的是多项投票时,我们要求用户最多只能选择几项进行投票,这也是就是说选择复选框的个数最多几个.
- 前言:工作中遇到以下小问题,解决方法如下,可能比较暴力,暂时留档,再进行优化。要求:将列表中json的 ‘id&
- 一、什么是requirements.txt文件及作用requirements.txt 文件是项目的依赖包及其对应版本号的信息列表,即记载你这
- 前言FlashText 算法是由 Vikash Singh 于2017年发表的大规模关键词替换算法,这个算法的时间复杂度仅由文本长度(N)决
- 1.打开apache的httpd.conf文件,找到# Virtual hosts#Include conf/extra/httpd-vho
- 前言这段时间一直在研究飞浆平台,最近试了试PaddleSpeech项目,试着对文本语音做处理。整体的效果个人觉着不算特别优越,只能作为简单的
- 一个单独的组件注释写了一个组件 加了一些注释效果图如下分页一类的功能都已经写好了 下面就上代码,不知道有几个老哥能看的懂,有不足之处,还望老