SpringBoot05 数据操作01 -> JPA的基本使用、基本使用02
前提:
创建一个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);
- }
- }
测试类
SpringBoot05 数据操作01 -> JPA的基本使用、基本使用02的更多相关文章
- SpringBoot05 数据操作03 -> JPA查询方法的规则定义
请参见<springboot详解>springjpa部分知识 1 按照方法命名来进行查询 待更新... package cn.xiangxu.springboot.repository; ...
- SpringBoot05 数据操作02 -> JPA接口详解
概览 JpaRepository 继承 PagingAndSortingRepository 继承 CrudRepository 继承 Repository 1 Repository 这是一个空接口, ...
- Access数据操作-01
1.未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序 在菜单 “项目”的最下面 工程属性 菜单,选择“生成”选项卡,将目标平台由“Amy CPU”或者“*64”改成“* ...
- SNMP常用数据操作
SNMP常用数据操作 snmp编程中常见的数据类型基本上就是integer32/oct_str(字节数组)/counter64/timeticks/dateAndTime这些.很多其它的比如Truth ...
- Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 一 ...
- 第八章| 2. MySQL数据库|数据操作| 权限管理
1.数据操作 SQL(结构化查询语言),可以操作关系型数据库 通过sql可以创建.修改账号并控制账号权限: 通过sql可以创建.修改数据库.表: 通过sql可以增删改查数据: 可以通过SQL语句中 ...
- MySQL常见的库操作,表操作,数据操作集锦及一些注意事项
一 库操作(文件夹) 1 数据库命名规则 可以由字母.数字.下划线.@.#.$ 区分大小写 唯一性 不能使用关键字如 create select 不能单独使用数字 最长128位 2 数据库相关操作 创 ...
- Atitti.数据操作crud js sdk dataServiceV3设计说明
Atitti.数据操作crud js sdk dataServiceV3设计说明 1. 增加数据1 1.1. 参数哦说明1 2. 查询数据1 2.1. 参数说明2 3. 更新数据2 3.1. 参数说明 ...
- HBase伪分布式安装(HDFS)+ZooKeeper安装+HBase数据操作+HBase架构体系
HBase1.2.2伪分布式安装(HDFS)+ZooKeeper-3.4.8安装配置+HBase表和数据操作+HBase的架构体系+单例安装,记录了在Ubuntu下对HBase1.2.2的实践操作,H ...
随机推荐
- 1.mysql优化---优化入门之MySQL的优化介绍及执行步骤
优化到底优化什么? 优化,一直是面试最常问的一个问题.因为从优化的角度,优化的思路,完全可以看出一个人的技术积累.那么,关于系统优化,假设这么个场景,用户反映系统太卡(其实就是高并发),那么 ...
- linux查看网络链接状况命令netstat
linux查看网络链接状况命令 netstat 参数如下: -a 显示所有socket,包括正在监听的. -c 每隔1秒就重新显示一遍,直到用户中断它. -i 显示所有网络接口的信息,格式同“ifco ...
- Ubuntu16.04上安装搜狗输入法
一.下载搜狗输入法的deb包: http://pinyin.sogou.com/linux/ 二.打开终端输入命令: $ sudo dpkg -i sogoupinyin_2.0.0.0078_i38 ...
- 以前的实验博客地址,以前使用csdn
实验一木马分析(隐藏分析)实验 http://blog.csdn.net/qq_30600405/article/details/78360599 实验二木马分析(控制分析)实验和实验三冰河木马实验 ...
- AMD 规范使用总结
转自:http://www.jianshu.com/p/9b44a1fa8a96 AMD模式 define和require这两个定义模块.调用模块的方法,合称为AMD模式.它的模块定义的方法非常清晰, ...
- C#进阶之路(六):表达式进行类的赋值
好久没更新这个系列了,最近看.NET CORE源码的时候,发现他的依赖注入模块的很多地方用了表达式拼接实现的.比如如下代码 private Expression<Func<ServiceP ...
- Java String Split Method
Java String.split() method 有如下几种特殊情况: 1. 分隔符出现在首尾 public static void main(String args[]) { String St ...
- Directx 9 VS2015环境搭建
安装好Directx9 sdk和vs2015后 打开vs,新建项目 --> c++项目 -->win32控制台应用程序-->空项目 创建项目后,右键项目属性, 包含目录 D:\Pr ...
- JavaWeb框架_Struts2_(四)----->表达式语言OGNL
2. 表达式语言OGNL 2.1 OGNL简介 OGNL(Object-Graph Navigation Language)对象图导航语言的缩写,OGNL是一种表达式语言(Expression L ...
- YARN的ACL
修改完了资源池的权限之后,发现无法查看日志了.报错: User [dr.who] is not authorized to view the logs for... 即使把资源池的权限设置为了*(所有 ...