A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小鲁哥哥 于 2017-2-26 10:55 编辑

【济南中心】JavaEE框架:spring(三)——spring4新特性



9、spring新特性:spring boot、spring data一、spring data第一章:Spring Data JPA入门
SpringData是什么?
SpringData是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。 Spring Data 包含多个子项目:
Commons - 提供共享的基础框架,适合各个子项目使用,支持跨数据库持久化
JPA - 简化创建 JPA 数据访问层和跨存储的持久层功能
Hadoop - 基于 Spring 的Hadoop 作业配置和一个 POJO 编程模型的 MapReduce 作业
Key-Value - 集成了 Redis 和 Riak ,提供多个常用场景下的简单封装
Document -集成文档数据库:CouchDB 和 MongoDB 并提供基本的配置映射和资料库支持
Graph - 集成 Neo4j 提供强大的基于POJO 的编程模型
Graph RooAddOn - Roo support for Neo4j
JDBCExtensions - 支持 OracleRAD、高级队列和高级数据类型
Mapping - 基于 Grails 的提供对象映射框架,支持不同的数据库
Examples -示例程序、文档和图数据库
Guidance -高级文档
SpringData JPA是什么
由Spring提供的一个用于简化JPA开发的框架
nSpringData JPA能干什么
可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了CRUD外,还包括如分页、排序等一些常用的功能。
SpringData JPA有什么
主要来看看SpringData JPA提供的接口,也是SpringData JPA的核心概念:
1:Repository:最顶层的接口,是一个空的接口,目的是为了统一所有Repository的类型,且能让组件扫描的时候自动识别。
2:CrudRepository :是Repository的子接口,提供CRUD的功能
3:PagingAndSortingRepository:是CrudRepository的子接口,添加分页和排序的功能
4:JpaRepository:是PagingAndSortingRepository的子接口,增加了一些实用的功能,比如:批量操作等。
5:JpaSpecificationExecutor:用来做负责查询的接口
6:Specification:是SpringData JPA提供的一个查询规范,要做复杂的查询,只需围绕这个规范来设置查询条件即可

HelloWorld
n环境构建
在Eclipse里面构建一个普通的Java工程,主要就是要加入一堆的jar包。
1:首先去官网下载Spring Data Common 和 Spring Data JPA的包,把里面dist的jar包加入到工程中,这里是spring-data-commons-1.5.0.RELEASE.jar和spring-data-jpa-1.3.2.RELEASE.jar
2:把Spring3.2.3的jar包添加到工程中
3:JPA的实现选用的是Hibernate4.2.0,总共还需要额外加入如下的jar:
antlr-2.7.7.jar
aopalliance-1.0.jar
asm-3.2.jar
aspectjrt-1.7.1.jar
aspectjweaver-1.7.1.jar
commons-beanutils-1.8.3.jar
commons-codec-1.7.jar
commons-collections-3.2.1.jar
commons-dbcp-1.4.jar
commons-fileupload-1.2.2.jar
commons-io-2.4.jar
commons-lang3-3.1.jar
commons-logging-1.1.1.jar
commons-pool-1.6.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-4.0.1.Final.jar
hibernate-core-4.2.0.Final.jar
hibernate-entitymanager-4.2.0.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
javassist-3.15.0-GA.jar
jboss-logging-3.1.0.GA.jar
jboss-transaction-api_1.1_spec-1.0.0.Final.jar
mysql-connector-java-5.1.9.jar
slf4j-api-1.7.3.jar
n实体对象,就是以前的实现方式
@Entity
@Table(name="tbl_user")
public  class UserModel {
@Id
private  Integer uuid;
private  String name;
private  Integer age;
//省略getter/setter
}
nDAO的接口
public  interface UserRepository extends JpaRepository<UserModel, Integer>{  
//空的,可以什么都不用写
}

无需提供实现,SpringData JPA会为我们搞定一切
n写个逻辑层的Service,其实就相当于DAO的客户端,用来测试
@Service
@Transactional
public  class Client {
@Autowired
private  UserRepository ur;
public  void testAdd(UserModel um){ ur.save(um); }
public  static void main(String[] args) {
ApplicationContext  ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
Client  c = (Client)ctx.getBean("client");
UserModel  um = new UserModel();
um.setAge(1);
um.setName("张三");
um.setUuid(1);
c.testAdd(um);
}  }

n同样需要在Spring的配置文件中配置,基本跟使用注解的配置类似:
<?xml  version="1.0" encoding="UTF-8"?>
<beans  xmlns="http://www.springframework.org/schema/beans"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context  http://www.springframework.org/s ... ing-context-3.0.xsd
http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/data/jpa  http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
">
<context:component-scan  base-package="cn.javass">
<context:exclude-filter  type="annotation“  expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<aop:aspectj-autoproxy  proxy-target-class="true"/>
<!--  开启注解事务 只对当前配置文件有效  -->
<tx:annotation-driven  transaction-manager="transactionManager"  proxy-target-class="true"/>
    <jpa:repositories
             base-package="cn.javass"
             repository-impl-postfix="Impl"
             entity-manager-factory-ref="entityManagerFactory"
             transaction-manager-ref="transactionManager">
     </jpa:repositories>   
     <bean id="entityManagerFactory"
           class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
         <property name="dataSource" ref="dataSource"/>
         <property name="packagesToScan" value="cn.javass"/>
         <property name="persistenceProvider">
             <bean class="org.hibernate.ejb.HibernatePersistence"/>
         </property>
         <property name="jpaVendorAdapter">
             <bean  class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                 <property name="generateDdl" value="false"/>
                 <property name="database" value="MYSQL"/>
                 <property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
                 <property name="showSql" value="true"/>
             </bean>
         </property>
         <property name="jpaDialect">
             <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
         </property>
         <property name="jpaPropertyMap">
            <map>
                 <entry key="hibernate.query.substitutions" value="true 1,  false 0"/>
                 <entry key="hibernate.default_batch_fetch_size"  value="16"/>
                 <entry key="hibernate.max_fetch_depth" value="2"/>  
                 <entry key="hibernate.generate_statistics"  value="true"/>
                 <entry key="hibernate.bytecode.use_reflection_optimizer"  value="true"/>
                 <entry key="hibernate.cache.use_second_level_cache"  value="false"/>
                 <entry key="hibernate.cache.use_query_cache"  value="false"/>
             </map>  
         </property>  
     </bean>  
<!--事务管理器配置-->  
     <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">  
         <property name="entityManagerFactory"  ref="entityManagerFactory"/>  
     </bean>  
<bean  name="dataSource"  class="org.apache.commons.dbcp.BasicDataSource">  
<property  name="driverClassName"><value>org.gjt.mm.mysql.Driver</value></property>  
<property  name="url"><value>jdbc:mysql://localhost:3306/cc?useUnicode=true&characterEncoding=UTF-8</value></property>
<property  name="username"> <value>root</value>  </property>
<property  name="password" value="cc"/>
</bean>
</beans>
配置完成后,可以去运行Client测试一下了,当然数据库和表需要先准备好
也可以在<jpa:repositories>下面添加filter,形如:
  <repositories  base-package="com.acme.repositories">
  <context:exclude-filter  type="regex" expression=".*SomeRepository" />
  </repositories>



1 个回复

倒序浏览
谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马