现在来介绍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();}
  • 访问:http://localhost:8080/swords/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();}
  • 访问:http://localhost:8080/swords/find/2
根据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);}
  • 访问:http://localhost:8080/swords/findByName/天生牙
根据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);}
  • 访问:http://localhost:8080/swords/delete/3

事务

1.Service:业务处理逻辑在Controller里写会让他太臃肿,最好写个服务类来写逻辑
  • 新建服务类:toly1994.com.toly01.service.SwordService
@Service
public class SwordService {@Autowiredprivate 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")@Transactionalpublic void inset2() {mSwordService.insertTwo();}
  • 访问:http://localhost:8080/swords/insert_two
2.事务:同生共死
未开启事务时:
/*** 作者:张风捷特烈* 时间:2018/7/16:15:31* 邮箱:1981462002@qq.com* 说明:业务需求:解连双剑必须同时插入成功或失败*/
@Service
public class SwordService {@Autowiredprivate 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);}
}
  • 访问:http://localhost:8080/swords/insert_two
  • 结果报错了,但解剑插入成功了
开启事务时:加个注解: @Transactional //org.springframework.transaction.annotation.Transactional
  • toly1994.com.toly01.service.SwordService
 @Transactionalpublic void insertTwo() {......}
  • 这样它们就同生共死了,注意,虽然失败了,但id还是增加了
  • 注:也可在top.toly.springboot.database.controlor.SwordController调用的方法上加注解

转载于:https://www.cnblogs.com/toly-top/p/9781999.html

SpringBoot-07-之数据库JPA(CRUD)相关推荐

  1. quartz配置_基于spring-boot 2.x +quartz 的CRUD任务管理系统

    基于spring-boot 2.x + quartz 的CRUD任务管理系统,适用于中小项目. 开发环境 JDK1.8.Maven.Eclipse 技术栈 SpringBoot 2.0.1.thyme ...

  2. spring-boot (三) spring data jpa

    学习文章来自:http://www.ityouknow.com/spring-boot.html spring data jpa介绍 首先了解JPA是什么? JPA(Java Persistence ...

  3. SPRINGBOOT中如何运用JPA,简单例子

    SPRINGBOOT中如何运用JPA,简单例子 步骤 1 : JPA概念顶折 JPA(Java Persistence API)是Sun官方提出的Java持久化规范,用来方便大家操作数据库. 真正干活 ...

  4. 【SpringBoot新手篇】SpringBoot 集成H2数据库

    [SpringBoot新手篇]SpringBoot 集成H2数据库 概述h2数据库 SpringBoot整合测试 pom yml Embedded 嵌入式 Remote (client/server) ...

  5. MySQL学习笔记02【SQL基本概念与通用语法、数据库的CRUD操作】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  6. SpringBoot集成mysql-connector-java数据库驱动

    官方文档:https://dev.mysql.com/doc/connector-j/8.0/en/ MySQL使用MySQL Connector/J 用Java编程语言开发的客户端应用程序提供连接, ...

  7. 【SpringBoot高级篇】SpringBoot集成MongDB数据库

    [SpringBoot高级篇]SpringBoot集成MongDB数据库 MongoDB是什么 ? 主要特点 MongoDB管理 工具 MongoDB 基本概念 数据库 文档(Document) 集合 ...

  8. javaweb学习总结(三十三)——使用JDBC对数据库进行CRUD

    javaweb学习总结(三十三)--使用JDBC对数据库进行CRUD 一.statement对象介绍 Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过 ...

  9. 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·002【SQL介绍、数据库的CRUD操作(DDL语句)】

    文章目录 一.SQL 1.介绍 2.格式 3.分类 (1).DDL(数据定义语句) (2).DML(数据操作语句) (3).DQL(数据查询语句) (4).DCL(数据控制语句) (5).TPL(事务 ...

  10. SpringBoot整合JDBC数据库操作第二弹-配置基本数据库连接源

    SpringBoot整合JDBC数据库操作第二弹-配置基本数据库连接源 上篇文章我们讲到了如何配置整合JDBC的基础环境,这篇文章我们讲解一下如何去配置服务的DataSource数据库数据源,方便其对 ...

最新文章

  1. mysql insert 的时候时间给默认值
  2. 【转】CEC文件详解
  3. 【Python基础】如何编写简洁美观的Python代码
  4. 深度学习-机器学习(5.3支持向量机Python的应用)
  5. mysql all语法怎么用_MySQL UNION 与 UNION ALL 语法与用法
  6. (原创)c++11中的日期和时间库
  7. daily-question-01(前端每日一题01)
  8. 曾经很火但消失了的软件,你还记得几个?
  9. 【好书试读】Docker全攻略
  10. WebRTC的噪声抑制(noise suppression,NS)算法
  11. 计算机图形系统根据硬件配置,计算机图形系统硬件基础.ppt
  12. take off用法
  13. 开通阿里云视频点播服务
  14. 常用的正则符号(python)
  15. 心法利器[53] | 数据增强的现实应用思考
  16. Vue3+ElementPlus网页端聊天|vue3.0仿微信/QQ界面实例
  17. 记一次 Redis 连接池泄漏问题排查
  18. 汇编语言--键盘扫描及显示实验(含代码解释)
  19. xmms乱码解决方法
  20. Ansys Zemax | 多边形扫描仪设计示例

热门文章

  1. FRR vxlan实验
  2. 硬件设计第二部:热水泵注水循环系统设计
  3. 【Pytorch学习笔记】3.深度学习基础
  4. WordPress网站管家小程序源码
  5. java尚未初始化变量_java-解决“变量可能尚未初始化”错误
  6. bson java_使用Gobson / Mgo解组BSON数据
  7. 胶囊网络(Capsule)学习笔记
  8. 域名租用的时候要注意什么?
  9. Idea 使用SVN教程(有图)
  10. 鼠标悬浮给图片加边框,适合大型展示