前提:

  创建一个springboot项目

  创建一个名为springboottest的MySQL数据库

  

1 jar包准备

  jpa的jar包

  mysql驱动的jar包

  druid数据库连接池的jar包

  lombok工具jar包

  注意01: druid的jar包在都如时一定要指定版本,其它的spring boot项目会自动进行版本管理

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5.  
  6. <groupId>cn.xiangxu</groupId>
  7. <artifactId>springboot</artifactId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. <packaging>jar</packaging>
  10.  
  11. <name>springboot</name>
  12. <description>Demo project for Spring Boot</description>
  13.  
  14. <parent>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-parent</artifactId>
  17. <version>1.5.8.RELEASE</version>
  18. <relativePath/> <!-- lookup parent from repository -->
  19. </parent>
  20.  
  21. <properties>
  22. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  23. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  24. <java.version>1.8</java.version>
  25. </properties>
  26.  
  27. <dependencies>
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-web</artifactId>
  31. </dependency>
  32.  
  33. <dependency>
  34. <groupId>org.springframework.boot</groupId>
  35. <artifactId>spring-boot-starter-test</artifactId>
  36. <scope>test</scope>
  37. </dependency>
  38.  
  39. <!--数据库相关-->
  40. <dependency>
  41. <groupId>mysql</groupId>
  42. <artifactId>mysql-connector-java</artifactId>
  43. </dependency>
  44. <dependency>
  45. <groupId>org.springframework.boot</groupId>
  46. <artifactId>spring-boot-starter-data-jpa</artifactId>
  47. </dependency>
  48. <dependency>
  49. <groupId>com.alibaba</groupId>
  50. <artifactId>druid</artifactId>
  51. <version>1.0.19</version>
  52. </dependency>
  53.  
  54. <!--工具-->
  55. <dependency>
  56. <groupId>org.projectlombok</groupId>
  57. <artifactId>lombok</artifactId>
  58. </dependency>
  59.  
  60. </dependencies>
  61.  
  62. <build>
  63. <plugins>
  64. <plugin>
  65. <groupId>org.springframework.boot</groupId>
  66. <artifactId>spring-boot-maven-plugin</artifactId>
  67. </plugin>
  68. </plugins>
  69. </build>
  70.  
  71. </project>

pom.xml

2 数据库连接池配置和JPA配置

  1. spring:
  2. datasource:
  3. type: com.alibaba.druid.pool.DruidDataSource # 指定使用druid连接池
  4. driver-class-name: com.mysql.jdbc.Driver
  5. username: root
  6. password: 182838
  7. url: jdbc:mysql://127.0.0.1/springboottest?characterEncoding=utf-8&useSSL=false
  8.  
  9. #最大活跃数
  10. maxActive: 20
  11. #初始化数量
  12. initialSize: 1
  13. #最大连接等待超时时间
  14. maxWait: 60000
  15. #打开PSCache,并且指定每个连接PSCache的大小
  16. poolPreparedStatements: true
  17. maxPoolPreparedStatementPerConnectionSize: 20
  18. #通过connectionProperties属性来打开mergeSql功能;慢SQL记录
  19. #connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
  20. minIdle: 1
  21. timeBetweenEvictionRunsMillis: 60000
  22. minEvictableIdleTimeMillis: 300000
  23. validationQuery: select 1 from dual
  24. testWhileIdle: true
  25. testOnBorrow: false
  26. testOnReturn: false
  27. #配置监控统计拦截的filters,去掉后监控界面sql将无法统计,'wall'用于防火墙
  28. filters: stat, wall, log4j
  29.  
  30. jpa:
  31. show-sql: true
  32. hibernate:
  33. ddl-auto: update
  34. # format-sql: true # TODO: 配置失败

连接池和JPA配置

  1. package cn.xiangxu.springboot.baseConfig;
  2.  
  3. import com.alibaba.druid.support.http.StatViewServlet;
  4. import com.alibaba.druid.support.http.WebStatFilter;
  5. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  6. import org.springframework.boot.web.servlet.ServletRegistrationBean;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9.  
  10. /**
  11. * 配置DRUID访问的Sevlet和filter
  12. */
  13. @Configuration
  14. public class DruidConfiguration {
  15.  
  16. @Bean
  17. public ServletRegistrationBean statViewServlet(){
  18. //创建servlet注册实体
  19. ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
  20. //设置ip白名单
  21. servletRegistrationBean.addInitParameter("allow","127.0.0.1");
  22. //设置ip黑名单,如果allow与deny共同存在时,deny优先于allow
  23. servletRegistrationBean.addInitParameter("deny","192.168.0.19");
  24. //设置控制台管理用户
  25. servletRegistrationBean.addInitParameter("loginUsername","wys");
  26. servletRegistrationBean.addInitParameter("loginPassword","123456");
  27. //是否可以重置数据
  28. servletRegistrationBean.addInitParameter("resetEnable","false");
  29. return servletRegistrationBean;
  30. }
  31.  
  32. @Bean
  33. public FilterRegistrationBean statFilter(){
  34. //创建过滤器
  35. FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
  36. //设置过滤器过滤路径
  37. filterRegistrationBean.addUrlPatterns("/*");
  38. //忽略过滤的形式
  39. filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
  40. return filterRegistrationBean;
  41. }
  42. }

druid的servlet和filter配置

jpa基础配置详解:点击前往

druid配置详解:点击前往

3 创建一个实体类

  实体类相关注解说明:点击前往

  技巧01:lombok的妙用

  注意01:使用lombok的坑 -> 即使导入了相关的jar包,lombok的注解在IDEA中时不会生效的,但是项目进行打包后就会生效 -> 解决办法

  1. package cn.xiangxu.springboot.entity.dataObject;
  2.  
  3. import lombok.Data;
  4.  
  5. import javax.persistence.Column;
  6. import javax.persistence.Entity;
  7. import javax.persistence.GeneratedValue;
  8. import javax.persistence.Id;
  9.  
  10. @Entity
  11. @Data
  12. public class Girl {
  13. @Id
  14. @GeneratedValue
  15. @Column(name = "girlId")
  16. private Integer id;
  17. private Integer age;
  18. private String name;
  19.  
  20. public Girl() {
  21. }
  22.  
  23. public Girl(Integer age, String name) {
  24. this.age = age;
  25. this.name = name;
  26. }
  27. }

实体类

4 创建一个与实体类对应的持久层接口

  注意01:该接口需要实现一个特定的父接口JpaRepository,继承了这个接口后就该接口就会自动被容器管理,无需再添加注解

  1. chijge cn.xiangxu.springboot.repository;
  2.  
  3. import cn.xiangxu.springboot.entity.dataObject.Girl;
  4. import org.springframework.data.jpa.repository.JpaRepository;
  5.  
  6. public interface GirlRepository extends JpaRepository<Girl, Integer> {
  7.  
  8. }

持久层接口

5 创建一个服务层接口

  调用持久层对象的相应方法实现简单的增删改查操作

  1. package cn.xiangxu.springboot.service;
  2.  
  3. import cn.xiangxu.springboot.entity.dataObject.Girl;
  4.  
  5. import java.util.List;
  6.  
  7. public interface GirlService {
  8. Girl saveGirl(Girl girl);
  9. Girl findGirlOne(Integer id);
  10. List<Girl> finGirldAll();
  11. }

服务层接口

  1. package cn.xiangxu.springboot.service.serviceImpl;
  2.  
  3. import cn.xiangxu.springboot.entity.dataObject.Girl;
  4. import cn.xiangxu.springboot.repository.GirlRepository;
  5. import cn.xiangxu.springboot.service.GirlService;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Service;
  8.  
  9. import java.util.List;
  10.  
  11. @Service("girlService")
  12. public class GirlServiceImpl implements GirlService {
  13. @Autowired
  14. private GirlRepository girlRepository;
  15.  
  16. @Override
  17. public Girl saveGirl(Girl girl) {
  18. return girlRepository.save(girl);
  19. }
  20.  
  21. @Override
  22. public Girl findGirlOne(Integer id) {
  23. return girlRepository.findOne(id);
  24. }
  25.  
  26. @Override
  27. public List<Girl> finGirldAll() {
  28. return girlRepository.findAll();
  29. }
  30. }

服务层接口实现类

6 创建服务层测试类

  1. package cn.xiangxu.springboot.service.serviceImpl;
  2.  
  3. import cn.xiangxu.springboot.entity.dataObject.Girl;
  4. import cn.xiangxu.springboot.service.GirlService;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.junit.Assert;
  7. import org.junit.Test;
  8. import org.junit.runner.RunWith;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.boot.test.context.SpringBootTest;
  11. import org.springframework.test.context.junit4.SpringRunner;
  12.  
  13. import java.util.List;
  14.  
  15. import static org.junit.Assert.*;
  16.  
  17. @RunWith(SpringRunner.class)
  18. @SpringBootTest
  19. @Slf4j // 日志相关
  20. public class GirlServiceImplTest {
  21.  
  22. @Autowired
  23. private GirlService girlService;
  24.  
  25. @Test
  26. public void saveGirl() throws Exception {
  27. Girl girl = new Girl(25, "三少");
  28. Girl result = girlService.saveGirl(girl);
  29. log.info("【插入数据】");
  30. Assert.assertNotEquals(null, result);
  31. }
  32.  
  33. @Test
  34. public void findGirlOne() throws Exception {
  35. Girl result = girlService.findGirlOne(1);
  36. log.info("【查询单个】");
  37. Assert.assertEquals(new Integer(1), result.getId());
  38. }
  39.  
  40. @Test
  41. public void finGirldAll() throws Exception {
  42. List<Girl> girls = girlService.finGirldAll();
  43. log.info("查询列表");
  44. Assert.assertNotEquals(new Integer(0), new Integer(girls.size()));
  45. }
  46.  
  47. }

服务层测试类

7 具体使用02

  说明:不使用数据库连接池,这里只是给出一些特殊的地方

  坑01:springboot版本升级后,实体类中的id字段必须根据数据库类型设定对应的默认主键值产生类型

  1. package cn.xiangxu.jpa_demo01.domain.domain_do;
  2.  
  3. import lombok.Data;
  4.  
  5. import javax.persistence.*;
  6.  
  7. /**
  8. * @author 王杨帅
  9. * @create 2018-08-12 15:01
  10. * @desc
  11. **/
  12. @Entity
  13. @Table(name = "student")
  14. @Data
  15. public class Student {
  16.  
  17. @Id
  18. @GeneratedValue(strategy = GenerationType.IDENTITY)
  19. private String id;
  20. private String name;
  21. private Integer age;
  22. private String address;
  23. }

Student.java

  1. spring:
  2. datasource:
  3. url: jdbc:mysql://127.0.0.1/testdemo?characterEncoding=utf-8&useSSL=false
  4. username: root
  5. password: 182838
  6.  
  7. jpa:
  8. properties:
  9. hibernate:
  10. format_sql: true
  11. show_sql: true

配置类

  1. package cn.xiangxu.jpa_demo01.repository;
  2.  
  3. import cn.xiangxu.jpa_demo01.domain.domain_do.Student;
  4. import org.junit.Assert;
  5. import org.junit.Test;
  6. import org.junit.runner.RunWith;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.boot.test.context.SpringBootTest;
  9. import org.springframework.test.context.junit4.SpringRunner;
  10.  
  11. import java.util.List;
  12.  
  13. import static org.junit.Assert.*;
  14.  
  15. @RunWith(SpringRunner.class)
  16. @SpringBootTest
  17. public class StudentRepositoryTest {
  18.  
  19. @Autowired
  20. private StudentRepository studentRepository;
  21.  
  22. @Test
  23. public void findAll() {
  24. List<Student> all = studentRepository.findAll();
  25. Assert.assertTrue(all.size() > 0);
  26. }
  27.  
  28. }

测试类

JPA的基本使用的更多相关文章

  1. 快速搭建springmvc+spring data jpa工程

    一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...

  2. 玩转spring boot——结合JPA入门

    参考官方例子:https://spring.io/guides/gs/accessing-data-jpa/ 接着上篇内容 一.小试牛刀 创建maven项目后,修改pom.xml文件 <proj ...

  3. 玩转spring boot——结合JPA事务

    接着上篇 一.准备工作 修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...

  4. springmvc+jpa实现分页的两种方式

    1.工具类 public final class QueryTool { public static PageRequest buildPageRequest(int pageNumber, int ...

  5. spring boot(五):spring data jpa的使用

    在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spr ...

  6. 转:使用 Spring Data JPA 简化 JPA 开发

    从一个简单的 JPA 示例开始 本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示 ...

  7. 一步步学习 Spring Data 系列之JPA(一)

    引入: Spring Data是SpringSource基金会下的一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得数据库的访问变得方便快捷,并支持map-reduce框架和云计算数据服 ...

  8. 一步步学习 Spring Data 系列之JPA(二)

    继上一篇文章对Spring Data JPA更深( )一步剖析. 上一篇只是简单的介绍了Spring Data JPA的简单使用,而往往在项目中这一点功能并不能满足我们的需求.这是当然的,在业务中查询 ...

  9. jpa+springmvc+springdata(一)

    学习尚硅谷笔记: 首先配置application.xml: <?xml version="1.0" encoding="UTF-8"?> <b ...

  10. jpa

    学习尚硅谷jpa笔记: 所依赖的jar包: 首先在META-INF下创建配置文件,persistence.xml <?xml version="1.0" encoding=& ...

随机推荐

  1. SQL知识目录

    SQL理论知识 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理 ...

  2. propertychange 不起作用

    兼容性问题.将$("#systemLogSettings td[name='nMaxFileSize'] input").on("input propertychange ...

  3. openstack windows 2008镜像 制作

    openstack windows 2008镜像 制作 openstack centos6 centos7 kvm 镜像制作 http://www.cnblogs.com/elvi/p/7922421 ...

  4. 51Nod 1084 矩阵取数问题 V2 双线程DP 滚动数组优化

    基准时间限制:2 秒 空间限制:131072 KB  一个M*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,先从左上走到右下,再从右下走到左上.第1遍时只能向下和向右走,第2遍时只能向 ...

  5. 51nod 1020 逆序排列 DP

    在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数. 如2 4 3 1中,2 1,4 3,4 1,3 1是逆序 ...

  6. 如何在PHP7中安装mysql的扩展

    相对与PHP5,PHP7的最大变化之一是移除了mysql扩展,推荐使用mysqli或者pdo_mysql,实际上在PHP5.5开始,PHP就着手开始准备弃用mysql扩展,如果你使用mysql扩展,可 ...

  7. Undefined index: HTTP_RAW_POST_DATA的解决办法

    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 替换为 $postStr = isset($GLOBALS['HTTP_RAW_POST_DA ...

  8. ibv_get_device_guid()函数

    uint64_t ibv_get_device_guid(struct ibv_device *device); 描述 函数返回RDMA 设备的 GUID(The Global Unique IDen ...

  9. java多线程编程核心技术——第二章

    第一节synchronized同步方法目录 1.1方法内的变量为线程安全的 1.2实例变量非线程安全 1.3多个对象多个锁 1.4synchronized方法与锁对象 1.5脏读 1.6synchro ...

  10. eclipse导入新项目后,运行时找不到主类解决办法

    最近在学习多线程,今天下了一套源码,导入到eclipse里后,随便找了个带main()的类试了一下,找不到主类. 首先想到的解决办法是把工程clean一下,并没有用.去网上找了一个遍终于找到了管用的方 ...