spring+jdbc
1、jdbc编程的特点:
模板编程
固定代码+动态的参数
spring产生dataSource
JdbcTemplate{//模板编程
private DataSource dataSource;
public void setDataSource(DataSource dataSource){
this.dataSource = dataSource;
}
public void update(String sql){
//产生链接
//产生Statement
//执行executeUpdate方法
}
}
使用spring与JDBC连接的方式
导包
1、让自己写的一个dao类继承JdbcDaoSupport
2、让自己写的一个dao类继承JdbcTemplate
3、让自己写的一个dao类里有一个属性为JdbcTemplate
总结:
1、引入dataSource的方式:
1、在dataSource的设置中直接写值
2、引入properties文件
2、在dao的写法中有很多种,最终只需要把dataSource注入到jdbcTemplate中
拿update当例子
PersonDao.java
1 package cn.itcast.spring.jdbc; 2 3 import org.springframework.jdbc.core.support.JdbcDaoSupport; 4 5 //JdbcDaoSupport的有setDataSource方法可以注入 DataSource 6 public class PersonDao extends JdbcDaoSupport{ 7 public void update() 8 { 9 System.out.println("update operation 让自己写的一个dao类继承JdbcDaoSupport" ); 10 this.getJdbcTemplate().update("update person set pname='aa' where pid=1"); 11 } 12 }
PersonDao2.java
1 package cn.itcast.spring.jdbc; 2 3 import javax.sql.DataSource; 4 5 import org.springframework.jdbc.core.JdbcTemplate; 6 import org.springframework.jdbc.core.support.JdbcDaoSupport; 7 8 9 public class PersonDao2 extends JdbcTemplate{ 10 //JdbcTemplate的父类有setDataSource方法可以注入 DataSource 11 //自身有构造方法 注入DataSource 12 //配置文件两种方法都可以 13 public PersonDao2(DataSource ds) { 14 super(ds); 15 } 16 public void update() 17 { 18 System.out.println("update operation 让自己写的一个dao类继承JdbcTemplate" ); 19 this.update("update person set pname='aa' where pid=2"); 20 } 21 }
PersonDao3.java
1 package cn.itcast.spring.jdbc; 2 3 import javax.sql.DataSource; 4 5 import org.springframework.jdbc.core.JdbcTemplate; 6 import org.springframework.jdbc.core.support.JdbcDaoSupport; 7 8 //3、让自己写的一个dao类里有一个属性为JdbcTemplate 9 //先让数据源 注入到JdbcTemplate然后 组合 用 10 //可以通过 构造方法 或者 注册依赖 11 public class PersonDao3 { 12 //属性名 在配置文件中不能写错 13 private JdbcTemplate jdbcTemplate; 14 15 public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { 16 this.jdbcTemplate = jdbcTemplate; 17 } 18 19 // public JdbcTemplate getJdbcTemplate() { 20 // return jdbcTemplate; 21 // } 22 23 public void update() 24 { 25 System.out.println("update operation 让自己写的一个dao类里有一个属性为JdbcTemplate" ); 26 this.jdbcTemplate.update("update person set pname='aa' where pid=3"); 27 } 28 }
applicationContext-spring_jdbc.xml
重点配置
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 6 <bean 7 class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 8 <property name="locations"> 9 <value>classpath:jdbc.properties</value> 10 </property> 11 </bean> 12 13 14 <bean id="dataSource" destroy-method="close" 15 class="org.apache.commons.dbcp.BasicDataSource"> 16 <property name="driverClassName" value="${jdbc.driverClassName}" /> 17 <property name="url" value="${jdbc.url}" /> 18 <property name="username" value="${jdbc.username}" /> 19 <property name="password" value="${jdbc.password}" /> 20 </bean> 21 <!-- 第一种方式 --> 22 <bean id="personDao" class="cn.itcast.spring.jdbc.PersonDao"> 23 <property name="dataSource"> 24 <ref bean="dataSource"/> 25 </property> 26 </bean> 27 28 <!-- 第二种方式 --> 29 <bean id="personDao2" class="cn.itcast.spring.jdbc.PersonDao2"> 30 <constructor-arg index="0" ref="dataSource"></constructor-arg> 31 </bean> 32 <!-- 第三种方式 --> 33 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 34 <property name="dataSource"> 35 <ref bean="dataSource"/> 36 </property> 37 </bean> 38 39 <bean id="personDao3" class="cn.itcast.spring.jdbc.PersonDao3"> 40 <property name="jdbcTemplate"> 41 <ref bean="jdbcTemplate"/> 42 </property> 43 </bean> 44 </beans>
jdbc.properties 描述数据库配置信息
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/hibernate_basic
jdbc.username=root
jdbc.password=friends
测试
1 package cn.itcast.spring.jdbc; 2 3 import org.junit.Test; 4 import org.springframework.context.ApplicationContext; 5 import org.springframework.context.support.ClassPathXmlApplicationContext; 6 7 public class test { 8 //1、让自己写的一个dao类继承JdbcDaoSupport 9 @Test 10 public void testPersonDao1() 11 { 12 ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext-spring_jdbc.xml"); 13 PersonDao dao=(PersonDao) context.getBean("personDao"); 14 dao.update(); 15 } 16 //2、让自己写的一个dao类继承JdbcTemplate 17 18 //要向子类中注入构造函数 否则 报错 找不到指定的构造函数 19 @Test 20 public void testPersonDao2() 21 { 22 ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext-spring_jdbc.xml"); 23 24 PersonDao2 dao=(PersonDao2) context.getBean("personDao2"); 25 dao.update(); 26 } 27 //3、让自己写的一个dao类里有一个属性为JdbcTemplate 28 @Test 29 public void testPersonDao3() 30 { 31 ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext-spring_jdbc.xml"); 32 33 PersonDao3 dao=(PersonDao3) context.getBean("personDao3"); 34 dao.update(); 35 } 36 }