Spring Boot的数据访问 之Spring Boot + jpa的demo
1. 快速地创建一个项目,pom中选择如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description> <properties>
<java.version>1.8</java.version>
</properties> <dependencies> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency> </dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
2. 新建一个实体,这边以Book对象为例,主要囊括了书店中书的一些信息
package com.example.demo.entity; import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.io.Serializable; @Entity
public class Book implements Serializable { public static final long seriaVersionUID = 1L; @Id
@GeneratedValue
private long id; @Column(nullable=false,unique=true)
private String name; @Column(nullable=false)
private String author; @Column(nullable=false)
private String ontime; @Column(nullable=false)
private int number; @Column(nullable=false)
private float price; @Column(nullable=false)
private String createdt;
@Column(nullable=false)
private String updatedt;
@Column(nullable=false)
private String creatuid;
@Column(nullable=false)
private String updateuid; public long getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAuthor() {
return author;
} public void setAuthor(String author) {
this.author = author;
} public String getOntime() {
return ontime;
} public void setOntime(String ontime) {
this.ontime = ontime;
} public int getNumber() {
return number;
} public void setNumber(int number) {
this.number = number;
} public float getPrice() {
return price;
} public void setPrice(float price) {
this.price = price;
} public String getCreatedt() {
return createdt;
} public void setCreatedt(String createdt) {
this.createdt = createdt;
} public String getUpdatedt() {
return updatedt;
} public void setUpdatedt(String updatedt) {
this.updatedt = updatedt;
} public String getCreatuid() {
return creatuid;
} public void setCreatuid(String creatuid) {
this.creatuid = creatuid;
} public String getUpdateuid() {
return updateuid;
} public void setUpdateuid(String updateuid) {
this.updateuid = updateuid;
} protected Book(){super();}; public Book(String name, String author, String ontime, int number, float price, String createdt, String updatedt, String creatuid, String updateuid) {
this.name = name;
this.author = author;
this.ontime = ontime;
this.number = number;
this.price = price;
this.createdt = createdt;
this.updatedt = updatedt;
this.creatuid = creatuid;
this.updateuid = updateuid;
} @Override
public String toString() {
return "Book{" +
"id=" + id +
", name='" + name + '\'' +
", author='" + author + '\'' +
", ontime='" + ontime + '\'' +
", number=" + number +
", price=" + price +
", createdt='" + createdt + '\'' +
", updatedt='" + updatedt + '\'' +
", creatuid='" + creatuid + '\'' +
", updateuid='" + updateuid + '\'' +
'}';
}
}
3. 新建一个BookRepository接口,且继承JpaRepository
public interface BookRepository extends JpaRepository<Book, Long> { }
4. 了解hibernate的ddl-auto四种模式和用途
# 服务端口
server.port=8083 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/spring
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.hibernate.ddl-auto=validate
spring.jpa.hibernate.ddl-auto = 可以是4中Value
create
create-drop
validate
update
Hibernate我们公司的正式项目中基本不用,原因是性能上不是很好,不知道其他公司使用起来如何?
hibernate在多线程下,拼接sql,知道数据库有问题,却很难定位到是哪一段sql。后来渐渐弃用。用mybaits了~
5. 添加controller进行新增数据
package com.example.demo.controller; import com.example.demo.entity.Book;
import com.example.demo.entity.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController
public class BookController { @Autowired
private BookRepository bookRepository; @RequestMapping("/save")
@ResponseBody
public void save() {
bookRepository.save(new Book("书名11", "作者", "上架时间", 100, 23, "创建时间", "更新时间", "创建uid", "更新uid"));
bookRepository.save(new Book("书名12", "作者", "20001111", 100, 23, "19990111", "19990111", "3", "4"));
bookRepository.save(new Book("西游记10", "吴承恩", "19991211", 100, 20, "19991111", "19991111", "2", "3"));
} }
项目启动起来,在浏览器中输入 http://localhost:8083/save,查询数据库中,已经新增了三条记录;
可以顺带测试下ddl-auto的四种值,是否有如同描述一般的作用
6. 再添加查询方法,并在controller中进行查询
package com.example.demo.entity; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface BookRepository extends JpaRepository<Book, Long> { List<Book> findByAuthor(String author);
}
再在BookRepository 中添加查找方法,根据作者查询出符合的Book 列表
package com.example.demo.controller; import com.example.demo.entity.Book;
import com.example.demo.entity.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController
public class BookController { @Autowired
private BookRepository bookRepository; @RequestMapping("/save")
public void save() {
bookRepository.save(new Book("书名11", "作者", "上架时间", 100, 23, "创建时间", "更新时间", "创建uid", "更新uid"));
bookRepository.save(new Book("书名12", "作者", "20001111", 100, 23, "19990111", "19990111", "3", "4"));
bookRepository.save(new Book("西游记10", "吴承恩", "19991211", 100, 20, "19991111", "19991111", "2", "3"));
} @RequestMapping("/findByAuthor")
public void findByAuthor() {
List<Book> result = bookRepository.findByAuthor("作者");
System.out.println("一共有多少条呢----" + result.size());
for (Book book : result) {
System.out.println(book);
}
System.out.println("================================");
}
}
保存,启动新项目,在浏览器中输入http://localhost:8083/findByAuthor,查看控制台是否打印出Book信息
Spring Boot的数据访问 之Spring Boot + jpa的demo的更多相关文章
- Spring Boot的数据访问:CrudRepository接口的使用
示例 使用CrudRepository接口访问数据 创建一个新的Maven项目,命名为crudrepositorytest.按照Maven项目的规范,在src/main/下新建一个名为resource ...
- (8)Spring Boot 与数据访问
文章目录 简介 整合基本的JDBC与数据源 整合 druid 数据源 整合 mybatis 简介 对于数据访问层,无论是 SQL 还是 NOSQL ,Spring Boot 默认都采用整合 Sprin ...
- Spring Boot实现数据访问计数器
1.数据访问计数器 在Spring Boot项目中,有时需要数据访问计数器.大致有下列三种情形: 1)纯计数:如登录的密码错误计数,超过门限N次,则表示计数器满,此时可进行下一步处理,如锁定该账户 ...
- Spring Boot框架 - 数据访问 - 整合Mybatis
一.新建Spring Boot项目 注意:创建的时候勾选Mybatis依赖,pom文件如下 <dependency> <groupId>org.mybatis.spring.b ...
- Spring Boot框架 - 数据访问 - JDBC&自动配置
一.新建Spring Boot 工程 特殊勾选数据库相关两个依赖 Mysql Driver — 数据库驱动 Spring Data JDBC 二.配置文件application.properties ...
- Spring 梳理-数据访问-DB
针对接口编程 DAO是指数据访问对象(data access object),它提供了数据读取和写入到数据库中的一种方式.Spring认为,它应该以接口的方式发布功能,而应用程序的其他部分需要通过接口 ...
- Spring Boot 揭秘与实战(二) 数据存储篇 - 数据访问与多数据源配置
文章目录 1. 环境依赖 2. 数据源 3. 单元测试 4. 源代码 在某些场景下,我们可能会在一个应用中需要依赖和访问多个数据源,例如针对于 MySQL 的分库场景.因此,我们需要配置多个数据源. ...
- Spring Boot 数据访问集成 MyBatis 与事物配置
对于软件系统而言,持久化数据到数据库是至关重要的一部分.在 Java 领域,有很多的实现了数据持久化层的工具和框架(ORM).ORM 框架的本质是简化编程中操作数据库的繁琐性,比如可以根据对象生成 S ...
- Spring Boot中使用Spring-data-jpa让数据访问更简单、更优雅
在上一篇Spring中使用JdbcTemplate访问数据库中介绍了一种基本的数据访问方式,结合构建RESTful API和使用Thymeleaf模板引擎渲染Web视图的内容就已经可以完成App服务端 ...
随机推荐
- mac shell终端编辑命令行快捷键——行首,行尾
Ctrl + d 删除一个字符,相当于通常的Delete键(命令行若无所有字符,则相当于exit:处理多行标准输入时也表示eof) Ctrl + h 退格删除一个字符,相当 ...
- C/C++编译、链接、运行的基础知识
0.C/C++从源文件在编译器的作用下先编译成.s的汇编,然后在汇编器的作用下变成.o的可重定向目标文件,然后在链接器的作用下变成可执行文件 1.在项目中设置的编译寻找目录中的.h文件(一般就是inc ...
- slideDown留言板
<!doctype html> <html lang="en"> <head> <meta http-equiv="Conten ...
- 怎样从外网访问内网RESTful API?
本地部署了RESTful API,只能在局域网内访问,怎样从外网也能访问到本地的RESTful API呢?本文将介绍具体的实现步骤. 准备工作 部署并启动RESTful API服务端 默认部署的RES ...
- shell 多行注释 块注释
转自 https://www.cnblogs.com/emanlee/p/3749911.html 1 : ' 被注释的多行内容 ' 2 :<<eof 被注释的多行内容 eof 3 :&l ...
- nginx location分析
- oracle闪回、闪回数据归档Flashback Data Archive (Oracle Total Recall)的真正强大之处、11gR2增强以及合理使用
oracle的闪回很早就出来了,准确的说一直以来应该都较少被真正用户广为使用,除了dba和极少部分开发人员偶尔用于逻辑出错.误删恢复之外,较少被用于产生更有价值的用途. 各种闪回表flashback ...
- socket之 select模型
前段时间一直想学习网络编程的select模型,看了<windows网络编程>的介绍,参考了别人的博客. 这里的资料主要来自http://www.cnblogs.com/RascallySn ...
- svg动态添加小人
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- A writer of dictionaries,a harmless druge.
Nine Years for A and B By Christopher Ricks Dr. Johnson was the greatest man who made a dictionary. ...