前言:

基于spring framework 4.x或spring boot 1.x开发环境

务必注意以下版本问题:
Spring framework4.x(Spring boot1.x)对应spring-data1.x

Spring framework5.x(Spring boot2.x)对应spring-data2.x

一、依赖

需要jpa 1.x,hibernate 5.x,spring-data-commons,spring-data-jpa

maven方式:

  1. <dependency>
  2. <groupId>org.hibernate.javax.persistence</groupId>
  3. <artifactId>hibernate-jpa-2.1-api</artifactId>
  4. <version>1.0.2.Final</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.hibernate</groupId>
  8. <artifactId>hibernate-core</artifactId>
  9. <version>5.2.16.Final</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.hibernate</groupId>
  13. <artifactId>hibernate-entitymanager</artifactId>
  14. <version>5.2.16.Final</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.springframework.data</groupId>
  18. <artifactId>spring-data-jpa</artifactId>
  19. <version>1.11.11.RELEASE</version>
  20. </dependency>

二、环境配置

注意两个扫描器(一个是po实体类扫描,还有一个是dao层接口扫描)

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:tx="http://www.springframework.org/schema/tx"
  6. xmlns:jpa="http://www.springframework.org/schema/data/jpa"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context.xsd
  11. http://www.springframework.org/schema/tx
  12. http://www.springframework.org/schema/tx/spring-tx.xsd
  13. http://www.springframework.org/schema/data/jpa
  14. http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
  15. <!-- eguid博客所有原创文章均采用知识共享署名-相同方式共享 3.0 中国大陆许可协议进行许可。如有转载请注明博客地址:https://blog.csdn.net/eguid_1/article/details/80018676-->
  16. <!-- druid连接池 -->
  17. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
  18. <property name="driverClassName" value="${jdbc.driverClassName}" />
  19. <property name="url" value="${jdbc.url}" />
  20. <property name="username" value="${jdbc.username}" />
  21. <property name="password" value="${jdbc.password}" />
  22. <property name="maxActive" value="${jdbc.maxActive}" />
  23. <property name="initialSize" value="${jdbc.initialSize}" />
  24. <property name="maxWait" value="${jdbc.maxWait}" />
  25. <property name="maxIdle" value="${jdbc.maxIdle}" />
  26. <property name="minIdle" value="${jdbc.minIdle}" />
  27. <property name="removeAbandoned" value="${jdbc.removeAbandoned}" />
  28. <property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}" />
  29. <property name="testWhileIdle" value="${jdbc.testWhileIdle}" />
  30. <property name="validationQuery" value="${jdbc.validationQuery}"/>
  31. <property name="validationQueryTimeout" value="${jdbc.validationQueryTimeout}" />
  32. <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}" />
  33. <property name="numTestsPerEvictionRun" value="${jdbc.numTestsPerEvictionRun}" />
  34.  
  35. <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
  36.         <property name="poolPreparedStatements" value="false" />
  37.         <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
  38.  
  39.         <!-- 配置监控统计拦截的filters -->
  40.         <property name="filters" value="stat,wall"/>
  41.         <property name="connectionProperties" value="druid.stat.slowSqlMillis=5000" />
  42. </bean>
  43.  
  44. <!-- JPA工厂对象 -->
  45. <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  46. <property name="dataSource" ref="dataSource" />
  47.         <!-- 扫描此包下的所有Entity,进行ORM映射(这里的实体类包路径需要修改) -->
  48.         <property name="packagesToScan" value="cc.eguid.xxx.pojo.po" />
  49.     <property name="persistenceProvider">
  50.     <bean class="org.hibernate.jpa.HibernatePersistenceProvider" />
  51.     </property>
  52.     <property name="jpaVendorAdapter">
  53. <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
  54. <property name="generateDdl" value="false" />
  55. <property name="database" value="MYSQL" />
  56. <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
  57. <property name="showSql" value="true" />
  58. </bean>
  59. </property>
  60. <property name="jpaDialect">
  61. <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
  62. </property>
  63. <property name="jpaPropertyMap">
  64. <map>
  65. <entry key="hibernate.query.substitutions" value="true 1, false 0" />
  66. <entry key="hibernate.default_batch_fetch_size" value="16" />
  67. <entry key="hibernate.max_fetch_depth" value="2" />
  68. <entry key="hibernate.generate_statistics" value="true" />
  69. <entry key="hibernate.bytecode.use_reflection_optimizer" value="true" />
  70. <entry key="hibernate.cache.use_second_level_cache" value="false" />
  71. <entry key="hibernate.cache.use_query_cache" value="false" />
  72. </map>
  73. </property>
  74.     </bean>
  75.  
  76.     <!-- 使用声明式事务管理 -->
  77.     <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
  78.  
  79.     <!-- JPA事务管理器 -->
  80. <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
  81. <property name="entityManagerFactory" ref="entityManagerFactory"/>
  82. </bean>
  83.  
  84.     <!--扫描 JPA持久化接口,spring-data-jpa会自动生成实现类(这里的repostory接口包路径需要修改)-->
  85.     <jpa:repositories base-package="cc.eguid.xxx.dao" entity-manager-factory-ref="entityManagerFactory" transaction-manager-ref="transactionManager"/>
  86.  
  87. </beans>

三、实体类和Repository接口

(1)编写dao层接口(不需实现类,spring-data-jpa会自动生成实现类)

  1. import org.springframework.data.repository.CrudRepository;
  2.  
  3. /**
  4. * spring-data-jpa自动生成实现类,简化dao层开发
  5. * @author eguid
  6. *
  7. */
  8. public interface UserRepository extends CrudRepository<GameUserinfo, Integer>{
  9.     
  10. GameUserinfo findByUsername(String username);
  11.  
  12. }

(2)自动生成的ORM映射Entity(用JPA生成工具生成的)

  1. /**
  2. * The persistent class for the game_userinfo database table.
  3. *
  4. */
  5. @Entity
  6. @Table(name="userinfo")
  7. @NamedQuery(name="Userinfo.findAll", query="SELECT g FROM Userinfo g")
  8. public class Userinfo extends BaseEntity {
  9. private static final long serialVersionUID = 1L;
  10.  
  11. @Id
  12. @GeneratedValue(strategy=GenerationType.AUTO)
  13. @Column(unique=true, nullable=false)
  14. private Integer userid;
  15.  
  16. private Timestamp createtime;
  17.  
  18. @Column(length=50)
  19. private String nickname;
  20.  
  21. @Column(length=100)
  22. private String password;
  23.  
  24. private int type;
  25.  
  26. @Column(length=50)
  27. private String username;
  28.  
  29. //bi-directional many-to-many association to Roleinfo
  30. @ManyToMany
  31. @JoinTable(
  32. name="userrole"
  33. , joinColumns={
  34. @JoinColumn(name="userid", nullable=false)
  35. }
  36. , inverseJoinColumns={
  37. @JoinColumn(name="roleid", nullable=false)
  38. }
  39. )
  40. private List<roleinfo> roleinfos;
  41.  
  42. public Userinfo() {
  43. }
  44.  
  45. public Integer getUserid() {
  46. return this.userid;
  47. }
  48.  
  49. public void setUserid(Integer userid) {
  50. this.userid = userid;
  51. }
  52.  
  53. public Timestamp getCreatetime() {
  54. return this.createtime;
  55. }
  56.  
  57. public void setCreatetime(Timestamp createtime) {
  58. this.createtime = createtime;
  59. }
  60.  
  61. public String getNickname() {
  62. return this.nickname;
  63. }
  64.  
  65. public void setNickname(String nickname) {
  66. this.nickname = nickname;
  67. }
  68.  
  69. public String getPassword() {
  70. return this.password;
  71. }
  72.  
  73. public void setPassword(String password) {
  74. this.password = password;
  75. }
  76.  
  77. public int getType() {
  78. return this.type;
  79. }
  80.  
  81. public void setType(int type) {
  82. this.type = type;
  83. }
  84.  
  85. public String getUsername() {
  86. return this.username;
  87. }
  88.  
  89. public void setUsername(String username) {
  90. this.username = username;
  91. }
  92.  
  93. public List<Roleinfo> getRoleinfos() {
  94. return this.roleinfos;
  95. }
  96.  
  97. public void setRoleinfos(List<Roleinfo> roleinfos) {
  98. this.roleinfos = roleinfos;
  99. }
  100.  
  101. }

四、总结

1、添加依赖(添加spring-data及spring-data-jpa依赖包)

2、配置jpa环境(配置dao扫描路径和实体类扫描路径)

3、编写实体类和dao层接口(如果是简单的单表增删改查操作,直接继承CrudRepository接口即可,基本不需要写代码)

jpa单表操作基本无可挑剔,涉及多表操作需要手写hql语句或jpa

实体类是用工具生成的,所以实际上只需要写一个dao接口即可

spring-data详解之spring-data-jpa:简单三步快速上手spring-data-jpa开发的更多相关文章

  1. spring事务详解(二)简单样例

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.引子 ...

  2. spring事务详解(三)源码详解

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.引子 ...

  3. Spring学习(一)-----Spring 模块详解

    官方下载链接:http://repo.spring.io/release/org/springframework/spring/ Spring 模块详解: Core 模块 spring-beans-3 ...

  4. Spring RestTemplate详解

    Spring RestTemplate详解   1.什么是REST? REST(RepresentationalState Transfer)是Roy Fielding 提出的一个描述互联系统架构风格 ...

  5. Spring配置文件详解 – applicationContext.xml文件路径

    Spring配置文件详解 – applicationContext.xml文件路径 Java编程                 spring的配置文件applicationContext.xml的默 ...

  6. spring配置文件详解--真的蛮详细

    spring配置文件详解--真的蛮详细   转自: http://book.51cto.com/art/201004/193743.htm 此处详细的为我们讲解了spring2.5的实现原理,感觉非常 ...

  7. 【转载】Spring AOP详解 、 JDK动态代理、CGLib动态代理

    Spring AOP详解 . JDK动态代理.CGLib动态代理  原文地址:https://www.cnblogs.com/kukudelaomao/p/5897893.html AOP是Aspec ...

  8. J2EE进阶(四)Spring配置文件详解

    J2EE进阶(四)Spring配置文件详解 前言 Spring配置文件是用于指导Spring工厂进行Bean生产.依赖关系注入(装配)及Bean实例分发的"图纸".Java EE程 ...

  9. spring事务详解(五)总结提高

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.概念 ...

随机推荐

  1. FZU 2124 FOJ 2124 吃豆人【BFS】

     Problem 2124 吃豆人 Accept: 134    Submit: 575 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Probl ...

  2. 开发ActiveX控件调用另一个ActiveX系列1——开发一个MFC ActiveX控件

    ActiveX开发的教程有很多,我也从中受益匪浅,例如以下这几篇: 基本教程:http://www.cnblogs.com/guenli/articles/1629915.html 注意事项:http ...

  3. android之Context对各种服务的管理

    经常,当我们须要用到服务的时候能够通果Context来获取:Context.getSystemService(name):比方:当我们想知道当前电话状态(来电/去电/sim卡状态等)时候,我们能够通过 ...

  4. 【Java】使用@Value @Reource或@Autowire依赖 (值) 注入时出现NPE的排查方法

    首先想说明的是,@Value @Resource和@Autowire虽然都是用于依赖注入的Annotation,但是二者是有区别的. 1 Resource不依赖于Spring,后者相反,因此为了减少以 ...

  5. web翻译——插件

    很多时候,可能我们web项目中需要的只是机械式的翻译,并不需要什么利用xml或者js json等等实现逼真翻译,那样工作量太大.这时候可能你就需要这几款小工具来帮助你.当然,如果 对翻译或者你的项目外 ...

  6. [项目构建 十一]babasport 购物车的原理及实现.

    今天来开始写一下关于购物车的东西, 这里首先抛出四个问题: 1)用户没登陆用户名和密码,添加商品, 关闭浏览器再打开后 不登录用户名和密码 问:购物车商品还在吗? 2)用户登陆了用户名密码,添加商品, ...

  7. jQuery中slideToggle()的详细使用方法和解释

    $(selector).slideToggle(speed,callback) 参数       speed和callback Speed  可选.规定元素从隐藏到显示的速度,默认‘normal’可能 ...

  8. python 基础 5.4 类的私有属性和私有方法

    一. 类的私有变量和私有方法 1>   在python 中可以通过在属性变量名前,加上双下划线定义属性为私有属性   2>特殊变量命名 a. _xx 以单下划线开头的表示的是protect ...

  9. 网页直播、微信直播技术解决方案:EasyNVR与EasyDSS流媒体服务器组合之区分不同场景下的easynvr

    近期遇到好多客户咨询关于实现微信直播.或者是将直播页面集成进入自己项目中. 该方案的主要目的:完成在公网一直进行内网摄像头的RTMP/HLS直播! 实现方案的具体实现: EasyNVR+EasyDSS ...

  10. 我的Android进阶之旅------>对Java中注释/**@hide*/的初步认识

    今天写一个调节系统背光亮度的时候,参考了Android中的Setting源码,在源码中有这么一段代码: private static final int MAXIMUM_BACKLIGHT = and ...