前提:

  创建一个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. }

测试类

SpringBoot05 数据操作01 -> JPA的基本使用、基本使用02的更多相关文章

  1. SpringBoot05 数据操作03 -> JPA查询方法的规则定义

    请参见<springboot详解>springjpa部分知识 1 按照方法命名来进行查询 待更新... package cn.xiangxu.springboot.repository; ...

  2. SpringBoot05 数据操作02 -> JPA接口详解

    概览 JpaRepository 继承 PagingAndSortingRepository 继承 CrudRepository 继承 Repository 1 Repository 这是一个空接口, ...

  3. Access数据操作-01

    1.未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序 在菜单 “项目”的最下面 工程属性  菜单,选择“生成”选项卡,将目标平台由“Amy CPU”或者“*64”改成“* ...

  4. SNMP常用数据操作

    SNMP常用数据操作 snmp编程中常见的数据类型基本上就是integer32/oct_str(字节数组)/counter64/timeticks/dateAndTime这些.很多其它的比如Truth ...

  5. Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 一 ...

  6. 第八章| 2. MySQL数据库|数据操作| 权限管理

    1.数据操作 SQL(结构化查询语言),可以操作关系型数据库 通过sql可以创建.修改账号并控制账号权限:  通过sql可以创建.修改数据库.表:  通过sql可以增删改查数据: 可以通过SQL语句中 ...

  7. MySQL常见的库操作,表操作,数据操作集锦及一些注意事项

    一 库操作(文件夹) 1 数据库命名规则 可以由字母.数字.下划线.@.#.$ 区分大小写 唯一性 不能使用关键字如 create select 不能单独使用数字 最长128位 2 数据库相关操作 创 ...

  8. Atitti.数据操作crud js sdk dataServiceV3设计说明

    Atitti.数据操作crud js sdk dataServiceV3设计说明 1. 增加数据1 1.1. 参数哦说明1 2. 查询数据1 2.1. 参数说明2 3. 更新数据2 3.1. 参数说明 ...

  9. HBase伪分布式安装(HDFS)+ZooKeeper安装+HBase数据操作+HBase架构体系

    HBase1.2.2伪分布式安装(HDFS)+ZooKeeper-3.4.8安装配置+HBase表和数据操作+HBase的架构体系+单例安装,记录了在Ubuntu下对HBase1.2.2的实践操作,H ...

随机推荐

  1. 1.mysql优化---优化入门之MySQL的优化介绍及执行步骤

    优化到底优化什么?      优化,一直是面试最常问的一个问题.因为从优化的角度,优化的思路,完全可以看出一个人的技术积累.那么,关于系统优化,假设这么个场景,用户反映系统太卡(其实就是高并发),那么 ...

  2. linux查看网络链接状况命令netstat

    linux查看网络链接状况命令 netstat 参数如下: -a 显示所有socket,包括正在监听的. -c 每隔1秒就重新显示一遍,直到用户中断它. -i 显示所有网络接口的信息,格式同“ifco ...

  3. Ubuntu16.04上安装搜狗输入法

    一.下载搜狗输入法的deb包: http://pinyin.sogou.com/linux/ 二.打开终端输入命令: $ sudo dpkg -i sogoupinyin_2.0.0.0078_i38 ...

  4. 以前的实验博客地址,以前使用csdn

    实验一木马分析(隐藏分析)实验 http://blog.csdn.net/qq_30600405/article/details/78360599 实验二木马分析(控制分析)实验和实验三冰河木马实验 ...

  5. AMD 规范使用总结

    转自:http://www.jianshu.com/p/9b44a1fa8a96 AMD模式 define和require这两个定义模块.调用模块的方法,合称为AMD模式.它的模块定义的方法非常清晰, ...

  6. C#进阶之路(六):表达式进行类的赋值

    好久没更新这个系列了,最近看.NET CORE源码的时候,发现他的依赖注入模块的很多地方用了表达式拼接实现的.比如如下代码 private Expression<Func<ServiceP ...

  7. Java String Split Method

    Java String.split() method 有如下几种特殊情况: 1. 分隔符出现在首尾 public static void main(String args[]) { String St ...

  8. Directx 9 VS2015环境搭建

    安装好Directx9 sdk和vs2015后 打开vs,新建项目 --> c++项目  -->win32控制台应用程序-->空项目 创建项目后,右键项目属性, 包含目录 D:\Pr ...

  9. JavaWeb框架_Struts2_(四)----->表达式语言OGNL

      2. 表达式语言OGNL 2.1 OGNL简介 OGNL(Object-Graph Navigation Language)对象图导航语言的缩写,OGNL是一种表达式语言(Expression L ...

  10. YARN的ACL

    修改完了资源池的权限之后,发现无法查看日志了.报错: User [dr.who] is not authorized to view the logs for... 即使把资源池的权限设置为了*(所有 ...