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
- Spring访问数据的方式
- 13Spring的数据访问方式
- spring mvc 的jpa JpaRepository数据层 访问方式汇总
- spring mvc 的jpa JpaRepository数据层 访问方式汇总
- spring mvc 的jpa JpaRepository数据层 访问方式汇总
- spring mvc 的jpa JpaRepository数据层 访问方式汇总
- spring mvc 的jpa JpaRepository数据层 访问方式汇总
- spring mvc 的jpa JpaRepository数据层 访问方式汇总
- spring mvc 的jpa JpaRepository数据层 访问方式汇总
- Spring Data JPA 数据访问方式
- Iterator的数据访问方式
- Spring Boot的数据访问
- spring mvc 访问静态资源的方式
- java和spring访问资源的方式
- spring MVC jpa jpaRepository 数据层访问 方式汇总
- WP7访问云端数据的方式
- Oracle对数据的访问方式
- 数据分布对访问方式的影响
- SpringBoot 学习记录(十): scheduler
- 第七届 山东省ACM Proxy(SPFA+反向建边)
- strcat标准库函数
- 性能优化十六之Wake_Lock唤醒锁以及JobScheduler使用
- POJ2395Out of Hay(最小生成树Kruskal模板)
- Spring访问数据的方式
- PL/SQL 循环语句
- Reconstruct Itinerary
- 键盘操作
- 图像处理----数学形态学
- 并发rpc调用轻量框架Yar
- linux下getchar()举例
- Java 数据结构
- U-BOOT-2016.07移植 (第一篇) 初步分析