添加依赖

新建项目选择web,JPA,MySQL三个依赖

对于已存在的项目可以在bulid.gradle加入,spring boot将会帮你自动配置好

  1. compile('org.springframework.boot:spring-boot-starter-data-jpa')
  2. compile('org.springframework.boot:spring-boot-starter-web')
  3. runtime('mysql:mysql-connector-java') 

配置基本信息

然后在src/main/resources/application.properties下添加基本配置

  1. #数据库连接地址
  2. spring.datasource.url=jdbc:mysql://localhost:3306/jpa?useSSL=false
  3. #数据库账号
  4. spring.datasource.username=root
  5. #数据库密码
  6. spring.datasource.password=123456zxc
  7. #数据库驱动
  8. spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  9. #jpa设置
  10. spring.jpa.hibernate.ddl-auto=create
  11. #是否在控制台显示数据库语句
  12. 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,在应用启动的时候框架会自动去数据库中创建对应的表。

  1. import javax.persistence.Column;
  2. import javax.persistence.Entity;
  3. import javax.persistence.GeneratedValue;
  4. import javax.persistence.Id;
  5.  
  6. @Entity//这是一个和数据库表相关联的类
  7. public class User
  8. {
  9. @Id//主键
  10. @GeneratedValue//自增长
  11. private Long id;//id
  12. @Column(length = 30)//长度30
  13. private String name;//名称
  14. @Column(nullable = false)//不可空
  15. private Integer age;//年龄
  16.  
  17. public User()
  18. {
  19. }
  20.  
  21. public User(String name, Integer age)
  22. {
  23. this.name = name;
  24. this.age = age;
  25. }
  26.  
  27. public Long getId()
  28. {
  29. return id;
  30. }
  31.  
  32. public void setId(Long id)
  33. {
  34. this.id = id;
  35. }
  36.  
  37. public String getName()
  38. {
  39. return name;
  40. }
  41.  
  42. public void setName(String name)
  43. {
  44. this.name = name;
  45. }
  46.  
  47. public Integer getAge()
  48. {
  49. return age;
  50. }
  51.  
  52. public void setAge(Integer age)
  53. {
  54. this.age = age;
  55. }
  56. } 

创建数据访问接口

创建一个userRepository接口,进行数据库操作

  1. import org.springframework.data.jpa.repository.JpaRepository;
  2. import org.springframework.data.jpa.repository.Query;
  3. import org.springframework.data.repository.query.Param;
  4.  
  5. import java.util.List;
  6.  
  7. public interface UserRepository extends JpaRepository<User, Long>//JpaRepository<实体类型,主键类型>
  8. {
  9. // 通过名称找到用户
  10. User findByName(String name);
  11.  
  12. // 通过名称和年龄找到用户
  13. User findByNameAndAge(String name, Integer age);
  14.  
  15. // 通过名称模糊查询
  16. List<User> findByNameLike(String name);
  17.  
  18. // 使用hql查询
  19. @Query("from User u where u.name=:name")//:name对应@Param里的name
  20. User findByHQL(@Param("name") String name);
  21.  
  22. // 使用sql查询
  23. @Query(value = "select * from user where name = ?1 and age = ?2", nativeQuery = true)//?1表示第一个参数,?2表示第二个参数
  24. User findBySQL(String name, Integer age);
  25. }

单元测试

在src/test/java/你的包名/你的项目名ApplicationTests编写对应的单元测试来验证编写的内容是否正确

  1. import org.junit.Assert;
  2. import org.junit.Test;
  3. import org.junit.runner.RunWith;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. import org.springframework.test.context.junit4.SpringRunner;
  7.  
  8. @RunWith(SpringRunner.class)
  9. @SpringBootTest
  10. public class JpaLearnApplicationTests
  11. {
  12. // 注入userRepository
  13. @Autowired
  14. private UserRepository userRepository;
  15.  
  16. @Test
  17. public void contextLoads()
  18. {
  19. // 添加10个测试用例
  20. userRepository.save(new User("QQQ",1));
  21. userRepository.save(new User("WWW",2));
  22. userRepository.save(new User("EEE",3));
  23. userRepository.save(new User("AAA",4));
  24. userRepository.save(new User("SSS",5));
  25. userRepository.save(new User("DDD",6));
  26. userRepository.save(new User("ZZZ",7));
  27. userRepository.save(new User("XXX",8));
  28. userRepository.save(new User("CCC",9));
  29. userRepository.save(new User("QQQ2",10));
  30.  
  31. // 测试findAll, 查询所有记录
  32. Assert.assertEquals(10, userRepository.findAll().size());
  33.  
  34. // 测试findByName, 查询姓名为AAA的User
  35. Assert.assertEquals(4, userRepository.findByName("AAA").getAge().longValue());
  36.  
  37. // 测试findByHQL, 查询姓名为AAA的User
  38. Assert.assertEquals(4, userRepository.findByHQL("AAA").getAge().longValue());
  39.  
  40. // 测试findByNameAndAge, 查询姓名为SSS并且年龄为5的User
  41. Assert.assertEquals("SSS", userRepository.findByNameAndAge("SSS", 5).getName());
  42.  
  43. // 测试findBySQL, 查询姓名为SSS并且年龄为5的User
  44. Assert.assertEquals("SSS", userRepository.findBySQL("SSS", 5).getName());
  45.  
  46. // 测试删除姓名为AAA的User
  47. userRepository.delete(userRepository.findByName("AAA"));
  48.  
  49. // 测试findAll, 查询所有记录, 验证上面的删除是否成功
  50. Assert.assertEquals(9, userRepository.findAll().size());
  51.  
  52. // 测试findAll, 查询名字有Q的有几个
  53. Assert.assertEquals(2,userRepository.findByNameLike("%Q%").size());
  54. }
  55.  
  56. }

点击运行测试用例

原文地址:https://lierabbit.cn/2018/01/15/SpringBoot%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A84-%E4%BD%BF%E7%94%A8jpa%E8%BF%9B%E8%A1%8C%E6%95%B0%E6%8D%AE%E5%BA%93%E6%93%8D%E4%BD%9C/

Spring Boot快速入门(四):使用jpa进行数据库操作的更多相关文章

  1. Spring Boot 快速入门

    Spring Boot 快速入门 http://blog.csdn.net/xiaoyu411502/article/details/47864969 今天给大家介绍一下Spring Boot MVC ...

  2. Spring Boot快速入门(二):http请求

    原文地址:https://lierabbit.cn/articles/4 一.准备 postman:一个接口测试工具 创建一个新工程 选择web 不会的请看Spring Boot快速入门(一):Hel ...

  3. spring boot入门教程——Spring Boot快速入门指南

    Spring Boot已成为当今最流行的微服务开发框架,本文是如何使用Spring Boot快速开始Web微服务开发的指南,我们将使创建一个可运行的包含内嵌Web容器(默认使用的是Tomcat)的可运 ...

  4. Spring Boot 快速入门 史上最简单

    1.Spring Boot 概述 Spring Boot 是所有基于 Spring 开发的项目的起点.Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的 ...

  5. Spring Boot 快速入门(IDEA)

    从字面理解,Boot是引导的意思,因此SpringBoot帮助开发者快速搭建Spring框架:SpringBoot帮助开发者快速启动一个Web容器:SpringBoot继承了原有Spring框架的优秀 ...

  6. 笔记61 Spring Boot快速入门(一)

    IDEA+Spring Boot快速搭建 一.IDEA创建项目 略 项目创建成功后在resources包下,属性文件application.properties中,把数据库连接属性加上,同时可以设置服 ...

  7. spring boot快速入门 1 :创建项目、 三种启动项目方式

    准备工作: (转载)IDEA新建项目时,没有Spring Initializr选项 最近开始使用IDEA作为开发工具,然后也是打算开始学习使用spring boot. 看着博客来进行操作上手sprin ...

  8. spring boot快速入门 4: jpa数据库操作 实现增删改查

    spring boot jpa逆向生成表 简单实例: 第一步:pom文件: <?xml version="1.0" encoding="UTF-8"?&g ...

  9. Spring Boot 快速入门笔记

    Spirng boot笔记 简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发 ...

随机推荐

  1. Java并发编程实践读书笔记(1)线程安全性和对象的共享

    2.线程的安全性 2.1什么是线程安全 在多个线程访问的时候,程序还能"正确",那就是线程安全的. 无状态(可以理解为没有字段的类)的对象一定是线程安全的. 2.2 原子性 典型的 ...

  2. 深入理解计算机系统_3e 第五章家庭作业 CS:APP3e chapter 5 homework

    5.13 A. B. 由浮点数加法的延迟,CPE的下界应该是3. C. 由整数加法的延迟,CPE的下界应该是1. D. 由A中的数据流图,虽然浮点数乘法需要5个周期,但是它没有"数据依赖&q ...

  3. Oracle JDBC:驱动版本区别与区分 [转]

    classes12.jar,ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别,之间的差异 在使用Oracle JDBC驱动时,有些问题你是不是通过替换不同版本的Oracle  ...

  4. Delphi中的RectTracker - 原创

    本文算是副产品,正品是利用FFmpeg从任意视频中生成GIF片段的小程序,写完了就发. 因为要对视频画面进行框选,再生成GIF,所以得有个框选的控件,可Delphi里没有啊,只好自己写一个了. 声明 ...

  5. 后台返回数据事null时怎么进行判断

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...

  6. MySQL时间操作的系统函数用法

    我要查询获得当天凌晨30分的datetime值的方式:select ADDDATE(CURDATE(), INTERVAL TIME_TO_SEC(TIMEDIFF("00:30:00&qu ...

  7. android 串口开发第二篇:利用jni实现android和串口通信

    一:串口通信简介 由于串口开发涉及到jni,所以开发环境需要支持ndk开发,如果未配置ndk配置的朋友,或者对jni不熟悉的朋友,请查看上一篇文章,android 串口开发第一篇:搭建ndk开发环境以 ...

  8. CSS3 使用选择器在页面插入内容

    使用选择器来插入文字 h2:before{ content:'COLUMN'; color:white: background-color:orange: padding:1px 5px; } 注意点 ...

  9. override与重载(overload)的区别

    重载是相同函数名字.参数或参数类型不同,进行多次承载以适应不同的需要.(orerload)是面向过程的重载. (override)是面向对象的重载.是进行基类中的函数重写.

  10. ArcGIS API for Javascript 加载天地图(经纬度投影)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...