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
猜你喜欢
- 这篇文章主要介绍了Django项目基础配置和基本使用过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 本文实例讲述了Java连接各种数据库的方法。分享给大家供大家参考。具体如下://MySQL:  
- 变量什么是变量?变量是在程序运行时,能存储计算结果或能表示值得抽象概念。简单地说,变量就是在程序运行时,记录数据用的变量定义格式:变量名称=
- 简介这篇博客涉及的脚本用来将bag文件批量转化为mp4文件dockerfileFROM osrf/ros:kinetic-desktop-f
- 什么是转义字符在 HTML 中 <、>、& 等字符有特殊含义(<,> 用于标签中,& 用于转义),他
- 我们在操作 ini 配置文件的时候 可以使用 Python 的 configparser 库具体使用方法如下:from configpars
- 今天主题是实现并发服务器,实现方法有多种版本,先从简单的单进程代码实现到多进程,多线程的实现,最终引入一些高级模块来实现并发TCP服务器。说
- 记录一下今天被坑了一下午的BUG就从半个月前说起吧当时...........................................
- 首先声明:本人虽然在web前端岗位干了好多年,但无奈岗位对技术要求不高。html,css用的比较多,JavaScript自己原创的很少,基本
- 本文实例讲述了Python实现查找系统盘中需要找的字符。分享给大家供大家参考。具体如下:'''Created on
- 目录友情提示:性能优化指标数据库查询优化利用Queryset的惰性和缓存,避免重复查询一次查询所有需要的关联模型数据仅查询需要用到的数据使用
- 通过python处理光斑图像1 相关包与图像读取首先需要科学计算必备包numpy和画图包matplotlib.pyplot,我们通过后者进行
- 前言接着上一篇:AI识别照片是谁,人脸识别face_recognition开源项目安装使用根据项目提供的demo代码,调整了一下功能,自己写
- 1. 变量每个变量都存储了一个值在程序中可以随时修改变量,但Python将始终记录变量的最新值message = "Hello H
- 前言表是数据库存储数据的基本单位。一个表包含若干个字段或记录。表的操作包括创建新表、修改表和删除表。这些操作都是数据库管理中最基本,也是最重
- pycharm程序界面一般有很多子窗口,如图1所示。pycharm项目视图-运行窗口图1 Pycharm子窗口如果你发现某些子窗口不见了,图
- 本文实例为大家分享了python微信好友删除的具体代码,供大家参考,具体内容如下#weixin.py#coding:utf-8# !/usr
- 我们可以把表里每一个横行的数据,看成是不同的元组。在理解了这个概念后,昨天我们学了不少的namedtuple类,是否也能把元组转换成name
- 写在前面:前一段时间 kejun 给我们培训JavaScript的时候,在幻灯片上推荐了很多特别经典的文章,其中就有这一篇。读过之后感觉很不
- 问题,用python生成如下所示的1000个txt文件?解答:import osfor i in range(0,1001): os.mkn