`

Spring-数据访问:模板,数据源 -- 转载

 
阅读更多
spring--数据库
spring访问数据库的原则是:模板--回调模式.采用的是设计模式中的模板模式.
在项目中,数据库只可能用一种,可能是mysql,可能是oracle.甚至同一数据库实现对其的使用也有很多方法.如mysql可以通过jdbc,hibernate等方法进行.一旦我们定义好数据库的使用,就可以进行对应的操作.CURD.
因为所有的数据库相关操作都包括一些固定的步骤:
1.获得连接或其他资源;(不同数据库的实现方式可能不同,但在一个项目中一般只用一个)
2.开始事务.同上
3.处理事务(查找,更新,删除等).在同一项目中操作表有很多,所以此步是多变的.
4.得到结果.不同数据表肯定有不同结果,而且有时候要返回一个对象,有时候要返回多个,如List.所以此步也多变
5.提交或回滚(commit或rollback).数据库选中后此步肯定是统一的.
6.关闭连接或其他资源.同上
 
这里的模板回调如下:
将一些公用的,不变的步骤放在模板类中,将可变的放在回调类中.如上面的介绍,模板和回调的划分如下:
 
模式                              回调
1.准备资源
2.开始事务
                                 3.处理事务
                                 4.得到结果
5.提交/回滚事务
6.关闭资源和错误处理
 
如上所述.一个项目中一般只选用一种数据库连接的实现方式.这里说的用模式方式实现体现这种性质的方式是在多种模式实现.不同模板实现上图中左侧方法的方式不同.而右侧的回调,不同方式也有不同的回调类.
模板主要有:
jdbc.core.JdbcTemplate                                          JDBC连接
jdbc.core.nameparam.NameParameterJdbcTemplate                   支持命名参数的JDBC连接
jdbc.core.simple.SimpleJdbcTemplate                             JDBC连接,Java 5 中进行了简化
orm.hibernate.HibernateTemplate                                 Hibernate 2.x 版本中的实现
orm.hibernate3.HibernateTemplate                                Hibernate 3.x 版本中的实现
orm.ibatisSqlMapClientTemplate                                  iBATIS SqlMap客户
orm.jpa.JpaTemplate                                             Java存储API实体管理器
orm.toplink.TopLinkTemplate                                     Oracle的TopLink
 
还有一些其他的模板.但不是主流的,上面JDBC肯定是最基本的,而且只是JDBC也有三种不同实现.
orm实现中最流利的就是hibernate和ibatis,上面列出了对应的实现.
模板的功能是提供公用的不变的方法,在代码中体现如:
jdbcTemplate.update(...);用来更新数据.
jdbcTemplate.query(...);用来查询.
上面是JdbcTemplate的应用,当然,我们先要将该对象添加到我们的类中才能使用.同样,其他模板在使用前也要先在项目中存在.我们可以在类中通过new 来实例化.但这样就将数据库实现耦合了.spring以解耦合为目标,所以我们也可以通过注入的方式来实现.但模板只定义了使用数据库的一些方法,但使用的是哪个数据库呢.这些数据是在哪里定义的.通常是在数据源中定义.
而数据源的定义也有三种:
1.jndi
2.jdbc
3.连接池
一.JNDI方式:
项目肯定是要发布在容器中的.窗口有很多,有J2EE容器诸如jboss,websphere,也有普通点的tomcat.但如果容器支持jndi,我们 就可以通过它来得到数据源.以tomcat为例.tomcat是支持jndi的,我们在它的配置文件里面定义一个数据源,在项目中(当然得布置在它上面) 就可以通过JNDI获得它.tomcat配置数据源的方式为:
配置:GlobalNamingResources
<GlobalNamingResources>
  <ResourceParams name="jdbc/MyDs">
    <parameter>
      <name>driverClassName</name>
      <value>org.hsql.jdbcDriver</value>
    </parameter>
    <parameter>
      <name>driverName</name>
      <value>jdbc:HypersonicSQL:database</value>
    </parameter>
    <parameter>
      <name>user</name>
      <value>dbusername</value>
    </parameter>
    <parameter>
      <name>password</name>
      <value>dbpassword</value>
    </parameter>
  </ResourceParams>
</GlobalNamingResources>
tomcat更多配置及解释请参考:
在tomcat中配置好数据源后,在spring配置文件中可能如下引用:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton">
    <property name="jndiName" value="jdbc/MyDs" />
    <property name="resourceRef" value="true" />
</bean>
这样在配置文件中就定义好了,然后就可以将这个数据源配置到我们的模板中.这个后面再说,先把其他两种数据源定义方式介绍完.
二.JDBC方式:
因为jdbc是java最基本的访问数据库的方式.所以它对数据源的定义也是最基本的,直接用的jdbc包中的一些内容.jdbc中也现成的 datasource可以用:包含在org.springframework.jdbc.datasource包中.可选的数据源有两种:
DrivermanagerDataSource:每个连接请求都新建一个连接.但没有连接池管理.
SingleConnectionDataSource:每个连接请求都返回同一连接.
定义方式如下:
<bean id="dataSource" class="org.springframework.jdbc.datasource.上面的两个中的一个,自己选">
    <property name="driverClassName" value="数据库驱动名称如:com.mysql.jdbc.Driver"/>
    <property name="url" value="数据库地址,如:jdbc:mysql://localhost:3306/RSINFOREGSYS-2?useUnicode=true&amp;characterEncoding=UTF-8" />
    <property name="username" value="数据库用户名,如:root" />
    <property name="password" value="数据库密码,如root" />
</bean>
三.连接池方式:
所谓连接池就是将数据库连接放在一个地方集中进行管理,用户请求的时候从池中获取.释放后放回池中.有点象缓存.同时它还有些管理,如最大连接,因为池的 容量有限,如果当前数据库的连接数超过最大数时,新请求的连接就会进行等待.诸如此许多功能.所以连接池是首选的方式,但如果项目较小,不用考虑效率等问 题,用JDBC方式比较直接.相反JNDI倒是最不常用的方式,因为它将项目和web容器耦合了.一般情况下我们希望只需要更改项目的配置就能更改数据库 的配置.而不是改动web容器.
当使用连接池来进行管理的时候,我们需要提供连接池功能的数据源.这样的源有很多.最基本的是DBCP,它只是提供数据源功能,是用何数据库还是得自己决 定,所以看到下面的配置中还是要我们输入数据驱动的名称和数据库地址.而下面的initialSize和maxActive配置的是扩展功能的配置.
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/RSINFOREGSYS-2" />
    <property name="username" value="root" />
    <property name="password" value="" />
    <property name="initialSize" value="5" />
    <property name="maxActive" value="10" />
</bean>
另一个比较常用的是c3p0数据池:
<!-- 数据源配置:MySQL501 -->
<bean id="mysqlDataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
    <property name="driverClass" value="com.mysql.jdbc.Driver" />
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/RSINFOREGSYS-2" />
    <property name="user" value="root" />
    <property name="password" value="" />
    <!--连接池中保留的最小连接数 -->
    <property name="minPoolSize" value="5" />
    <!--连接池中保留的最大连接数 Default: 15 -->
    <property name="maxPoolSize" value="30" />
    <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间 Default: 3 -->
    <property name="initialPoolSize" value="10" />
    <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃 Default: 0 -->
    <property name="maxIdleTime" value="0">
    <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数 Default: 3 -->
    <property name="acquireIncrement" value="8" />
</bean>
不同的连接池的属性不同.用的时候自己查相关介绍就可以了.
分享到:
评论

相关推荐

    Spring boot 示例 官方 Demo

    spring-boot-mybatis-mulidatasource:springboot+mybatis多数据源最简解决方案 spring-boot-mybatis-annotation-mulidatasource:springboot+mybatis(注解版)多数据源最简解决方案 spring-boot-thymeleaf:simple...

    spring-framework-4.1.6.RELEASE

    Spring Framework 4.1.6.RELEASE沿用了Spring的模块化设计,包括核心容器(Core Container)、数据访问/集成(Data Access/Integration)、Web、AOP(面向切面编程)、工具(Tools)以及测试(Test)等模块。...

    Spring Boot Examples

    spring-boot-mybatis-mulidatasource:springboot+mybatis多数据源最简解决方案 spring-boot-mybatis-annotation-mulidatasource:springboot+mybatis(注解版)多数据源最简解决方案 spring-boot-thymeleaf:...

    spring-boot2.0全新教程实例20例.zip

    - [spring-boot-multi-mongodb](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mongodb/spring-boot-multi-mongodb):Spring Boot 和 Mongodb 多数据源的使用 - [spring-boot-...

    spring-framework-4.0.5完整版下载

    在4.0.x系列版本中,Spring MVC 已经相当成熟,支持注解驱动的控制器,模板引擎集成,以及强大的数据绑定和验证功能。 2. **AOP 改进**:在4.0版本中,Spring 对 AOP 进行了优化,包括更好的代理模型和增强的切面...

    spring-boot-starter-mybatis-spring-boot-3.0.0.tar.gz

    本文将围绕"spring-boot-starter-mybatis-spring-boot-3.0.0"这一主题,深入探讨Spring Boot 3.0.0版本中如何优雅地集成MyBatis,并分享如何在Linux环境下进行免费下载与部署。 首先,`spring-boot-starter-mybatis...

    spring-roo-docs

    SpringRoo通过自动化的数据访问功能简化了DAO层的操作,主要包括: - 自动生成DAO:SpringRoo自动生成基本的数据访问对象。 - 自动映射:自动处理对象与数据库表之间的映射。 **3.7 Maven** Maven是SpringRoo项目...

    Spring集成MongoDB官方指定jar包:spring-data-mongodb-1.4.1.RELEASE.jar

    Spring集成MongoDB官方指定jar包:spring-data-mongodb-1.4.1.RELEASE.jar

    dynamic-datasource-spring-boot-starter_多数据源_

    `dynamic-datasource-spring-boot-starter`项目正致力于解决这个问题,它是一个基于Spring Boot的启动器,用于实现动态数据源切换,提供灵活的数据源管理功能。 **动态数据源**指的是在一个应用中可以动态地选择...

    spring-multiple-datasources:有关如何使用Liquibase在Spring Boot中配置多个数据源以进行数据库初始化的示例代码

    使用Liquibase的Spring Boot多个数据源多个数据源您需要向yaml配置文件中添加几个数据源定义。 datasource: primary: url: jdbc:mysql://localhost/primary username: root driver-class-name: ...

    参照阿里druid整理druid-spring-boot-starter的demo

    `druid-spring-boot-starter`自动配置了数据源、监控统计以及相关的初始化设置,使得开发者无需编写大量繁琐的XML配置或Java配置代码。 【Demo的构建】 这个"参照阿里druid个人整理druid-spring-boot-starter可...

    spring boot 42讲配套源码.zip

    第 2-3 课 模板引擎 Thymeleaf 基础使用/spring-boot-thymeleaf 第 2-4 课 模板引擎 Thymeleaf 高阶用法/spring-boot-thymeleaf 第 2-5 课 Thymeleaf 页面布局/spring-boot-thymeleaf-layout 第 2-6 课:使用 ...

    spring-framework-4.0.1.RELEASE.zip

    - `spring-tx`: 支持声明式和编程式的事务管理,适用于各种数据源,如JDBC、Hibernate和JPA。 4. **Web模块**: - `spring-web`: 提供了与HTTP协议相关的工具类,如Servlet监听器、HTTP客户端支持等。 - `spring...

    Spring Boot使用spring-data-jpa配置Mysql多数据源

    在Spring Boot应用中,使用`spring-data-jpa`来配置MySQL多数据源是一项常见的需求,尤其是在构建大型分布式系统时,为了实现数据隔离、负载均衡或读写分离等目的。本教程将详细介绍如何在Spring Boot项目中配置多个...

    spring-framework-4.3.18.RELEASE官方完整包加官方文档

    在实际项目中,开发者可以利用这些特性构建灵活、可扩展的应用,同时通过`spring-framework-4.3.18.RELEASE-dist.zip`提供的库文件,可以直接引入到项目中使用。总的来说,Spring Framework 4.3.18.RELEASE为Java...

    spring-boot 1.2.4.release

    - `spring-boot-sample-web`:基础的Web应用示例,可能包含Thymeleaf、FreeMarker或Groovy模板引擎的使用。 - `spring-boot-sample-actuator`:Actuator的使用示例,展示如何监控和管理应用。 - `spring-boot-sample...

    spring-data-jpa-extra:带有模板动态查询的spring数据jpa(例如

    春天数据jpa额外使用jpa的spring数据更舒适我爱spring-data-jpa,她放开我的双手,粗鲁的方法很无聊! 然而,尽管她为我们提供了规范解决方案,但她在动态本机查询上并不完美,而且她的返回类型必须是一个实体,但是...

    spring3全部jar包

    同时,它还对JDBC进行了优化,包括更强大的模板类和简化数据源配置,使得数据库操作更为简便。 在Web层面上,Spring MVC(Model-View-Controller)框架在3.1.1版本中提供了更好的RESTful服务支持,包括路径变量和...

    movies-java-spring-data-neo4j:使用Spring Data Neo4j的Neo4j电影示例

    电影示例应用 如何一起使用Spring ...堆栈这些是我们的Web应用程序的组件: 应用程序类型:Spring-Boot Java Web Application Web框架:启用Spring-Boot的Spring-WebMVC 持久性访问:Spring-Data-Neo4j 6.x 数据库:Ne

    spring-boot-sample:spring-boot集成的druid数据库连接池,spring-boot实现的德鲁伊的动态数据源,spring-boot实现定时任务时间表,spring-boot集成mybatis

    本系列是spring-boot相关的一些列子,比如spring-boot集成druid,以及druid的动态数据源切换, spring-boot 集成mybatis,spring-boot集成定时器等等 1,弹簧靴集成德鲁伊数据库连接池 详情查看项目 2,spring-boot...

Global site tag (gtag.js) - Google Analytics