JPA的基本使用
前提:
创建一个springboot项目
创建一个名为springboottest的MySQL数据库
1 jar包准备
jpa的jar包
mysql驱动的jar包
druid数据库连接池的jar包
lombok工具jar包
注意01: druid的jar包在都如时一定要指定版本,其它的spring boot项目会自动进行版本管理
- <?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>
- <groupId>cn.xiangxu</groupId>
- <artifactId>springboot</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>springboot</name>
- <description>Demo project for Spring Boot</description>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.5.8.RELEASE</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <java.version>1.8</java.version>
- </properties>
- <dependencies>
- <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>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-jpa</artifactId>
- </dependency>
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid</artifactId>
- <version>1.0.19</version>
- </dependency>
- <!--工具-->
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- </project>
pom.xml
2 数据库连接池配置和JPA配置
- spring:
- datasource:
- type: com.alibaba.druid.pool.DruidDataSource # 指定使用druid连接池
- driver-class-name: com.mysql.jdbc.Driver
- username: root
- password: 182838
- url: jdbc:mysql://127.0.0.1/springboottest?characterEncoding=utf-8&useSSL=false
- #最大活跃数
- maxActive: 20
- #初始化数量
- initialSize: 1
- #最大连接等待超时时间
- maxWait: 60000
- #打开PSCache,并且指定每个连接PSCache的大小
- poolPreparedStatements: true
- maxPoolPreparedStatementPerConnectionSize: 20
- #通过connectionProperties属性来打开mergeSql功能;慢SQL记录
- #connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
- minIdle: 1
- timeBetweenEvictionRunsMillis: 60000
- minEvictableIdleTimeMillis: 300000
- validationQuery: select 1 from dual
- testWhileIdle: true
- testOnBorrow: false
- testOnReturn: false
- #配置监控统计拦截的filters,去掉后监控界面sql将无法统计,'wall'用于防火墙
- filters: stat, wall, log4j
- jpa:
- show-sql: true
- hibernate:
- ddl-auto: update
- # format-sql: true # TODO: 配置失败
连接池和JPA配置
- package cn.xiangxu.springboot.baseConfig;
- import com.alibaba.druid.support.http.StatViewServlet;
- import com.alibaba.druid.support.http.WebStatFilter;
- import org.springframework.boot.web.servlet.FilterRegistrationBean;
- import org.springframework.boot.web.servlet.ServletRegistrationBean;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- /**
- * 配置DRUID访问的Sevlet和filter
- */
- @Configuration
- public class DruidConfiguration {
- @Bean
- public ServletRegistrationBean statViewServlet(){
- //创建servlet注册实体
- ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
- //设置ip白名单
- servletRegistrationBean.addInitParameter("allow","127.0.0.1");
- //设置ip黑名单,如果allow与deny共同存在时,deny优先于allow
- servletRegistrationBean.addInitParameter("deny","192.168.0.19");
- //设置控制台管理用户
- servletRegistrationBean.addInitParameter("loginUsername","wys");
- servletRegistrationBean.addInitParameter("loginPassword","123456");
- //是否可以重置数据
- servletRegistrationBean.addInitParameter("resetEnable","false");
- return servletRegistrationBean;
- }
- @Bean
- public FilterRegistrationBean statFilter(){
- //创建过滤器
- FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
- //设置过滤器过滤路径
- filterRegistrationBean.addUrlPatterns("/*");
- //忽略过滤的形式
- filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
- return filterRegistrationBean;
- }
- }
druid的servlet和filter配置
jpa基础配置详解:点击前往
druid配置详解:点击前往
3 创建一个实体类
实体类相关注解说明:点击前往
技巧01:lombok的妙用
注意01:使用lombok的坑 -> 即使导入了相关的jar包,lombok的注解在IDEA中时不会生效的,但是项目进行打包后就会生效 -> 解决办法
- package cn.xiangxu.springboot.entity.dataObject;
- import lombok.Data;
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- @Entity
- @Data
- public class Girl {
- @Id
- @GeneratedValue
- @Column(name = "girlId")
- private Integer id;
- private Integer age;
- private String name;
- public Girl() {
- }
- public Girl(Integer age, String name) {
- this.age = age;
- this.name = name;
- }
- }
实体类
4 创建一个与实体类对应的持久层接口
注意01:该接口需要实现一个特定的父接口JpaRepository,继承了这个接口后就该接口就会自动被容器管理,无需再添加注解
- chijge cn.xiangxu.springboot.repository;
- import cn.xiangxu.springboot.entity.dataObject.Girl;
- import org.springframework.data.jpa.repository.JpaRepository;
- public interface GirlRepository extends JpaRepository<Girl, Integer> {
- }
持久层接口
5 创建一个服务层接口
调用持久层对象的相应方法实现简单的增删改查操作
- package cn.xiangxu.springboot.service;
- import cn.xiangxu.springboot.entity.dataObject.Girl;
- import java.util.List;
- public interface GirlService {
- Girl saveGirl(Girl girl);
- Girl findGirlOne(Integer id);
- List<Girl> finGirldAll();
- }
服务层接口
- package cn.xiangxu.springboot.service.serviceImpl;
- import cn.xiangxu.springboot.entity.dataObject.Girl;
- import cn.xiangxu.springboot.repository.GirlRepository;
- import cn.xiangxu.springboot.service.GirlService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.List;
- @Service("girlService")
- public class GirlServiceImpl implements GirlService {
- @Autowired
- private GirlRepository girlRepository;
- @Override
- public Girl saveGirl(Girl girl) {
- return girlRepository.save(girl);
- }
- @Override
- public Girl findGirlOne(Integer id) {
- return girlRepository.findOne(id);
- }
- @Override
- public List<Girl> finGirldAll() {
- return girlRepository.findAll();
- }
- }
服务层接口实现类
6 创建服务层测试类
- package cn.xiangxu.springboot.service.serviceImpl;
- import cn.xiangxu.springboot.entity.dataObject.Girl;
- import cn.xiangxu.springboot.service.GirlService;
- import lombok.extern.slf4j.Slf4j;
- 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;
- import java.util.List;
- import static org.junit.Assert.*;
- @RunWith(SpringRunner.class)
- @SpringBootTest
- @Slf4j // 日志相关
- public class GirlServiceImplTest {
- @Autowired
- private GirlService girlService;
- @Test
- public void saveGirl() throws Exception {
- Girl girl = new Girl(25, "三少");
- Girl result = girlService.saveGirl(girl);
- log.info("【插入数据】");
- Assert.assertNotEquals(null, result);
- }
- @Test
- public void findGirlOne() throws Exception {
- Girl result = girlService.findGirlOne(1);
- log.info("【查询单个】");
- Assert.assertEquals(new Integer(1), result.getId());
- }
- @Test
- public void finGirldAll() throws Exception {
- List<Girl> girls = girlService.finGirldAll();
- log.info("查询列表");
- Assert.assertNotEquals(new Integer(0), new Integer(girls.size()));
- }
- }
服务层测试类
7 具体使用02
说明:不使用数据库连接池,这里只是给出一些特殊的地方
坑01:springboot版本升级后,实体类中的id字段必须根据数据库类型设定对应的默认主键值产生类型
- package cn.xiangxu.jpa_demo01.domain.domain_do;
- import lombok.Data;
- import javax.persistence.*;
- /**
- * @author 王杨帅
- * @create 2018-08-12 15:01
- * @desc
- **/
- @Entity
- @Table(name = "student")
- @Data
- public class Student {
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- private String id;
- private String name;
- private Integer age;
- private String address;
- }
Student.java
- spring:
- datasource:
- url: jdbc:mysql://127.0.0.1/testdemo?characterEncoding=utf-8&useSSL=false
- username: root
- password: 182838
- jpa:
- properties:
- hibernate:
- format_sql: true
- show_sql: true
配置类
- package cn.xiangxu.jpa_demo01.repository;
- import cn.xiangxu.jpa_demo01.domain.domain_do.Student;
- 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;
- import java.util.List;
- import static org.junit.Assert.*;
- @RunWith(SpringRunner.class)
- @SpringBootTest
- public class StudentRepositoryTest {
- @Autowired
- private StudentRepository studentRepository;
- @Test
- public void findAll() {
- List<Student> all = studentRepository.findAll();
- Assert.assertTrue(all.size() > 0);
- }
- }
测试类
JPA的基本使用的更多相关文章
- 快速搭建springmvc+spring data jpa工程
一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...
- 玩转spring boot——结合JPA入门
参考官方例子:https://spring.io/guides/gs/accessing-data-jpa/ 接着上篇内容 一.小试牛刀 创建maven项目后,修改pom.xml文件 <proj ...
- 玩转spring boot——结合JPA事务
接着上篇 一.准备工作 修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...
- springmvc+jpa实现分页的两种方式
1.工具类 public final class QueryTool { public static PageRequest buildPageRequest(int pageNumber, int ...
- spring boot(五):spring data jpa的使用
在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spr ...
- 转:使用 Spring Data JPA 简化 JPA 开发
从一个简单的 JPA 示例开始 本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示 ...
- 一步步学习 Spring Data 系列之JPA(一)
引入: Spring Data是SpringSource基金会下的一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得数据库的访问变得方便快捷,并支持map-reduce框架和云计算数据服 ...
- 一步步学习 Spring Data 系列之JPA(二)
继上一篇文章对Spring Data JPA更深( )一步剖析. 上一篇只是简单的介绍了Spring Data JPA的简单使用,而往往在项目中这一点功能并不能满足我们的需求.这是当然的,在业务中查询 ...
- jpa+springmvc+springdata(一)
学习尚硅谷笔记: 首先配置application.xml: <?xml version="1.0" encoding="UTF-8"?> <b ...
- jpa
学习尚硅谷jpa笔记: 所依赖的jar包: 首先在META-INF下创建配置文件,persistence.xml <?xml version="1.0" encoding=& ...
随机推荐
- SQL知识目录
SQL理论知识 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理 ...
- propertychange 不起作用
兼容性问题.将$("#systemLogSettings td[name='nMaxFileSize'] input").on("input propertychange ...
- openstack windows 2008镜像 制作
openstack windows 2008镜像 制作 openstack centos6 centos7 kvm 镜像制作 http://www.cnblogs.com/elvi/p/7922421 ...
- 51Nod 1084 矩阵取数问题 V2 双线程DP 滚动数组优化
基准时间限制:2 秒 空间限制:131072 KB 一个M*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,先从左上走到右下,再从右下走到左上.第1遍时只能向下和向右走,第2遍时只能向 ...
- 51nod 1020 逆序排列 DP
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数. 如2 4 3 1中,2 1,4 3,4 1,3 1是逆序 ...
- 如何在PHP7中安装mysql的扩展
相对与PHP5,PHP7的最大变化之一是移除了mysql扩展,推荐使用mysqli或者pdo_mysql,实际上在PHP5.5开始,PHP就着手开始准备弃用mysql扩展,如果你使用mysql扩展,可 ...
- Undefined index: HTTP_RAW_POST_DATA的解决办法
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 替换为 $postStr = isset($GLOBALS['HTTP_RAW_POST_DA ...
- ibv_get_device_guid()函数
uint64_t ibv_get_device_guid(struct ibv_device *device); 描述 函数返回RDMA 设备的 GUID(The Global Unique IDen ...
- java多线程编程核心技术——第二章
第一节synchronized同步方法目录 1.1方法内的变量为线程安全的 1.2实例变量非线程安全 1.3多个对象多个锁 1.4synchronized方法与锁对象 1.5脏读 1.6synchro ...
- eclipse导入新项目后,运行时找不到主类解决办法
最近在学习多线程,今天下了一套源码,导入到eclipse里后,随便找了个带main()的类试了一下,找不到主类. 首先想到的解决办法是把工程clean一下,并没有用.去网上找了一个遍终于找到了管用的方 ...