Spring Boot快速入门(四):使用jpa进行数据库操作
添加依赖
新建项目选择web,JPA,MySQL三个依赖
对于已存在的项目可以在bulid.gradle加入,spring boot将会帮你自动配置好
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-web')
runtime('mysql:mysql-connector-java')
配置基本信息
然后在src/main/resources/application.properties下添加基本配置
#数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/jpa?useSSL=false
#数据库账号
spring.datasource.username=root
#数据库密码
spring.datasource.password=123456zxc
#数据库驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#jpa设置
spring.jpa.hibernate.ddl-auto=create
#是否在控制台显示数据库语句
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.hbm2ddl.auto
其作用是:自动创建、更新、验证数据库表结构。该参数的几种配置如下:
create
:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。create-drop
:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。update
:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。validate
:每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。- none:什么都不做
至此基本配置完成
创建实体
创建一个User实体,包含id(主键)、name(姓名)、age(年龄)属性,通过ORM框架其会被映射到数据库表中,由于配置了hibernate.hbm2ddl.auto
,在应用启动的时候框架会自动去数据库中创建对应的表。
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id; @Entity//这是一个和数据库表相关联的类
public class User
{
@Id//主键
@GeneratedValue//自增长
private Long id;//id
@Column(length = 30)//长度30
private String name;//名称
@Column(nullable = false)//不可空
private Integer age;//年龄 public User()
{
} public User(String name, Integer age)
{
this.name = name;
this.age = age;
} public Long getId()
{
return id;
} public void setId(Long id)
{
this.id = id;
} public String getName()
{
return name;
} public void setName(String name)
{
this.name = name;
} public Integer getAge()
{
return age;
} public void setAge(Integer age)
{
this.age = age;
}
}
创建数据访问接口
创建一个userRepository接口,进行数据库操作
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import java.util.List; public interface UserRepository extends JpaRepository<User, Long>//JpaRepository<实体类型,主键类型>
{
// 通过名称找到用户
User findByName(String name); // 通过名称和年龄找到用户
User findByNameAndAge(String name, Integer age); // 通过名称模糊查询
List<User> findByNameLike(String name); // 使用hql查询
@Query("from User u where u.name=:name")//:name对应@Param里的name
User findByHQL(@Param("name") String name); // 使用sql查询
@Query(value = "select * from user where name = ?1 and age = ?2", nativeQuery = true)//?1表示第一个参数,?2表示第二个参数
User findBySQL(String name, Integer age);
}
单元测试
在src/test/java/你的包名/你的项目名ApplicationTests编写对应的单元测试来验证编写的内容是否正确
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class)
@SpringBootTest
public class JpaLearnApplicationTests
{
// 注入userRepository
@Autowired
private UserRepository userRepository; @Test
public void contextLoads()
{
// 添加10个测试用例
userRepository.save(new User("QQQ",1));
userRepository.save(new User("WWW",2));
userRepository.save(new User("EEE",3));
userRepository.save(new User("AAA",4));
userRepository.save(new User("SSS",5));
userRepository.save(new User("DDD",6));
userRepository.save(new User("ZZZ",7));
userRepository.save(new User("XXX",8));
userRepository.save(new User("CCC",9));
userRepository.save(new User("QQQ2",10)); // 测试findAll, 查询所有记录
Assert.assertEquals(10, userRepository.findAll().size()); // 测试findByName, 查询姓名为AAA的User
Assert.assertEquals(4, userRepository.findByName("AAA").getAge().longValue()); // 测试findByHQL, 查询姓名为AAA的User
Assert.assertEquals(4, userRepository.findByHQL("AAA").getAge().longValue()); // 测试findByNameAndAge, 查询姓名为SSS并且年龄为5的User
Assert.assertEquals("SSS", userRepository.findByNameAndAge("SSS", 5).getName()); // 测试findBySQL, 查询姓名为SSS并且年龄为5的User
Assert.assertEquals("SSS", userRepository.findBySQL("SSS", 5).getName()); // 测试删除姓名为AAA的User
userRepository.delete(userRepository.findByName("AAA")); // 测试findAll, 查询所有记录, 验证上面的删除是否成功
Assert.assertEquals(9, userRepository.findAll().size()); // 测试findAll, 查询名字有Q的有几个
Assert.assertEquals(2,userRepository.findByNameLike("%Q%").size());
} }
点击运行测试用例
Spring Boot快速入门(四):使用jpa进行数据库操作的更多相关文章
- Spring Boot 快速入门
Spring Boot 快速入门 http://blog.csdn.net/xiaoyu411502/article/details/47864969 今天给大家介绍一下Spring Boot MVC ...
- Spring Boot快速入门(二):http请求
原文地址:https://lierabbit.cn/articles/4 一.准备 postman:一个接口测试工具 创建一个新工程 选择web 不会的请看Spring Boot快速入门(一):Hel ...
- spring boot入门教程——Spring Boot快速入门指南
Spring Boot已成为当今最流行的微服务开发框架,本文是如何使用Spring Boot快速开始Web微服务开发的指南,我们将使创建一个可运行的包含内嵌Web容器(默认使用的是Tomcat)的可运 ...
- Spring Boot 快速入门 史上最简单
1.Spring Boot 概述 Spring Boot 是所有基于 Spring 开发的项目的起点.Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的 ...
- Spring Boot 快速入门(IDEA)
从字面理解,Boot是引导的意思,因此SpringBoot帮助开发者快速搭建Spring框架:SpringBoot帮助开发者快速启动一个Web容器:SpringBoot继承了原有Spring框架的优秀 ...
- 笔记61 Spring Boot快速入门(一)
IDEA+Spring Boot快速搭建 一.IDEA创建项目 略 项目创建成功后在resources包下,属性文件application.properties中,把数据库连接属性加上,同时可以设置服 ...
- spring boot快速入门 1 :创建项目、 三种启动项目方式
准备工作: (转载)IDEA新建项目时,没有Spring Initializr选项 最近开始使用IDEA作为开发工具,然后也是打算开始学习使用spring boot. 看着博客来进行操作上手sprin ...
- spring boot快速入门 4: jpa数据库操作 实现增删改查
spring boot jpa逆向生成表 简单实例: 第一步:pom文件: <?xml version="1.0" encoding="UTF-8"?&g ...
- Spring Boot 快速入门笔记
Spirng boot笔记 简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发 ...
随机推荐
- java多线程编程核心技术——全书总结
这本书大致上是看完了,不过第七章结束的匆匆忙忙很不好. 不过好在还是看完了,勉强算吧. 回想这一年,挺感慨的,心里一直谋求着进步,却很难行动起来. 仔细想想确实啊,想一直进步肯定要牺牲自己的业余时间, ...
- CentOS6.5安装MySQL5.6
CentOS6.5安装MySQL5.6,开放防火墙3306端口,允许其他主机使用root账户密码访问MySQL数据库 查看操作系统相关信息 ** 该查看方法只适用于CentOS6.5 (lsb_rel ...
- mysql千万级数据表,创建表及字段扩展的几条建议
一:概述 当我们设计一个系统时,需要考虑到系统的运行一段时间后,表里数据量大约有多少,如果在初期,就能估算到某几张表数据量非常庞大时(比如聊天消息表),就要把表创建好,这篇文章从创建表,增加数据,以及 ...
- J2EE: JCA (Java Connector Architecture) [转]
JCA (J2EE 连接器架构,Java Connector Architecture)是对J2EE标准集的重要补充.因为它注重的是将Java程序连接到非Java程序和软件包中间件的开发.连接器特指基 ...
- 让你用sublime写出最完美的python代码--windows环境
至少很长一段时间内,我个人用的一直是pycharm,也感觉挺好用的,也没啥大毛病 但是pycharm确实有点笨重,啥功能都有,但是有很多可能这辈子我也不会用到,并且pycharm打开的速度确实不敢恭维 ...
- Iframe 自适应高度
网页中,经常遇见嵌套问题.我们怎么解决好点,我个人喜欢使用 Html 中的 Iframe 标签.忘记在哪里找的代码了. Iframe 的代码: <iframe src="indexpa ...
- 安装eclipse时跳转到网页提示JRE Missing
可能的原因:jdk与安装的eclipse不兼容,可能64位机器安装了32位的jdk,导致64位的eclipse不能识别.
- SQL Server AlwaysOn添加监听器失败
标签:MSSQL/ 一.错误描述 1.群集服务未能使群集服务或应用程序“Alwayson22”完全联机或脱机.一个或多个资源可能处于失败状态.这可能会影响群集服务或应用程序的可用性 2.群集服务中的群 ...
- bzoj 2002 HNOI 2010 弹飞绵羊
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- DNS查询的工作原理
二.DNS查询的工作原理 1.DNS查询过程按两部分进行 1.名称查询从客户端计算机开始, 并传送给本机的DNS客户服务程序进行解析 2.如果不能再本机解析查询, 可根据设定的查询DN ...