[Spring Boot] 3. 数据库操作

数据库操作是 web 开发最核心的部分之一,我们一切从简。先能简单地 CURD (增删改查)即可。

  • spring-boot 2.3
  • spring-boot-starter-data-jpa
  • mysql-5.5

安装&使用

pom.xml<dependencys> 标签中引入以下内容:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.39</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

note: mysql-connector-java 根据自己 mysql 版本进行版本设置。如果 mysql 版本大于 5.5 的则建议使用 8.0 以上,否则使用 mysql-connector-java 5.1官方文档说明

配置数据库参数

配置地址:src/main/resources/application.properties

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/blog
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.database=mysql
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

note: 参数来源参考 官网示例-data-mysqlSpring Boot Application Properties

表实体

数据库中添加以下表:

CREATE TABLE `article` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '标题',
  `content` text COLLATE utf8mb4_bin NOT NULL COMMENT '内容',
  `category_id` int(10) unsigned NOT NULL COMMENT '所属分类',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='文章';

表实体放置在 src/main/com/example/demo/entity 文件夹中。

我们使用 IDEA 提供的实体生成工具来自动生成实体。

为了方便阅读我拆成子文章:IDEA 生成 JPA 实体

生成的实体类还需要我们为其添加一些设置,如标识主键。

@Entity
public class Article {
    private int id;
    // code ...

    @Id
    @Column(name = "id")
    // 标记返回的时候使用数据库自增长的值
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public int getId() {
        return id;
    }

    // code ...
}

添加 Repository

根据上面的实体写一个 repository,放置在 src/main/com/example/demo/repository 文件夹中。

package com.example.demo.repository;

import com.example.demo.entity.Article;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ArticleRepository extends JpaRepository<Article, Integer> {
}

以上代码即可使用通用的 CURD 了.

CURD

我们在 Controller 中进行调用,代码如下:

package com.example.demo.controller;

import com.example.demo.entity.Article;
import com.example.demo.repository.ArticleRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/article")
public class ArticleController {
    @Autowired
    public ArticleRepository articleRepository;

    @GetMapping("/")
    public List<Article> index(@RequestParam(name = "cid") int cid) {
        return articleRepository.findAllByCategoryId(cid);
    }

    @GetMapping("/{id}")
    public Article show(@PathVariable(value = "id")int id) {
        return articleRepository.findById(id);
    }

    @PostMapping("/")
    public Article store(@RequestBody Article article) {
        return articleRepository.save(article);
    }

    @PutMapping("/{id}")
    public Article update(@PathVariable(value = "id")int id, @RequestBody Article article) {
        article.setId(id);

        return articleRepository.saveAndFlush(article);
    }

    @DeleteMapping("/{id}")
    public void delete(@PathVariable(value = "id") int id) {
        articleRepository.deleteById(id);
    }
}

@RequestBody 需要使用 json 格式。

上面的代码中使用了 RestFul 的方式来请求。

示例代码

待深入内容

  • 数据库事务
  • 复杂查询
    • 分页
    • 联表

其他待了解内容

  • JDBC
  • mybatis
  • DAO / DO / DTO
  • impl
  • druid
  • hibernate
  • lombok

结语

这篇文章写的很简单,全部都是边学习边实践出来的内容。适合一些纯新手查看。
Spring Boot 相关文章索引

开发经验

网上的资源太多太杂,有的很多很长,有的因为水平有限看不太懂。

在那里找到自己想要的包以及包适合的版本

现在项目中包管理是通过 mavenpom.xml 文件来配置的。我们可以通过 maven 资源网 取得更多的信息。下面我以查找 mybatis 包为示例:
查找指定包
进入指定版本
查看包主页

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值