Spring-Data-JPA整合MySQL和配置的方法

一、简介

(1)、MySQL是一个关系型数据库系统,是如今互联网公司最常用的数据库和最广泛的数据库。为服务端数据库,能承受高并发的访问量。

(2)、Spring-Data-Jpa是在JPA规范下提供的Repository层的实现,可以使用不同的实现框架如Hibernate、OpenJpa等框架进行开发,这样可以使得Repository变得简单,也解决了其与业务层的耦合性。

本此学习我们使用MySQL+Spring-Data-Jpa搭建,Jpa实现方式使用Hibernate,数据库连接池使用dbcp进行连接

二、项目搭建

1、引入MySQL以及Jpa相关依赖:

<!-- spring-jdbc相关依赖 -->
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-jdbc</artifactId>
</dependency>
<!-- 用于连接mysql的相关依赖 -->
<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- jpa相关的依赖 包含spring-data-jpa、spring-orm 和 Hibernate 来支持 JPA -->
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> 

需要引入三个依赖,jdbc为spring整合MySQL需要的依赖,第二个为MySQL的数据库驱动依赖,第三个为Spring-Data-Jpa相关的依赖包含:

其中其包含AOP、jdbc、Spring-ORM、事务Transaction-api和Hibernate等依赖来支持。所以Jpa默认为使用Hibernate进行实现。

2 、配置文件配置:

配置文件我们选择.yml格式文件进行配置,并且使用dpcp2配置连接池参数:

1)项目相关配置:

server:
 #配置端口号
 port: 8088
spring:
 application:
 #配置服务名称
 name: cms-dept

此处为配置配置服务器开启的相关信息,主要为配置服务器名称和端口

2)MySQL相关配置

spring:
#数据源和jpa配置
 datasource:
 #数据库相关的配置url -SSL连接设置为false
 url: jdbc:mysql://localhost:3306/crm?characterEncoding=utf8&useSSL=false
 #配置用户名
 username: ***
 #配置密码
 password: ***

此处为数据库相关的一些配置,主要为配置数据库url、账号和密码。url后配置信息为连接MySQL的编码格式和是否启用SSL加密。

3)DBCP相关配置

spring:
 #下面为连接池相关配置
 dbcp2:
  #初始化连接池大小
  initial-size: 10
  #陪住最小连接池数
  min-idle: 10
  #配置最大连接池数
  max-idle: 30
  #配置获取超时连接的等待时间
  max-wait-millis: 30000
  #配置多长时间进行一次检测,检测需要关闭的数据库连接
  time-between-eviction-runs-millis: 200000
  #配置连接在连接池的最小生存时间
  remove-abandoned-on-maintenance: 200000

主要配置为一些连接池的信息,配置详情如上注释所示。

4)Spring-Data-Jpa依据iHibernata相关配置

spring:
 jpa:
 #配置数据库类型
 database: MYSQL
 #配置是否打印sql
 show-sql: true
 #Hibernate相关配置
 hibernate:
  #配置级联等级
  ddl-auto: update
  naming:
  #命名策略
  strategy: org.hibernate.cfg.ImprovedNamingStrategy
 properties:
  hibernate:
  dialect: org.hibernate.dialect.MySQL5Dialect

配置依次为连接数据库类型,是否打印Sql和hIbernate级联方式,有以下几种:

1)、validate- 加载hibernate时,验证创建数据库表结构。

2)、create- 每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。

3)、create-drop 加载hibernate时创建,退出是删除表结构。

4)、update-级联更新 加载hibernate自动更新数据库结构。

我们在此选择级联更新,在原有表基础上进行迭代。

命名策略有以下两种:

1)、 org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy 遇到大写字母 加”_”的命名。

2)、 org.hibernate.cfg.ImprovedNamingStrategy   无修改命名 。

3 、相关类进行配置:

配置类需要配置与气动类的平级目录或者子目录下,才能被配置成功,此处我们使用Java类配置取代xml方式进行配置:

/**
 * @功能描述:用于MySQL相关配置的类
 * @author Administrator
 */
//下面此行用来排序的注解接口,用于处理加载优先级的问题,拥有两个枚举变量
@Order(Ordered.HIGHEST_PRECEDENCE)
//下面此行代表此类为配置类
@Configuration
//下面此行代表此类开启事务管理
@EnableTransactionManagement(proxyTargetClass = true)
//也可以定义为类 如DeptRepository.class 也可以定义过滤器 includeFilters={ @ComponentScan.Filter(type=FilterType.ANNOTATION,value=Service.class)}
@EnableJpaRepositories(basePackages="com.hzt.**.repository")
public class MySQLConfig {

 @Bean
 PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor() {
  return new PersistenceExceptionTranslationPostProcessor();
 }
}

1)、@Order注解,用于配置类的加载优先级别,其拥有两个枚举变量:
   Ordered.HIGHEST_PRECEDENCE- Integer.MIN_VALUE -最小值,拥有最高优先级
   Ordered.LOWEST_PRECEDENCE -Integer.MAX_VALUE -最大值,拥有最低优先级

2)、@Configuration 注解,代表此类为配置类

3)、@EnableTransactionManagement 用于MySQL的事务管理 proxyTargetClass= true代表开启类的事务管理

4)、@EnableJpaRepositories 用于配置事务,此处以cgnl表达式表示路径,也可以定义为具体的类,例如DeptRepository.class
  其子元素includeFilters可以定义事务拦截器,如includeFilters={ @ComponentScan.Filter(type=FilterType.ANNOTATION,value=Service.class)}

4 、ORM映射Java类相关代码:

1)数据库表结构


  

2)实体类映射

@Entity //代表此类为一个表的映射entity类
@Table(name="tbl_dept") //设置对应的表名
public class Dept implements Serializable{
 /**
  * 功能描述:序列化时候的唯一性,相应的get和set方法已经省略。
  */
 private static final long serialVersionUID = 1L;

 /** 主键-id uuid */
 @Id //此备注代表该字段为该类的主键
 @GeneratedValue(generator="system-uuid")
 @GenericGenerator(name="system-uuid",strategy = "uuid")
 //name - 指定对应列的名称 ,length - 最大长度
 @Column(name="id",length=32) //
 private String id;

 /** 数字,具有唯一性 */
 //nullable - 是否可以为null,默认为true unique - 是否唯一,默认为false
 @Column(name="no",nullable=false,unique=true)
 private Integer no;

 /** 部门名称 */
 @Column(name="name",unique=true,nullable=false)
 private String name;

 /** 部门管理的主键-id uuid */
 @Column(name="manager",unique=true,nullable=false)
 private String manager;

 /** 部门描述 */
 @Column(name="description")
 private String description;

 /** 部门电话 */
 @Column(name="phone")
 private String phone;

 /** 部门创建时间 */
 @Column(name="createTime")
  @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
 private Date createTime;

 /** 部门修改时间 */
 @Column(name="editTime")
  @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
 private Date editTime;
}

(1)、@Entity 代表此类映射为数据库的表结构
(2)、@Table(name="tbl_dept")此注解用于配置实体类与表映射的关系,name代表映射的表名
(3)、 @Id注解代表此类为一个主键
(4)、@GeneratedValue注解用于配置主键相关信息,generator属性用于配置生成策略有以下几种枚举值:
  1、auto - 主键由程序控制 。
  2、IDENTITY - 由数据库自动生成。
  3、enerator -指定生成主键使用的生成器 。
 4、SEQUENCE - 根据底层数据库的序列来生成主键 。
  5、TABLE - 使用一个特定的数据库表来保存主键。
  6、system-uuid 代表使用系统生成的uuid进行配。
(5)、@Column用于配置列相关信息的注解
  1、name字段用于指定映射到表结构的映射字段。
  2、length代表此字段的长度约束,可以省略。
  3、unique属性代表此字段是否开启唯一性约束,默认为false,唯一则为true 。
  4、nullable代表此字段是否可以为空,默认为true 。 false代表不能为空 。
(6)、@DateTimeFormat用于映射数据库表时间的格式。
相应的get和set方法已经省略。

3)DeptRepository层实现

如图,Respository为一个接口规范,有不同的子接口继承,每个子接口除了继承父接口所有功能外还会添加额外的方法,用于不同的实现。CrudRepository类定义了基本方法,其子类分别进行扩展。
如PagingAndSortingRepository类除了继承CrudRepository的所有方法,还额外对其进行扩展,增加了分页查找的相关方法:

Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);

而JpaRepository则是在PagingAndSortingRepository的基础上再进行扩展。

1、Repository层:

@Repository 代表将此类交由spring管理,并且其为一个dao层

/**
 * @功能描述:用于部门表操作的dao层接口
 * @author Administrator
 */
@Repository//代表此为一个dao层实现
public interface DeptRepository extends JpaRepository<Dept, String>{

}

根据实现类不同,其拥有不同的方法可调用,一般此处方法大家见名知意都能知道其用法。泛型中<Dept, String> 第一个参数代表表映射的实体类,第二个参数代表主键类型。

2、Service层实现:

/**
 * @功能描述:用于部门service操作的实现类
 * @author Administrator
 */
@Service
public class DeptServiceImpl implements DeptService{
 /** 日志处理类 */
 private final Logger log = LoggerFactory.getLogger(getClass());

 @Autowired
 private DeptRepository repository;

 @Override
 public Dept queryById(String id) throws Exception {
  try {
   Dept result = repository.findOne(id);
   log.info(result.toString());
   return result;
  }catch (Exception e) {
   log.info(e.toString(),e);
   throw new ServiceException("根据id查询时发生异常!");
  }
 }
}

其中findOne为JpaRepository实现的方法。

3、Controller层实现:

@RestController
@RequestMapping("/api/v1/dept")
public class DeptController{
 /** 日志记录类 */
 private Logger log = LoggerFactory.getLogger(getClass());
 /** 自家的service */
 @Autowired
 private DeptService service;

 /**
  * @功能描述:根据id查询部门内容的方法
  * @return Dept
  */
 @GetMapping("/id/get")
 public Result getById( String id) throws Exception{
  verify(new VerifyParam("部门id", id));
  return new Result("通过id获取部门信息成功!", service.queryById(id));
 }
}

其中RestController代表此Controller为返回Json格式的控制器,@RequestMapping定义其类映射的url,此处我们接受的数据为普通String类型,如果需要接受Json类型,则需 @RequestBody String id 如此配置接受请求参数。

4 、测试:

模拟进行发送get请求,完成Spring-Data-Jpa与MySQL的整合和配置。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • springboot使用spring-data-jpa操作MySQL数据库

    我们在上一篇搭建了一个简单的springboot应用,这一篇将介绍使用spring-data-jpa操作数据库. 新建一个MySQL数据库,这里数据库名为springboot,建立user_info数据表,作为我们示例操作的表对象. user_info信息如下: DROP TABLE IF EXISTS `user_info`; CREATE TABLE `user_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(

  • SpringBoot+Spring Data JPA整合H2数据库的示例代码

    目录 前言 Maven依赖 Conroller 实体类 Repository 数据库脚本文件 配置文件 启动项目 访问H2数据库 查看全部数据 H2数据库文件 运行方式 前言 H2数据库是一个开源的关系型数据库.H2采用java语言编写,不受平台的限制,同时支持网络版和嵌入式版本,有比较好的兼容性,支持相当标准的sql标准 提供JDBC.ODBC访问接口,提供了非常友好的基于web的数据库管理界面 官网:http://www.h2database.com/ Maven依赖 <!--jpa-->

  • 详解Spring Data JPA中Repository的接口查询方法

    目录 1.查询方法定义详解 2.搜索查询策略 3.查询创建 4.属性表达式 5.特殊参数处理 6.限制查询结果 7. repository方法返回Collections or Iterables 8.repository方法处理Null 9.查询结果流 10.异步查询结果 1.查询方法定义详解 repository代理有两种方式从方法名中派生出特定存储查询. 通过直接从方法名派生查询. 通过使用一个手动定义的查询. 可用的选项取决于实际的商店.然而,必须有一个策略来决定创建什么实际的查询. 2.

  • 详解基于Spring Boot与Spring Data JPA的多数据源配置

    由于项目需要,最近研究了一下基于spring Boot与Spring Data JPA的多数据源配置问题.以下是传统的单数据源配置代码.这里使用的是Spring的Annotation在代码内部直接配置的方式,没有使用任何XML文件. @Configuration @EnableJpaRepositories(basePackages = "org.lyndon.repository") @EnableTransactionManagement @PropertySource("

  • Spring Data Jpa 自动生成表结构的方法示例

    想在部署的时候随应用的启动而初始化数据脚本,这不就是Spring Data Jpa中的自动生成表结构,听起来特别简单,不就是配置Hibernate的ddl-auto嘛,有什么好说的,是个人都知道.当初我也是这样认为,实际操作了一把,虽然表是创建成功了,但是字段注释,字符集以及数据库引擎都不对,没想到在这些细节上翻车了. 毕竟开翻的车还要自己扶起来,于是在这记录一下. 注:本文中使用的Spring Data Jpa版本为2.1.4.RELEASE 以MySQL为例,我这边举个例子: import

  • Spring-Data-JPA整合MySQL和配置的方法

    一.简介 (1).MySQL是一个关系型数据库系统,是如今互联网公司最常用的数据库和最广泛的数据库.为服务端数据库,能承受高并发的访问量. (2).Spring-Data-Jpa是在JPA规范下提供的Repository层的实现,可以使用不同的实现框架如Hibernate.OpenJpa等框架进行开发,这样可以使得Repository变得简单,也解决了其与业务层的耦合性. 本此学习我们使用MySQL+Spring-Data-Jpa搭建,Jpa实现方式使用Hibernate,数据库连接池使用dbc

  • Spring Data JPA例子代码[基于Spring Boot、Mysql]

    关于Spring Data Spring社区的一个顶级工程,主要用于简化数据(关系型&非关系型)访问,如果我们使用Spring Data来开发程序的话,那么可以省去很多低级别的数据访问操作,如编写数据查询语句.DAO类等,我们仅需要编写一些抽象接口并定义相关操作即可,Spring会在运行期间的时候创建代理实例来实现我们接口中定义的操作. 关于Spring Data子项目 Spring Data拥有很多子项目,除了Spring Data Jpa外,还有如下子项目. Spring Data Comm

  • SpringBoot整合Spring Data JPA的详细方法

    目录 前言 核心概念 新建SpringBoot项目 创建MySQL数据库 创建实体类 创建Repository 创建处理器 准备SQL文件 编写配置文件 最终效果 启动SpringBoot项目 查看数据库 自动更新数据表结构 测试JPA的增删改查 测试查询所有 测试保存数据 测试更新数据 测试删除数据 前言 Spring Data JPA 是更大的 Spring Data 家族的一部分,可以轻松实现基于 JPA 的存储库.该模块处理对基于 JPA 的数据访问层的增强支持.它使构建使用数据访问技术

  • 详解spring boot jpa整合QueryDSL来简化复杂操作

    前言 使用过spring data jpa的同学,都很清楚,对于复杂的sql查询,处理起来还是比较复杂的,而本文中的QueryDSL就是用来简化JPA操作的. Querydsl定义了一种常用的静态类型语法,用于在持久域模型数据之上进行查询.JDO和JPA是Querydsl的主要集成技术.本文旨在介绍如何使用Querydsl与JPA组合使用.JPA的Querydsl是JPQL和Criteria查询的替代方法.QueryDSL仅仅是一个通用的查询框架,专注于通过Java API构建类型安全的SQL查

  • Spring Data Jpa的四种查询方式详解

    这篇文章主要介绍了Spring Data Jpa的四种查询方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.调用接口的方式 1.基本介绍 通过调用接口里的方法查询,需要我们自定义的接口继承Spring Data Jpa规定的接口 public interface UserDao extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> 使用这

  • Spring Data JPA 实体类中常用注解说明

    目录 javax.persistence 介绍 基本注解 关联关系注解 关于关系查询的一些注意事项 javax.persistence 介绍 Spring Data JPA 采用约定大于配置的思想,默认了很多东西 JPA是存储业务实体关联的实体来源,它显示定义了如何定义一个面向普通Java对象(POJO)作为实体,以及如何与管理关系实体提供一套标准 javax.persistence位于hibernate-jpa-**.jar 包里面 jpa类层次结构: JPA类层次结构的显示单元: 单元 描述

随机推荐