spring 之数据库操作 (new)

DateSource

首先我们要获得者个数据源,spring提供了三个数据源方式

1.JNDI
    如果应用配置在高性能的应用服务器(如WebLogic或Websphere等)上,我们可能更希望使用应用服务器本身提供的数据源。应用服务器的数据源 使用JNDI开放调用者使用,Spring为此专门提供引用JNDI资源的JndiObjectFactoryBean类。下面是一个简单的配置: 

xml 代码

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">      
  <property name="jndiName" value="java:comp/env/jdbc/bbt"/>      
</bean>  

也可以通过jndiName指定引用的JNDI数据源名称   Spring 2.0为获取J2EE资源提供了一个jee命名空间,通过jee命名空间,可以有效地简化J2EE资源的引用。下面是使用jee命名空间引用JNDI数据源的配置: 
xml 代码
<jee:jndi-lookup id="dataSource" jndi-name=" java:comp/env/jdbc/bbt"/>      


2.连接池

开源的连接池有多种,DBCP  c3p0等等。

   C3P0是一个开放源代码的JDBC数据源实现项目,它在lib目录中与Hibernate一起发布,实现了JDBC3和JDBC2扩展规范说明的 Connection 和Statement 池。下面是使用C3P0配置一个 Oracle数据源: 

xml 代码

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"       
        destroy-method="close">      
    <property name="driverClass" value=" oracle.jdbc.driver.OracleDriver "/>      
    <property name="jdbcUrl" value=" jdbc:oracle:thin:@localhost:1521:ora9i "/>      
    <property name="user" value="admin"/>      
    <property name="password" value="1234"/>      
</bean>  

java代码

@bean
public BAsicDateSource dataSource(){
BasicDataSource ds =new BasicDataSource();
ds.setDriverClassName("org.h2.Driver");//数据源
ds.setUrl(...省略);
ds.setUsername(略);
ds.setPassword(略);
ds.setMaxActive(5);最大连接数,0是无限多个
ds.setInitialSize(5);连接池启动时创建的链接数量

}

3.基于JDBC

一般用于小型开发,不适用多线程。所以多用于测试。


使用profile选择数据源

在不同开发环境下需要选择不同是数据源

所以可以用Profile来配置选择

在java配置前加@profile()

@Profile("qq")
那么在qq被激活时,就会启动被注释的数据源

使用JDBC模板

1、JdbcTemplate (建议使用)

 

[java]  view plain  copy
 
 在CODE上查看代码片派生到我的代码片
  1. package jdbc;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.PreparedStatement;  
  5. import java.sql.SQLException;  
  6.   
  7. import javax.sql.DataSource;  
  8.   
  9. import org.springframework.context.ApplicationContext;  
  10. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  11. import org.springframework.jdbc.core.JdbcTemplate;  
  12.   
  13. public class Test {  
  14.     private DataSource dataSource;  
  15.   
  16.     public void setDataSource(DataSource dataSource) {  
  17.         this.dataSource = dataSource;  
  18.     }  
  19.   
  20.     public void insert(User u) {  
  21.         String sql = "insert into _user " + "values(null, ?, ?)";//普通的sql语句  
  22.         JdbcTemplate template = new JdbcTemplate(dataSource);  
  23.         template.update(sql, new Object[]{u.getName(), u.getPassword()});  
  24.     }  
  25.   
  26.     public static void main(String[] args) {  
  27.         ApplicationContext ctx = new ClassPathXmlApplicationContext(  
  28.                 "applicationContext.xml");  
  29.         Test t = (Test) ctx.getBean("test");  
  30.           
  31.         User u = new User();  
  32.         u.setName("dd");  
  33.         u.setPassword("dd");  
  34.         t.insert(u);  
  35.     }  
  36. }  
可以看得出简单了很多,不用Connection了。

 

2、JdbcDaoSupport

这个更简单,不用new JdbcTemplate了。

 

[java]  view plain  copy
 
 在CODE上查看代码片派生到我的代码片
  1. package jdbc;  
  2.   
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  5. import org.springframework.jdbc.core.support.JdbcDaoSupport;  
  6.   
  7. public class Test extends JdbcDaoSupport {  
  8.     //JdbcDaoSupport类已经有了public final void setDataSource(DataSource dataSource)了  
  9.     //不用重写也不能重写  
  10.       
  11.     public void insert(User u) {  
  12.         String sql = "insert into _user " + "values(null, ?, ?)";//普通的sql语句  
  13.         this.getJdbcTemplate().update(sql, new Object[]{u.getName(), u.getPassword()});  
  14.     }  
  15.   
  16.     public static void main(String[] args) {  
  17.         ApplicationContext ctx = new ClassPathXmlApplicationContext(  
  18.                 "applicationContext.xml");  
  19.         Test t = (Test) ctx.getBean("test");  
  20.           
  21.         User u = new User();  
  22.         u.setName("dd");  
  23.         u.setPassword("dd");  
  24.         t.insert(u);  
  25.     }  

笔记:两个方法跳过了链接等等操作 是简化的表现 也是大力推行的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值