Spring访问数据的方式

来源:互联网 发布:mac战网如何更改地区 编辑:程序博客网 时间:2024/05/29 02:28

访问数据的方式,传统的JDBC,Spring封装的数据库连接池(Datasource,DBCP,Tomcat的JIDN),Spring中的JdbcTemplte(org.springframework.jdbc.core)

现在介绍一下,Spring还可以结合其他工具操作数据库。

使用ORM工具访问数据库:


(一)了解ORM

Object——Relational——Mapping

对象 关系型数据库 映射



ORM包括一下4个部分:

1、一个对持久类对象进行增删改查的API

2、一个语言或API用来规定与类和类属性相关的查询

3、一个规定mapping metadata的工具(metadata元数据,记录一些数据本身的信息)

4、一种技术可以让ORM的实现同事务对象一起进行dirty cheking(脏数据检查),lazy association fetching(懒加载)以及其他的优化操作。


(二)使用Hibernate

Spring+Hibernate

四个步骤:

配置Spring的xml

配置***.hbm.xml

新建一个bean类

新建一个DAO

Spring的xml:

<!-- 配置DataSOurce --><bean id="dataSOurce" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName"><value>oracle.jdbc.driver.OracleDriver</value></property><property name="url"><value>jdbc:oracle:thin:@127.0.0.1:1521:orcl</value></property><property name="username"><value>hr</value></property><property name="password"><value>hr12345</value></property></bean><!-- 配置hibernate发=的SessionFactory --><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource"><ref bean="dataSource"/></property><property name="mappingResources"><list>com/gc/acion/Student.hbm.xml</list></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop><prop key="hibernate.showsql">true</prop></props></property></bean><!-- 配置transactionManager --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="sessionFactory"><ref bean="sessionFactory"/></property></bean><!-- 配置DAO --><bean id="com.gc.acion.StudentDAO"><property name="sessionFactory"><ref bean="sessionFactory"/></property><property name="transactionManager"><ref bean="transactionManager"/></property></bean>

Hibernate通过SessionFactory创建和维护Session,Spring对SessionFactory的配置进行了整合。


Student.hbm.xml配置:

<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0"?>    <!DOCTYPE hibernate-mapping PUBLIC         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">            <!--         <hibernate-mapping>一般不去配置,采用默认即可。        default-cascade="none":默认的级联风格,表与表联动。        default-lazy="true":默认延迟加载     -->    <hibernate-mapping>            <class name="com.gc.acion.Student" table="tbstudent" dynamic-insert="true" dynamic-update="true" optimistic-lock="version">                    <id name="id">                <!-- <generator>:指定主键由什么生成,推荐使用uuid(随机生成唯一通用的表示符,实体类的ID必须是String),                                 native(让数据库自动选择用什么生成(根据底层数据库的能力选择identity,sequence或hilo中的一种)),                                 assigned(指用户手工填入,默认)。 -->                <generator class="uuid"/>            </id>                        <!--                 <version/>:使用版本控制来处理并发,要开启optimistic-lock="version"和dynamic-update="true"。                name="version":持久化类的属性名,column="version":指定持有版本号的字段名;             -->            <version name="version" column="version"/>                        <!--                 <property>:为类定义一个持久化的javaBean风格的属性。                name="name":标识属性的名字,以小写字母开头;                column="name":表主键字段的名字,如果不填写与name一样;                update="true"/insert="true":默认为true,表示可以被更新或插入;             -->            <property name="name" column="name" />            <property name="msg" column="msg"/>                        <!--                 组件映射:把多个属性打包在一起当一个属性使用,用来把类的粒度变小。                <component name="属性,这里指对象">                    <property name="name1"></property>                    <property name="name2"></property>                </component>             -->                          <!--                 <join>:一个对象映射多个表,该元素必须放在所有<property>之后。                <join table="tbl_test:子表名">                    <key column="uuid:子表主键"></key>                <property name="name1:对象属性" column="name:子表字段"></property>             </join>              -->                     </class>            </hibernate-mapping> 

bean:

package com.gc.acion;/** * 表结构tbstudent (id,name, msg) * @author wangyj13357 * */public class Student {public Integer id;public String name;public String msg;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}}

StudentDAO:

//使用HibernateTemplate代替JdbcTemplatepublic void creat(String msg){DefaultTransactionDefinition def = new DefaultTransactionDefinition();TransactionStatus status = transactionManager.getTransaction(def);try {HibernateTemplate hibernateTemplate = new HibernateTemplate(sessionFactory);Student student = new Student();student.setId(001);student.setName("wangyj");student.setMsg("好孩子");hibernateTemplate.saveOrUpdate(student);} catch (Exception e) {transactionManager.rollback(status);throw e;} finally{transactionManager.commit(status);}}


(三)使用IBatis
IBatis+Spring
5个步骤:
配置Spring的xml
IBatis的配置文件,sqlMapConfig.xml,放在WEB-INF下
配置文件,****.xml
bean类
DAO类


Spring的xml配置文件:

<!-- 配置DataSOurce --><bean id="dataSOurce" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName"><value>oracle.jdbc.driver.OracleDriver</value></property><property name="url"><value>jdbc:oracle:thin:@127.0.0.1:1521:orcl</value></property><property name="username"><value>hr</value></property><property name="password"><value>hr12345</value></property></bean><!-- 配置IBatis --><bean id="sqlMap" class="org.springframework.org.ibatis.SqlMapClientFactoryBean">       <property name="dataSource" ref="dataSource" />       <property name="configLocation" value="WEB-INF/sqlMapConfig.xml" />   </bean>   <!-- 配置transactionManager --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource"><ref bean="dataSource"/></property></bean><!-- 配置DAO --><bean id="com.gc.acion.StudentDAO"><property name="dataSource"><ref bean="dataSource"/></property><property name="transactionManager"><ref bean="transactionManager"/></property><property name="sqlMap"><ref bean="sqlMap"/></property></bean>

sqlMapConfig.xml:

<sqlMapConfig><sqlMap resource="com/gc/acion/Student.xml"/></sqlMapConfig>

Student.xml:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" ><!-- 表空间 --><sqlMap namespace="Student"><!-- 别名 --><typeAlias type="com.gc.acion.Student" alias="student" /><resultMap class="student" id="teacherResult"><result column="id" property="id" jdbcType="INT" /><result column="name" property="name" jdbcType="VARCHAR2" /><result column="msg" property="msg" jdbcType="VARCHAR2" /></resultMap><select id="teacher_getTeacherList" resultMap="teacherResult">select * from tbstudent</select></sqlMap>

Student类:

package com.gc.acion;/** * 表结构tbstudent (id,name, msg) * @author wangyj13357 * */public class Student {public Integer id;public String name;public String msg;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}}

DAO类


Spring对持久层的封装,并且jdbcTemplete与事务处理结合在一起。及Spring+Hibernate;Spring+IBatis





0 0
原创粉丝点击