packagestoscan

软件系统开发的核心是数据。贯穿表示层、业务逻辑层、数据访问层的一般三层架构体系是什么?数据!“21世纪什么最贵?数据!”

数据访问层获取数据->;业务逻辑层处理数据->;表示层显示数据。表示层页面提交数据-& gt;业务逻辑层处理数据->;数据访问层的数据存储软件系统的开发,很大程度上就是数据处理的过程。为了统一和简化相关的数据访问操作,J2EE的核心模式提出了DAO(数据访问对象)模式。本文主要讨论Ja开发中数据访问的演变。

一. JDBC

JDBC (Ja Database Connectivity)是一个用于执行SQL语句的Ja API,可以提供对各种关系数据库的统一访问。它由一组用Ja语言编写的类和接口组成。JDBC提供了一个基准,通过它可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

我刚学Ja的时候,用JDBC操作数据库。获取连接,使用和关闭连接。一般情况下,编写一个获取、执行和关闭连接的工具类。

二。数据库连接池

当软件对性能有一定要求时,直接使用JDBC是不合适的,频繁获取/关闭数据库连接会消耗太多资源,严重影响系统性能,所以系统一般使用数据库连接池技术。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重用一个已有的数据库连接,而不是重新建立一个;释放空空闲时间超过最大空空闲时间的数据库连接,避免因不释放数据库连接而导致的数据库连接遗漏。该技术可以明显提高数据库操作的性能。

三。ORM框架

随着软件开发的不断进步,ORM框架逐渐成为主流。ORM是对象关系映射。简单来说,程序员不再需要直接操作表,而是可以通过操作对象来增加、删除和检查数据。ORM(对象关系映射)框架使用元数据来描述对象和关系之间的映射细节,元数据一般采用XML格式或者标注(标注已经成为主流)。常见的ORM框架:Hibernate,MyBatis等。

四。作业的装配区(JobPackArea)

JPA是Ja持久性API(Ja Persistence API),它是用于在数据库中存储数据的类和方法的集合。JPA通过JDK 5.0注解或XML描述对象和关系表之间的映射关系,将运行时的实体对象持久化到数据库中。

随着各种ORM框架的不断发展,Ja制定了统一的持久性标准。在开发过程中使用JPA接口,不需要关心JPA的具体实现技术,可以是Hibernate或者MyBatis等等。

联合行动计划的核心组成部分如下:

& gtEntityManagerFactory:创建和管理多个entitymanager实例>;EntityManager:接口,它管理对象的操作(创建、更新、删除、查询)>实体:持久对象,作为记录存储在数据库中>;EntityTransaction:与EntityManager > Persistence一对一:包含获取EntityManagerFactory >实例的静态方法;查询:操作员必须实现的接口,以获得满足creteria V. Spring对数据访问支持的关系对象。

1.春天与JDBC的融合

Spring与JDBC的集成主要采用模板+回调的模式,通过JdbcTemplate类来避免每次使用时获取和释放连接。常见的xml配置:

& ltbean id = & # 34数据源& # 34;class = & # 34com . m change . v2 . c3p 0 . combobooleddatasource & # 34;& gt& lt属性名= & # 34;jdbcUrl & # 34value = & # 34JDBC:MySQL://localhost:3306/spring _ 03 & # 34;& gt& lt/property & gt;& lt属性名= & # 34;driverClass & # 34value = & # 34com . MySQL . JDBC . driver & # 34;& gt& lt/property & gt;& lt属性名= & # 34;用户& # 34;value = & # 34根& # 34;& gt& lt/property & gt;& lt属性名= & # 34;密码& # 34;value = & # 34123456"& gt& lt/property & gt;& lt/bean & gt;& ltbean id = & # 34jdbcTemplate & # 34class = & # 34org . spring framework . JDBC . core . JDBC template & # 34;& gt& lt属性名= & # 34;数据源& # 34;ref = & # 34数据源& # 34;& gt& lt/property & gt;& lt/bean & gt;& ltbean id = & # 34userDao & # 34class = & # 34com . spring . Dao . userdao & # 34;& gt& lt属性名= & # 34;jdbcTemplate & # 34ref = & # 34jdbcTemplate & # 34& gt& lt/property & gt;& lt/bean & gt;& ltbean id = & # 34用户服务& # 34;class = & # 34com . spring . service . userservice & # 34;& gt& lt属性名= & # 34;userDao & # 34ref = & # 34userDao & # 34& gt& lt/property & gt;& lt/bean & gt;2.Spring与ORM的集成

Spring对ORM的集成类似于JDBC,以Hibernate为例,主要是通过HibernateTemplate。模板+回调模式请参考后续文章。

3.Spring对JPA的支持

Spring与JPA的集成主要是Spring-Data-JPA项目,是Spring-Data的子项目。Spring-Data是Spring与JPA的集成,主要是Spring-Data-JPA项目,是Spring-Data的子项目。Spring-Data是Spring专门用于数据访问的模块,包含了目前流行的主流数据存储技术,包括Spring-data-JPA、Spring-data-JDBC、Spring-data-redis、Spring-data-MongoDB等http://projects.spring.io/spring-data/.

Spring-Data-JPA配置文件:

& lt?xml版本= & # 34;1.0"编码= & # 34;UTF-8 & # 34;?& gt& ltbeans xmlns = & # 34http://www.springframework.org/schema/beans" xmlns:xsi = & # 34;http://www.w3.org/2001/XMLSchema-instance" xmlns:AOP = & # 34;http://www.springframework.org/schema/aop" xmlns:context = & # 34;http://www.springframework.org/schema/context" xmlns:JDBC = & # 34;http://www.springframework.org/schema/jdbc" xmlns:tx = & # 34;http://www.springframework.org/schema/tx" xmlns:JPA = & # 34;http://www.springframework.org/schema/data/jpa" xsi:schema location = & # 34;http://www.springframework.org/schema/beans http://www . spring framework . org/schema/beans/spring-beans . xsd http://www.springframework.org/schema/ AOP http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/ context/spring-context . xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/data/jpa http://www . spring framework . org/schema/data/JPA/spring-JPA-1.3 . xsd & # 34;default-lazy-init = & # 34;假& # 34;& gt& lt!-介绍属性文件-& gt;& ltcontext:property-placeholder ignore-resource-not-found = & # 34;假& # 34;订单= & # 34;1"ignore-unresolved = & # 34;真& # 34;location = & # 34class path *:/META-INF/application . properties & # 34;/& gt;& ltbean id = & # 34数据源& # 34;class = & # 34org . spring framework . JDBC . data source . drivermanagerdatasource & # 34;& gt& lt属性名= & # 34;driverClassName & # 34value = & # 34$ { jdbc.driver } & # 34/& gt;& lt属性名= & # 34;网址& # 34;value = & # 34$ { jdbc.url } & # 34/& gt;& lt属性名= & # 34;用户名& # 34;value = & # 34$ { jdbc.username } & # 34/& gt;& lt属性名= & # 34;密码& # 34;value = & # 34$ { jdbc.password } & # 34/& gt;& lt/bean & gt;& lt!-& lt;bean id = & # 34ehcacheManager & # 34class = & # 34org . spring framework . cache . ehcache . ehcachemanagerfactorybean & # 34;& gt& lt属性名= & # 34;配置位置& # 34;value = & # 34class path:/META-INF/XML/ehcache . XML & # 34;/& gt;& lt/bean & gt;-& gt;& lt!-定义aop方面自动代理-& gt;& ltAOP:AspectJ-autoproxy proxy-target-class = & # 34;真& # 34;/& gt;& lt!- Jpa实体管理器配置-& gt;& ltbean id = & # 34entityManagerFactory & # 34class = & # 34org . spring framework . ORM . JPA . localcontainereentitymanagerfactorybean & # 34;& gt& lt属性名= & # 34;数据源& # 34;ref = & # 34数据源& # 34;/& gt;& lt属性名= & # 34;jpendorAdapter & # 34ref = & # 34hibernateJpendorAdapter & # 34/& gt;& lt属性名= & # 34;packagesToScan & # 34value = & # 34com . mu Xuan Li . app & # 34;/& gt;& lt属性名= & # 34;jp房地产& # 34;& gt& lt道具& gt& lt!-& lt;prop key = & # 34hibernate . cache . region . factory _ class & # 34;& gtorg . hibernate . cache . ehcache . ehcacheregionfactory & lt;/prop & gt;& ltprop key = & # 34net . SF . ehcache . configuration resourcename & # 34;& gt/META-INF/XML/ehcache-cache . XML & lt;/prop & gt;& ltprop key = & # 34hibernate . E . naming _ strategy & # 34;& gtorg . hibernate . CFG . improvednamingstrategy & lt;/prop & gt;-& gt;& lt!-数据库中表字段的命名,如属性userName的字段名user_name。如果不添加此表,将出现两个字段:用户名用户名-& gt;& ltprop key = & # 34hibernate . E . naming _ strategy & # 34;& gtorg . hibernate . CFG . improvednamingstrategy & lt;/prop & gt;& ltprop key = & # 34hibernate.dialect & # 34& gtorg . hibernate . dialect . MySQL 5 innodb dialect & lt;/prop & gt;& ltprop key = & # 34hibernate . hbm 2 DDL . auto & # 34;& gt更新& lt/prop & gt;& ltprop key = & # 34hibernate.show _ sql & # 34& gttrue & lt/prop & gt;& lt/props & gt;& lt/property & gt;& lt/bean & gt;& ltbean id = & # 34hibernateJpendorAdapter & # 34class = & # 34org . spring framework . ORM . JPA . vendor . hibernatejpendoradapter & # 34;& gt& lt属性名= & # 34;数据库平台& # 34;& gt& ltbean factory-method = & # 34;getDialect & # 34class = & # 34org . spring side . modules . persistence . hibernates & # 34;& gt& lt构造函数-arg ref = & # 34;数据源& # 34;/& gt;& lt/bean & gt;& lt/property & gt;& lt/bean & gt;& lt!- Spring Data Jpa配置,扫描所有从存储库继承的数据;–>的接口;& ltjpa:仓库基础包= & # 34;com . mu Xuan Li . app & # 34;repository-impl-postfix = & # 34;plus simple & # 34;transaction-manager-ref = & # 34;transactionManager & # 34entity-manager-factory-ref = & # 34;entityManagerFactory & # 34/& gt;& lt!-事务管理器配置,Jpa单数据源事务->;& ltbean id = & # 34transactionManager & # 34class = & # 34org . spring framework . ORM . JPA . jpatransactionmanager & # 34;& gt& lt属性名= & # 34;entityManagerFactory & # 34ref = & # 34entityManagerFactory & # 34/& gt;& lt/bean & gt;& lt!-使用注释来定义事务-& gt;& lttx:注释驱动的事务管理器= & # 34;transactionManager & # 34proxy-target-class = & # 34;真& # 34;/& gt;& lt!- hibernate验证程序-& gt;& ltbean id = & # 34验证器& # 34;class = & # 34org . spring framework . validation . bean validation . localvalidatorfactorybean & # 34;/& gt;& lt/beans & gt;五. Spring Boot的数据处理

参考后续文章。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

发表回复

登录后才能评论