Spring JDBC

Spirng  JDBC

一:采用Maven 引入 jar:

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jdbc</artifactId>
	<version>${spring.version}</version>
</dependency>
		

		<!-- MySQL database driver -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.15</version>
		</dependency>


引入 spring jdbc  和  mysql 驱动;

二:数据库中建表;采用 mysql数据库;

DROP TABLE IF EXISTS `stock`;
CREATE TABLE `stock` (
  `STOCK_ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `STOCK_CODE` VARCHAR(10) NOT NULL,
  `STOCK_NAME` VARCHAR(20) NOT NULL,
  PRIMARY KEY (`STOCK_ID`) USING BTREE,
  UNIQUE KEY `UNI_STOCK_NAME` (`STOCK_NAME`),
  UNIQUE KEY `UNI_STOCK_ID` (`STOCK_CODE`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

三:构建对应的类:

package com.myapp.core.jdbc;

public class Stock {
	private int stock_id;
	private String stock_name;
	private String stock_code;

	public int getStock_id() {
		return stock_id;
	}

	public void setStock_id(int stock_id) {
		this.stock_id = stock_id;
	}

	public String getStock_name() {
		return stock_name;
	}

	public void setStock_name(String stock_name) {
		this.stock_name = stock_name;
	}

	public String getStock_code() {
		return stock_code;
	}

	public void setStock_code(String stock_code) {
		this.stock_code = stock_code;
	}

}

四:构建对应的 dao

package com.myapp.core.jdbc;

public interface StockDao {
	 public  void  insert(Stock stock);
	 
	 public  Stock  findStockById(int id);
}



package com.myapp.core.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.sql.DataSource;

public class StockDaoImpl  implements StockDao{
 
	private  DataSource  dataSource;
	
	public DataSource getDataSource() {
		return dataSource;
	}

	public void setDataSource(DataSource dataSource) {
		this.dataSource = dataSource;
	}

	
	Connection  conn = null;
	PreparedStatement  prep = null;
	@Override
	public void insert(Stock stock) {
		// TODO Auto-generated method stub
		
	String  sql ="insert into  stock  values(?,?,?)";
	try{
		
		conn = dataSource.getConnection();
		
		prep = conn.prepareStatement(sql);
		prep.setInt(1, stock.getStock_id());
		prep.setString(2, stock.getStock_code());
		prep.setString(3, stock.getStock_name());
		
		boolean  flag = prep.execute();
		
		System.out.println(flag);
		
	}catch(Exception  e){
		e.printStackTrace();
	}finally{
		try{
			
			if(prep != null){
				prep.close();
			}
			if(conn != null){
				conn.close();
			}
		}catch(Exception  ex){
			ex.printStackTrace();
		}
	}
}
   
	@Override
	public Stock findStockById(int id) {
		// TODO Auto-generated method stub
		String  sql = "select * from  stock  where  stock_id = ?";
		ResultSet  rs = null;
		Stock  stock = null;
		try{
			
			conn = dataSource.getConnection();
			
			prep = conn.prepareStatement(sql);
			prep.setInt(1, id);
			rs = prep.executeQuery();
			
			stock = new  Stock();
			while(rs.next()){
				stock.setStock_id(id);
				stock.setStock_code(rs.getString(2));
				stock.setStock_name(rs.getString("stock_name"));
				
			}
			
		}catch(Exception  e){
			e.printStackTrace();
		}finally{
			try{
				
				if(prep != null){
					prep.close();
				}
				if(conn != null){
					conn.close();
				}
			}catch(Exception  ex){
				ex.printStackTrace();
			}
		}
	  
		return  stock;
		
		
	}

}

五:对应的spring xml 配置注入

  <!-- setting  the  datasource -->
  
  <bean id="stockDao" class="com.myapp.core.jdbc.StockDaoImpl">
       <property name="dataSource" ref="dataSource" />
  </bean>
  
  
  
  
  <bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/mybase" />
		<property name="username" value="root" />
		<property name="password" value="root" />
	</bean>

六:构建测试类:

package com.myapp.core.jdbc;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainTest {
   public static void main(String[] args) {
	   
	ApplicationContext  context = new   ClassPathXmlApplicationContext("resource/datasources.xml");  
	
	 StockDao    stockDao =  (StockDao)context.getBean("stockDao");
	
	/* Stock  stock  = new  Stock();
	        stock.setStock_id(61);
	        stock.setStock_code("code1");
	        stock.setStock_name("name1");*/
	      
	 
	 // stockDao.insert(stock);
	 
	  Stock  stock =stockDao.findStockById(51);
	  System.out.println("id:"+stock.getStock_id()+","+stock.getStock_code()+","+stock.getStock_name());
	 
}
}

七:maven 编译 引入jar:

E:\workspace\Spring3Example>mvn  compile
E:\workspace\Spring3Example>mvn  eclipse:eclipse
以上是通过mvn编译,再转换为eclipse项目。

八:运行结果

id:51,code,name
从数据库中取出了相应的数据。

九:扩展:使用  PropertyPlaceholderConfigurer  通过占位符(placeholder)进行配置 jdbc连接

1:定义database.properties文件

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybase
jdbc.username=root
jdbc.password=root


2:通过配置文件定位database.properties文件的位置:

  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
    <value>resource/database.properties</value>
    </property>
  </bean>

3:通过占位符配置数据源bean

 
  <bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>


4:测试结果:

id:51,code,name

一样可以查询出结果,测试成功,over
解决疑问:
为什么用
PropertyPlaceholderConfigurer类可以加载定位文件
PropertyPlaceholderConfigurer实现了接口BeanFactoryPostProcessor
所有实现了 BeanFactoryPostProcessor接口的实现类会在其他bean是创建之前完成加载和创建,如果一个对象实现了BeanFactoryPostProcessor接口,会在优先进行加载处理。
Application contexts can auto-detect BeanFactoryPostProcessor beans in their bean definitions and apply them before any other beans get created.
当spring 容器启动是时候,会自动检测那些bean实现了
BeanFactoryPostProcessor接口,进行优先处理。


关于 BeanFactoryPostProcessor的详细讲解 here
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值