当前位置: 首页 > news >正文

【springboot】spring-boot + jdbc

本文转自:https://github.com/fishpro/spring-boot-study/tree/master/spring-boot-study-jdbc

根据个人实践情况做一些注释

感谢fishpro的教程

-----------------------------------------------------

总是要用到数据库的嘛,曾经我一度以为,写代码,编程就是搞数据库增删改查,甚至你设计一个系统,大部分时候在为如何设计关系型数据库努力,究其原因,是因为关系型数据库是逻辑的主要呈现。

这个系列,主要是对 Spring Boot 的数据库操作做一些示例程序展示。包括 mybatis、jpa操作、不同数据库的链接方式、多数据源切换、分库分表、自动编号问题、数据库优化问题。

从本系列开始,都需要用到 mysql 数据库 和其他一些参考的数据库。请准备相关环节。

  • mysql 5.6+
  • jdk1.8+
  • spring boot 2.1.6
  • idea 2018.1

本项目源码下载

1 准备数据库

mysql 5.6+ 数据库

字段类型主键说明
idint自动编号
user_namevarchar(100)用户名
passwordvarchar(255)密码
last_login_timedate最近登录时间
sextinyint性别 0男 1女 2其他
创建数据库:
CREATE DATABASE `demo_test` /*!40100 DEFAULT CHARACTER SET latin1 */;

导入表:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `last_login_time` datetime DEFAULT NULL,
  `sex` tinyint(4) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=armscii8;

-- ----------------------------
-- Records of t_user
-- ----------------------------
BEGIN;
INSERT INTO `t_user` VALUES (1, 'json', '123', '2019-07-27 16:01:21', 1);
INSERT INTO `t_user` VALUES (2, 'jack jo', '123', '2019-07-24 16:01:37', 1);
INSERT INTO `t_user` VALUES (3, 'manistal', '123', '2019-07-24 16:01:37', 1);
INSERT INTO `t_user` VALUES (4, 'landengdeng', '123', '2019-07-24 16:01:37', 1);
INSERT INTO `t_user` VALUES (5, 'max', '123', '2019-07-24 16:01:37', 1);
COMMIT;

SET FOREIGN_KEY_CHECKS = 1; 

2 新建 Spring Boot 项目工程

  1. File > New > Project,如下图选择 Spring Initializr 然后点击 【Next】下一步
  2. 填写 GroupId(包名)、Artifact(项目名) 即可。点击 下一步 groupId=com.fishpro
    artifactId=jdbc
  3. 选择依赖 Spring Web Starter 前面打钩,勾选SQL选项的 JDBC、MySql。
  4. 项目名设置为 spring-boot-study-jdbc.

3 依赖引入 Pom.xml

<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

4 Jdbc 配置

application.yml 配置(.properties文件类似,username和password根据数据库的实际用户名和密码填写)

server:
  port: 8086

spring:  
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/demo_test?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&user=root&password=root&useSSL=true&serverTimezone=UTC
    username: root
    password: 123456 

5 编写示例代码

增加代码 controller/UserController.java

@RestController
@RequestMapping("/api/user")
public class UserController {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    /**
     * 获取示例数据库 t_user 的全部信息 
     * @return 返回 json 数据
     * */
    @GetMapping("/users")
    public Object   getUsers(){
        List<Map<String,Object>> list=jdbcTemplate.queryForList("select * from t_user ");
        return  list;
    }

}

6 运行示例

运行 JdbcApplication 后在浏览器输入 http://localhost:8086/api/user/users 输出如下结果:

[{
	"id": 1,
	"user_name": "json",
	"password": "123",
	"last_login_time": "2019-07-27T21:01:21.000+0000",
	"sex": 1
}, {
	"id": 2,
	"user_name": "jack jo",
	"password": "123",
	"last_login_time": "2019-07-24T21:01:37.000+0000",
	"sex": 1
}, {
	"id": 3,
	"user_name": "manistal",
	"password": "123",
	"last_login_time": "2019-07-24T21:01:37.000+0000",
	"sex": 1
}, {
	"id": 4,
	"user_name": "landengdeng",
	"password": "123",
	"last_login_time": "2019-07-24T21:01:37.000+0000",
	"sex": 1
}, {
	"id": 5,
	"user_name": "max",
	"password": "123",
	"last_login_time": "2019-07-24T21:01:37.000+0000",
	"sex": 1
}] 

7 问题思考

  1. JdbcTemplate 如何动态获取数据库
  2. JdbcTemplate 如何实现 POJO 操作
  3. JdbcTemplate 如何分表分库
  4. JdbcTemplate 如何操作 Oracle 和 MSSQL Server

本项目源码下载

@GetMapping("/getAll/{arg}") 带参数

所以要么分别写成/getAll和/getAll/{companyName}两个接口:

@GetMapping("/getAll")
public ReturnModel getAllBus() {
    //findAll...
}

@GetMapping("/getAll/{companyName}")
public ReturnModel getAllBusByCompany(@PathVariable("companyName") String companyName) {
    //findAllByComName...
}
或者写成/getAllBusByCompany?companyName=xxx的形式去调用:

@GetMapping("/getAllBusByCompany")
public ReturnModel getAllBusByCompany(String companyName) {
    //findAll or findAllByComName...
}

遇到的错误:

PathVariable cannot be resolved to a type

点击PathVariable,在弹出的窗口,点击import PathVariable…… 插入对应的包即可

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Spring Boot 】Spring Boot Mybatis 使用教程
  • 【SpringBoot】Spring Boot 快速集成 Shiro 示例
  • 【模板引擎】什么会用到模板引擎?页面渲染选择thymeleaf模板引擎还是Vue?
  • 【锁】悲观锁和乐观锁、自旋锁|各种锁的使用场景
  • 【Enhancer 】Enhancer 是专业的一站式信息系统开发云平台
  • 【Markdown】Markdown插入图片的完美解决方法
  • 【springBoot】springBoot 学习笔记
  • 【spring】PO,VO,DAO,BO,POJO,Bean之间的区别与解释
  • 【java】堆栈、堆、方法区介绍
  • 【java】反射机制
  • 【微服务】什么是微服务?微服务与分布式的区别?微服务怎么具体实践微服务?服务端发现和客户端发现...
  • 【Spring boot】Spring boot之@Value注解的使用总结---研读
  • 【mysql】MySQL 面试,必须掌握的 8 个知识点
  • 【大厂面试】面试官看了赞不绝口的Redis笔记
  • 【C/C++】理解C和C++中的左值和右值
  • css的样式优先级
  • Go 语言编译器的 //go: 详解
  • java中的hashCode
  • Linux各目录及每个目录的详细介绍
  • Python 基础起步 (十) 什么叫函数?
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • rc-form之最单纯情况
  • scala基础语法(二)
  • 闭包--闭包作用之保存(一)
  • 简单实现一个textarea自适应高度
  • 面试总结JavaScript篇
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 网页视频流m3u8/ts视频下载
  • 我看到的前端
  • 一道面试题引发的“血案”
  •  一套莫尔斯电报听写、翻译系统
  • 交换综合实验一
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #QT(智能家居界面-界面切换)
  • (145)光线追踪距离场柔和阴影
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (离散数学)逻辑连接词
  • (三)uboot源码分析
  • (五)c52学习之旅-静态数码管
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • *** 2003
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .net framework profiles /.net framework 配置
  • .Net mvc总结
  • .NET 给NuGet包添加Readme
  • /usr/bin/env: node: No such file or directory
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • @Transactional 详解
  • [BJDCTF2020]EzPHP1
  • [cocos2d-x]关于CC_CALLBACK
  • [CocosCreator]Android的增加AndroidX的动态权限
  • [EULAR文摘] 利用蛋白组学技术开发一项蛋白评分用于预测TNFi疗效
  • [Flexbox] Using order to rearrange flexbox children