ORM框架
新的JPA ORM规范:
1)JPA为POJO提供持久化标准规范。
2)JPA的使用:Hibernate与TopLink以及OpenJpa都提供了JPA的实现。
3)JPA主要技术:
  A.ORM映射元数据:JPA通过注解或XML描述映射关系,并将运行中的实体对象持久化到数据库中。
  B.JPA持久化API:使用面向对象的思想,操作实体对象,进行增删改查的操作。至于怎么操作,由框架思考这件事。
  C.查询语言:使用面向对象的思想避免了同程序的SQL语句产生交集。
LocalContainerEntityManagerFactoryBean 提供了对JPA EntityManagerFactory 的全面控制,
非常适合那种需要细粒度定制的环境。
LocalContainerEntityManagerFactoryBean将基于persistence.xml文件创建PersistenceUnitInfo类,
并提供dataSourceLookup策略和loadTimeWeaver。因此它可以在JNDI之外的用户定义的数据源之上工作,并控制织入流程。

  1. public static void main(String[] args) throws Exception {
  2. @SuppressWarnings("resource")
  3. ApplicationContext context = new ClassPathXmlApplicationContext("context.xml");
  4. Apply apply = (Apply) context.getBean("apply");
  5. System.out.println("---------------");
  6. List<String> list = apply.loadKeys();
  7. }
  1. package com.batman.hzdx.shard.model;
  2.  
  3. import java.io.Serializable;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6. import javax.persistence.Column;
  7. import javax.persistence.Entity;
  8. import javax.persistence.Id;
  9. import javax.persistence.Inheritance;
  10. import javax.persistence.InheritanceType;
  11. import javax.persistence.Table;
  12.  
  13. import com.batman.hzdx.def.DataTypeUtils;
  14. import com.batman.hzdx.def.HasMapping;
  15. import com.batman.hzdx.def.PrimaryKey;
  16.  
  17. @Entity(name="user")
  18. @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
  19. public class User implements HasMapping, PrimaryKey<String>, Serializable{
  20. private static final long serialVersionUID = 1L;
  21.  
  22. @Id
  23. @Column(name="username", nullable=false, length=)
  24. private String username;
  25.  
  26. @Column(name="password", nullable=true, length=)
  27. private String password;
  28.  
  29. public String getUsername() {
  30. return username;
  31. }
  32.  
  33. public void setUsername(String username) {
  34. this.username = username;
  35. }
  36.  
  37. public String getPassword() {
  38. return password;
  39. }
  40.  
  41. public void setPassword(String password) {
  42. this.password = password;
  43. }
  44.  
  45. public static final String P_Username = "username";
  46.  
  47. public static final String P_Password = "password";
  48.  
  49. public String pk() {
  50. return username;
  51. }
  52.  
  53. public Map<String, Serializable> convertToMap() {
  54. HashMap<String, Serializable> map = new HashMap<String, Serializable>();
  55. map.put("username", username);
  56. map.put("password", password);
  57. return map;
  58. }
  59.  
  60. public void updateFromMap(Map<String, Serializable> map) {
  61. if (map.containsKey("username")) this.setUsername(DataTypeUtils.getStringValue(map.get("username")));
  62. if (map.containsKey("password")) this.setPassword(DataTypeUtils.getStringValue(map.get("password")));
  63.  
  64. }
  65.  
  66. public void fillDefaultValues() {
  67. if (username == null) username = "";
  68. if (password == null) password = "";
  69. }
  70. }
  1. package com.batman.hzdx.shard.model;
  2.  
  3. import static com.mysema.query.types.PathMetadataFactory.*;
  4.  
  5. import com.mysema.query.types.path.*;
  6.  
  7. import com.mysema.query.types.PathMetadata;
  8. import javax.annotation.Generated;
  9. import com.mysema.query.types.Path;
  10.  
  11. /**
  12. * QUser is a Querydsl query type for User
  13. */
  14. @Generated("com.mysema.query.codegen.EntitySerializer")
  15. public class QUser extends EntityPathBase<User> {
  16.  
  17. private static final long serialVersionUID = -;
  18.  
  19. public static final QUser user = new QUser("user");
  20.  
  21. public final StringPath password = createString("password");
  22.  
  23. public final StringPath username = createString("username");
  24.  
  25. public QUser(String variable) {
  26. super(User.class, forVariable(variable));
  27. }
  28.  
  29. @SuppressWarnings("all")
  30. public QUser(Path<? extends User> path) {
  31. super((Class)path.getType(), path.getMetadata());
  32. }
  33.  
  34. public QUser(PathMetadata<?> metadata) {
  35. super(User.class, metadata);
  36. }
  37. }
  1. package com.batman.hzdx.batch;
  2.  
  3. import java.util.Date;
  4. import java.util.List;
  5.  
  6. import javax.persistence.EntityManager;
  7. import javax.persistence.PersistenceContext;
  8. import javax.persistence.Query;
  9.  
  10. import com.batman.hzdx.shard.model.QPersion;
  11. import com.batman.hzdx.shard.model.QTmAppMain;
  12. import com.batman.hzdx.shard.model.QUser;
  13. import com.mysema.query.Tuple;
  14. import com.mysema.query.jpa.impl.JPAQuery;
  15.  
  16. public class Apply {
  17. @PersistenceContext
  18. private EntityManager em;
  19.  
  20. public List loadKeys() {
  21. String name = "xiaosi";
  22. Query qu2 = em.createNativeQuery("select password from user where username='111'");
  23. List list3 = qu2.getResultList();
  24. System.out.println(list3.toString());
  25.  
  26. /* QUser qp = new QUser("user");
  27. JPAQuery query = new JPAQuery(em);
  28. List<String> list2 = query.from(qp).where(qp.username.eq(name)).list(qp.password);
  29. System.out.println(list2.toString());*/
  30.  
  31. QPersion qp5 = new QPersion("persion");
  32. JPAQuery query = new JPAQuery(em);
  33. List<String> list5 = query.from(qp5).where(qp5.name.eq(name)).list(qp5.age);
  34. System.out.println(list5.toString());
  35.  
  36. return list5;
  37. }
  38. }
  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:tx="http://www.springframework.org/schema/tx"
  5. xmlns:jee="http://www.springframework.org/schema/jee"
  6. xmlns:jpa="http://www.springframework.org/schema/data/jpa"
  7. xsi:schemaLocation="http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
  8. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  9. http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.1.xsd
  10. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
  11.  
  12. <!-- 这里定义JPA相关配置。总体上来说,这里使用以Hibernate为Provider的JPA2.0方案,使用Spring来进行集成,不依赖于容器的JPA实现。 -->
  13. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  14. <property name="driverClassName" value="#{env['jdbcDriver']}" />
  15. <property name="url" value="#{env['jdbcUrl']}" />
  16. <property name="username" value="#{env['jdbcUsername']}" />
  17. <property name="password" value="#{env['jdbcPassword']}" />
  18. <!-- 最大活动连接:连接池在同一时间能够分配的最大活动连接的数量, 如果设置为非正数则表示不限制 -->
  19. <property name="maxActive" value="#{env['jdbcMaxActive'] ?: 20}" />
  20. <!-- 最大空闲连接:连接池中容许保持空闲状态的最大连接数量,超过的空闲连接将被释放,如果设置为负数表示不限制 -->
  21. <property name="maxIdle" value="#{env['jdbcMaxIdle'] ?: 10 }" />
  22. <!-- 最小空闲连接:连接池中容许保持空闲状态的最小连接数量,低于这个数量将创建新的连接,如果设置为0则不创建 -->
  23. <property name="minIdle" value="#{env['jdbcMinIdle'] ?: 2 }" />
  24. <!-- 初始化连接:连接池启动时创建的初始化连接数量 -->
  25. <property name="initialSize" value="#{env['jdbcInitialSize'] ?: 20}" />
  26. <!-- 最大等待时间:当没有可用连接时,连接池等待连接被归还的最大时间(以毫秒计数),超过时间则抛出异常,如果设置为-1表示无限等待 -->
  27. <property name="maxWait" value="#{env['jdbcMaxWait'] ?: 10000 }" />
  28. <!-- 指明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个 注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串 -->
  29. <property name="testOnBorrow" value="#{env['jdbcTestOnBorrow']?: true}" />
  30. <!-- 进行returnObject对返回的connection进行validateObject校验 -->
  31. <property name="testOnReturn" value="#{env['jdbcTestOnReturn']?: false}" />
  32. <property name="validationQuery" value="#{env['jdbcTestSql']}" />
  33. <property name="validationQueryTimeout" value="#{env['jdbcValidationQueryTimeout'] ?: 1}" />
  34. <!-- 空闲时是否进行验证,检查对象是否有效,默认为false -->
  35. <property name="testWhileIdle" value="#{env['jdbcTestWhileIdle']?: false}" />
  36. <!-- 在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位.如果设置为非正数,则不运行空闲连接回收器线程 -->
  37. <property name="timeBetweenEvictionRunsMillis" value="#{env['jdbcTimeBetweenEvictionRunsMillis']?: 600000}" />
  38. <!-- 连接在池中保持空闲而不被空闲连接回收器线程(如果有)回收的最小时间值,单位毫秒 -->
  39. <property name="minEvictableIdleTimeMillis" value="#{env['jdbcMinEvictableIdleTimeMillis'] ?: 1800000}" />
  40. <!-- 代表每次检查链接的数量,建议设置和maxActive一样大,这样每次可以有效检查所有的链接 -->
  41. <property name="numTestsPerEvictionRun" value="#{env['jdbcMaxActive'] ?: 20}" />
  42. <property name="removeAbandoned" value="#{env['jdbcRemoveAbandoned']?: true}" />
  43. <property name="removeAbandonedTimeout" value="#{env['jdbcRemoveAbandonedTimeout']?: 300}" />
  44. <property name="logAbandoned" value="#{env['jbdcLogAbandoned']?: true}" />
  45. </bean>
  46. <!-- 实体管理类 -->
  47. <bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  48. <description>
  49. 定义EntityManagerFactory,用于Spring控制事务。
  50. 具体的Hibernate配置在persistence.xml中控制,包括JPA Provider和Hibernate的各种参数(不含组件扫描)。
  51. </description>
  52. <property name="dataSource" ref="dataSource" />
  53. <property name="persistenceUnitName" value="default" />
  54. <property name="packagesToScan">
  55. <list>
  56. <value>com.batman.hzdx.shard.model</value>
  57. </list>
  58. </property>
  59. <property name="persistenceProviderClass" value="org.hibernate.ejb.HibernatePersistence"/>
  60. <property name="jpaDialect">
  61. <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
  62. </property>
  63. <property name="jpaVendorAdapter">
  64. <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
  65. <property name="database" value="#{env['jpaDatabaseType']?:'DEFAULT'}" />
  66. <property name="showSql" value="#{env['jpaShowSql']?:false}" />
  67. </bean>
  68. </property>
  69. <!-- <property name="jpaProperties">
  70. <props>
  71. <prop key="hibernate.jdbc.batch_size"></prop>
  72. </props>
  73. </property> -->
  74. </bean>
  75. <!-- 事务设置 -->
  76. <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
  77. <property name="entityManagerFactory" ref="emf"/>
  78. </bean>
  79.  
  80. <!-- 事务使用AspectJ进行编译时Weave -->
  81. <tx:annotation-driven mode="aspectj"/>
  82.  
  83. <!-- Spring Data -->
  84. <jpa:repositories base-package="com.batman.hzdx.shared.model"/>
  85. </beans>

jpa实例的更多相关文章

  1. Spring Data JPA 实例查询

    一.相关接口方法     在继承JpaRepository接口后,自动拥有了按"实例"进行查询的诸多方法.这些方法主要在两个接口中定义,一是QueryByExampleExecut ...

  2. JPA学习---第四节:JPA实例与JPA主键生成策略

    1.编写实体类,代码如下: package learn.jpa.bean; import javax.persistence.Entity; import javax.persistence.Gene ...

  3. Spring data jpa 复杂动态查询方式总结

    一.Spring data jpa 简介 首先我并不推荐使用jpa作为ORM框架,毕竟对于负责查询的时候还是不太灵活,还是建议使用mybatis,自己写sql比较好.但是如果公司用这个就没办法了,可以 ...

  4. 3.JPA开发

    转自:https://blog.csdn.net/aspnetandjava/article/details/7034779 1. 什么是JPA 1. JPA(Java Persistence API ...

  5. SpringBoot12 QueryDSL01之QueryDSL介绍、springBoot项目中集成QueryDSL

    1 QueryDSL介绍 1.1 背景 QueryDSL的诞生解决了HQL查询类型安全方面的缺陷:HQL查询的扩展需要用字符串拼接的方式进行,这往往会导致代码的阅读困难:通过字符串对域类型和属性的不安 ...

  6. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  7. JPA实体关系映射:@ManyToMany多对多关系、@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析

    JPA实体关系映射:@ManyToMany多对多关系.@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析 今天程序中遇到的错误一 org.hibernate.A ...

  8. JPA Hibernate应用实例

    1.配置文件:persistence.xml <?xml version="1.0" encoding="UTF-8"?> <persiste ...

  9. JPA多对多@manytomany注解配置实例

    维护端注解 @ManyToMany (cascade = CascadeType.REFRESH) @JoinTable (//关联表 name = "student_teacher&quo ...

随机推荐

  1. Java 初级面试题及答案

    1.Java中的重载与重写有什么区别 重载(Overload)是让类以统一的方式处理不同类型数据的一种手段,实质表现就是多个具有不同的参数个数或者类型的同名函数(返回值类型可随意,不能以返回类型作为重 ...

  2. 理解JVM之垃圾收集器概述

    前言 很多人将垃圾收集(Garbage Collection)视为Java的伴生产物,实际1960年诞生的Lisp是第一门真正使用内存动态分配与垃圾手机技术的语言.在目前看来,内存的动态分配与内存回收 ...

  3. php面向对象精要(1)

    1.静态属性与方法 每一个类的实例拥有自己的属性和方法,每一个类也可以包含静态属性,静态属性不属于类的任何实例,可以把静态属性理解成存储在类中的全局变量,可以在任何地方通过类名引用静态属性. < ...

  4. 【学习笔记】--- 老男孩学Python,day4 编码,数据类型,字符串方法

    今日主要内容 1. 编码 1. 最早的计算机编码是ASCII. 美国人创建的. 包含了英文字母(大写字母, 小写字母). 数字, 标点等特殊字符!@#$% 128个码位 2**7 在此基础上加了一位 ...

  5. 【 js 基础 】【 源码学习 】 深浅拷贝

    underscore的源码中,有很多地方用到了 Array.prototype.slice() 方法,但是并没有传参,实际上只是为了返回数组的副本,例如 underscore 中 clone 的方法: ...

  6. drupal7 获取profile2模块自定义字段的值

    $user=user_load($uid); $student=profile2_load_by_user($user,'student'); 这个函数官方有文档,通过用户对象返回用户的profile ...

  7. Java基础笔记(3) 进制与进制转换

    ---恢复内容开始--- 进制 在一般生活中,我们一直在应用的十进制,就是逢十进一,而今天我们要接触的是,计算机编程常用的进制!首先我们要知道,计算机内部运算采用的是二进制,也就是逢二进制! 1.什么 ...

  8. Git仓库初始化与推送到远端仓库

    以下命令为Git仓库初始化,添加远端代码托管仓库,以及推送到远端仓库的命令. 以 "github.com"为远端仓库做示例 # Git 库初始化 git init # 将文件添加到 ...

  9. sqlserver 一键备份,异机还原脚本

    REM +---------------------------------------------------------------------------------+ REM |desc AU ...

  10. 红帽7配置samba文件共享服务

    samba软件主要功能是为客户机提供共享使用的文件夹. 使用的协议是SMB(TCP 139).CIFS(TCP445). 所需的软件包:samba 系统服务:smb 1.安装samba服务 ~]#yu ...