spring访问oracle数据库表,Spring访问数据库(oracle)配置 - Go语言中文社区

spring访问oracle数据库表,Spring访问数据库(oracle)配置


陈科肇================1.spring 对数据库访问的支持当我们开发持久层的时候,我们面临着多种选择,比如使用JDBC、Hibernate、java持久化API或其它持久化框架。

陈科肇:

================

1.spring 对数据库访问的支持

当我们开发持久层的时候,我们面临着多种选择,比如使用JDBC、Hibernate、java持久化API或其它持久化框架。幸好的是spring能够支持所有这些持久化机制。

DAO(data access boject)数据访问对象,这个名字就很形象描述了DAO在应用程序中所扮演的角色。DAO提供了数据的读取、写入到数据库中的一种方式。它们应该以接口的方式发布功能,而应用程序的其它部分就可以通过接口来进行访问了。

5182f7f07dac3036e4016ceeda75e4f4.png

注:服务对象本身并不会处理数据访问,而是将数据访问委托给DAO。DAO接口确保其与服务对象的松耦合。

2.配置数据源

spring提供了在spring上下文中配置数据源Bean的多种方式,包括:

a.通过JDBC驱动程序定义的数据源;

b.通过JNDI查找的数据源;

c.连接池的数据源;

接下我们就专门来讲讲从使用连接池获取连接的数据源!(即c点)

上下文配置Bean的代码:

注:JDBC驱动数据源并没有池的概念,因此没有存在池属性的配置!

好了,到这一步,我们已经完成了通过数据源建立了与数据库的连接,接下来就是实际访问数据库了。

3.在Spring中集成Hibernate

Hibernate一些特性:

a.延迟加载(Lazy loading):例如一个Bean对象由其属性及另一个Bean对象组成,如果我们只关注的只是这个Bean对象的属性,那么我们可以借助于延迟加载,只抓取需要的数据;

b.预先抓取(Eager fetching):这与延迟加载是相对的,一个Bean所关联的其它Bean都会被查询出来,这就节省了多次查询的成本;

c.级联(Cascading):有时候删除一个Bean对象后,也希望其同时能数据库中删除掉与其关联的其它Bean。

Spring对Hibernate ORM框架的支持提供了与这些框架集成点以及一些附加的服务,,如下所示:

a.Spring声明式事务的集成支持;

b.透明的异常处理;

c.线程安全的、轻量级的模板类;

d.DAO支持类;

e.资源管理。

4.声明会话工厂(Session Factory)

使用Hibernate的主要接口是org.hibernate.Session。Session提供了基本的数据访问功能,如保存、更新、删除以及从数据库加载对象的功能。

能过借助于Hibernate的SessionFactory来获取Session对象,SessionFactory主要负责Hibernate Session的打开、关闭以及管理。

配置在xml上下文的Bean如下:

class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

com.blog.entity

org.hibernate.dialect.Oracle10gDialect

true

true

thread

5.创建自己的基础DAO类

Spring可以通过Spring的Hibernate模板来保证每个事务都使用同一个会话。既然Hibernate能够对其自己进行管理,那就不必要使用模板类了。接下我们直接将Hibernate Session装配到自己的DAO类中。

/**

* 基础dao

*

* @author ckz

*

* @param

*/

public abstract class BaseDAO {

private Class baseEntity;

protected BaseDao(Class baseEntity) {

this.baseEntity = baseEntity;

}

/**

* 注入sessionFactory

*/

@Autowired

private SessionFactory sessionFactory;

/**

* 获得session

*

* @return

*/

protected Session getCurrentSession() {

return sessionFactory.getCurrentSession();

}

/**

* 保存

*

* @param entity

* @throws Exception

*/

public void add(T entity) throws Exception {

getCurrentSession().save(entity);

}

/**

* 调用存储过程

*

* @param proName

* @return

*/

public CallableStatement citePro(final String proName){

Session session = getCurrentSession();

CallableStatement proc=session.doReturningWork(

new ReturningWork() {

@Override

public CallableStatement execute(Connection connection) throws SQLException{

CallableStatement resultSet = connection.prepareCall(proName);

return resultSet;

}

}

);

return proc;

}

/**

* 更新

*

* @param entity

* @throws Exception

*/

public void update(T entity) throws Exception {

getCurrentSession().update(entity);

}

/**

* 保存或更新

*

* @param entity

* @throws Exception

*/

public void saveOrUpdate(T entity) throws Exception {

getCurrentSession().saveOrUpdate(entity);

}

/**

* 删除

*

* @param entity

* @throws Exception

*/

public void delete(T entity) throws Exception {

getCurrentSession().delete(entity);

}

/**

* 根据id获取对象

*

* @param Id

* @return

*/

@SuppressWarnings("unchecked")

public T getById(final Serializable Id) {

return (T) getCurrentSession().get(this.baseEntity, Id);

}

}

注:

1.T表示的是泛型的参数类型,java泛型简述--;

2.T - 由此

Class 对象建模的类的类型。例如,String.class 的类型是 Class。如果将被建模的类未知,则使用

Class>;

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_39548541/article/details/116487516
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-17 23:00:06
  • 阅读 ( 1236 )
  • 分类:数据库

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢