SpringBoot-07-之数据库JPA(CRUD)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 现在来介绍SpringBoot基于jpa对MySQL进行操作。既然是数据库操作总有点目标和资源吧,现在来做一个:《万界神兵录》收集一下天下神兵,从剑开始一.

现在来介绍SpringBoot基于jpa对MySQL进行操作。
既然是数据库操作总有点目标和资源吧,
现在来做一个:《万界神兵录》收集一下天下神兵,从剑开始

一.前期准备

1.个人还是比较喜欢自己建表:建表
CREATE TABLE sword
(
    id int PRIMARY KEY NOT NULL COMMENT '身份验证码' AUTO_INCREMENT,
    name varchar(24) NOT NULL COMMENT '名称',
    info text COMMENT '描述信息',
    imgurl varchar(100) COMMENT '图片',
    create_time datetime COMMENT '创建时间',
    modify_time datetime COMMENT '修改时间',
    origin varchar(40) COMMENT '来源'
);
2.一条数据:Excalibur
sql> INSERT INTO `toly`.`sword` (`name`, `info`, `imgurl`, `create_time`, `modify_time`, `origin`)
VALUES ('Excalibur', 'Excalibur是传说中不列颠国王亚瑟王从湖之仙女那得到的圣剑。此剑在是精灵在阿瓦隆(Avalon)所打造,
剑锷由黄金所铸、剑柄上镶有宝石,并因其锋刃削铁如泥', 
'', '2018-07-16 05:30:15', '2018-07-16 05:30:20', '亚瑟王')

二.项目中:

1.添加依赖:toly01\pom.xml
        <!--jpa依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!--mysql依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
2.数据库信息配置:src\main\resources\application-dev.yml
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver  #驱动类名--不变
    url: jdbc:mysql:///toly #数据库名称
    username: root #用户名
    password: ****** #密码
  jpa:
    hibernate:
      ddl-auto: none #见下
    show-sql: true #控制台显示sql语句
  • jpa hibernate:启动时对表怎么操作:个人还是喜欢自己建表。
ddl-auto: create(删除,创建)
ddl-auto: update(第一次创建,之后更新)
ddl-auto: create-drop(创建,程序停止后删除)
ddl-auto: none(无操作)
3.新建javaBean类--toly1994.com.toly01.bean.Sword

注意:如果已经创建数据库,类名和表名统一。

@Entity //实体类
public class Sword {
    @Id // id
    @GeneratedValue(strategy = GenerationType.IDENTITY) //自增长
    private int id;
    private String name;
    private String info;
    private String imgurl;
    private Date create_time;
    private Date modify_time;
    private String origin;
    //get set toString 省略...
}
4.建立仓储管理对象:toly1994.com.toly01.repository.SwordRepository
public interface SwordRepository extends JpaRepository<Sword, Integer> {

}
5.控制器:toly1994.com.toly01.controller.SwordController

查询操作

5-1-1.查询所有对象
    @Autowired //获取实例
    private SwordRepository mSwordRepository;

    /**
     * @return json字符串显示
     */
    @GetMapping(value = "/swords/findAll")
    public List<Sword> findAllToJson() {
        return mSwordRepository.findAll();
    }
查询所有
5-1-2.根据id查询
    /**
     * @param id 
     * @return
     */
    @GetMapping(value = "/swords/find/{id}")
    public Sword find(@PathVariable("id") Integer id) {
        return mSwordRepository.findById(id).get();
    }
根据id查询
5-1-3.根据其他字段查询:以name为例
  • 在仓储添加方法:toly1994.com.toly01.repository.SwordRepository
    //通过name查询
    public List<Sword> findByName(String name);
  • 添加控制方法
    /**
     * @param name
     * @return
     */
    @GetMapping(value = "/swords/findByName/{name}")
    public List<Sword> findByAtk(@PathVariable("name") String name) {
        return mSwordRepository.findByName(name);
    }
根据name查询

插入操作

在02篇讲述了传值的一些方式,这里也可用参数传值
    /**
     * 添加:返回插入对象的json字符串
     * 
     * @return
     */
    @GetMapping(value = "/swords/insert")
    public Sword insert() {
        Sword sword = new Sword();
        sword.setInfo("《犬夜叉》杀生丸配件,初时是一把不能杀此世之物的治愈之刀," +
                "属于彼世之刀,是刀刀斋用犬大将(斗牙王)的獠牙所打造的剑," +
                "可通过斩杀冥界的使者令死者复活。" +
                "若是以真正的慈悲心使之发动,一挥刀能拯救百命");
        sword.setName("天生牙");
        sword.setOrigin("《犬夜叉》--杀生丸");
        sword.setCreate_time(new Date());
        sword.setModify_time(new Date());
        return mSwordRepository.save(sword);
    }
  • 访问:localhost:8080/swords/insert


    插入操作--网页返回
插入操作--控制台输出
通过url传值构建对象
    /**
     * 添加:通过url传值构建对象
     * @return
     */
    @GetMapping(value = "/swords/insert2")
    public Sword insert2(Sword sword) {
        return mSwordRepository.save(sword);
    }
  • 访问:localhost:8080/swords/insert2?name=九虹&info=圣剑&origin=《幻将录》
更新操作:打错了一个字,来改改吧:配件==>配剑
    @GetMapping(value = "/swords/updata/{id}")
    public Sword updata(Sword sword) {
        return mSwordRepository.save(sword);
    }
  • 访问:http://localhost:8080/swords/updata/2?name=天生牙&info=《犬夜叉》杀生丸配件,初时是一把不能杀此世之物的治愈之刀,
    属于彼世之刀,是刀刀斋用犬大将(斗牙王)的獠牙所打造的剑,可通过斩杀冥界的使者令死者复活。"
    若是以真正的慈悲心使之发动,一挥刀能拯救百命
删除操作
    @GetMapping(value = "/swords/delete/{id}")
    public void insert(@PathVariable("id") Integer id) {
         mSwordRepository.deleteById(id);
    }

事务

1.Service:业务处理逻辑在Controller里写会让他太臃肿,最好写个服务类来写逻辑
  • 新建服务类:toly1994.com.toly01.service.SwordService
@Service
public class SwordService {
    @Autowired
    private SwordRepository mSwordRepository;

    public void insertTwo() {
        Sword jie = new Sword();
        jie.setName("解剑");
        jie.setInfo("幻将录--何解莲");
        mSwordRepository.save(jie);
    }
}
  • 使用服务:top.toly.springboot.database.controlor.SwordController
    @Autowired //得到服务对象
    private SwordService mSwordService;
    /**
     * 查询所有:返回json字符串
     *
     * @return
     */
    @GetMapping(value = "/swords/inset2")
    @Transactional
    public void inset2() {
        mSwordService.insertTwo();
    }
2.事务:同生共死
未开启事务时:
/**
 * 作者:张风捷特烈
 * 时间:2018/7/16:15:31
 * 邮箱:1981462002@qq.com
 * 说明:业务需求:解连双剑必须同时插入成功或失败
 */
@Service
public class SwordService {
    @Autowired
    private SwordRepository mSwordRepository;

    public void insertTwo() {
        Sword jie = new Sword();
        jie.setName("解剑");
        jie.setInfo("幻将录--何解莲");
        mSwordRepository.save(jie);

        Sword lian = new Sword();
        lian.setName("连剑");
        //在这故意给个异常看看结果
        jie.setInfo("幻将录--何解莲" + 1 / 0);
        mSwordRepository.save(lian);
    }
}
开启事务时:加个注解: @Transactional //org.springframework.transaction.annotation.Transactional
  • toly1994.com.toly01.service.SwordService
 @Transactional
    public void insertTwo() {
        ......
 }
  • 这样它们就同生共死了,注意,虽然失败了,但id还是增加了
  • 注:也可在top.toly.springboot.database.controlor.SwordController调用的方法上加注解
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
21天前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
219 4
|
4月前
|
Java API 数据库
JPA简介:Spring Boot环境下的实践指南
上述内容仅是JPA在Spring Boot环境下使用的冰山一角,实际的实践中你会发现更深更广的应用。总而言之,只要掌握了JPA的规则,你就可以借助Spring Boot无比丰富的功能,娴熟地驾驶这台高性能的跑车,在属于你的程序世界里驰骋。
159 15
|
7月前
|
人工智能 自然语言处理 Java
对话即服务:Spring Boot整合MCP让你的CRUD系统秒变AI助手
本文介绍了如何通过Model Context Protocol (MCP) 协议将传统Spring Boot服务改造为支持AI交互的智能系统。MCP作为“万能适配器”,让AI以统一方式与多种服务和数据源交互,降低开发复杂度。文章以图书管理服务为例,详细说明了引入依赖、配置MCP服务器、改造服务方法(注解方式或函数Bean方式)及接口测试的全流程。最终实现用户通过自然语言查询数据库的功能,展示了MCP在简化AI集成、提升系统易用性方面的价值。未来,“对话即服务”有望成为主流开发范式。
5240 7
|
6月前
|
SQL Java 编译器
深入理解 Spring Data JPA 的导入与使用:以 UserRepository为例
本文深入解析了 Spring Data JPA 中 `UserRepository` 的导入与使用。通过示例代码,详细说明了为何需要导入 `User` 实体类、`JpaRepository` 接口及 `@Repository` 注解。这些导入语句分别用于定义操作实体、提供数据库交互方法和标识数据访问组件。文章还探讨了未导入时的编译问题,并展示了实际应用场景,如用户保存、查询与删除操作。合理使用导入语句,可让代码更简洁高效,充分发挥 Spring Data JPA 的优势。
363 0
|
9月前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
9月前
|
JavaScript NoSQL Java
基于SpringBoot+Vue的班级综合测评管理系统设计与实现(系统源码+文档+数据库+部署等)
✌免费选题、功能需求设计、任务书、开题报告、中期检查、程序功能实现、论文辅导、论文降重、答辩PPT辅导、会议视频一对一讲解代码等✌
|
9月前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
9月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
330 2
|
9月前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的冬奥会科普平台设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
Java 数据库连接 关系型数据库
springboot数据库主从方案
本篇分享数据库主从方案,案例采用springboot+mysql+mybatis演示;要想在代码中做主从选择,通常需要明白什么时候切换数据源,怎么切换数据源,下面以代码示例来做阐述; 搭建测试环境(1个master库2个slave库) DataSource多数据源配置 设置mybatis数据源 .
2573 0