spring mysql注入_Spring DataSource注入详解

因应不同的系统,应用程序可能使用不同的数据源,例如纯綷的使用JDBC、透过连接池、或是透过JNDI等等,数据源的更动是底层的行为,这些行为不应影响到上层的业务逻辑,为此,您可以在需要取得连接来源的Bean物件上保留一个Datasource注入的操作界面,Spring提供org.springframework.jdbc.datasource.DriverManagerDataSource来取得它的实例,DriverManagerDataSource实作了javax.sql.DataSource,您可以在Bean定义档中这么撰写:

...

class="org.springframework.jdbc.datasource.DriverManagerDataSource">

com.mysql.jdbc.Driver

jdbc:mysql://localhost:3306/demo

caterpillar

123456

...

其中“driverClassName”、“url”、“username”、“password”四个属性分别用来设定JDBC驱动程序类别、数据库URL协定、使用者名称、密码。

在这边实际使用一个程序来作为DataSource注入的示范,并也示范一下之前有关于DAO介绍的实作,假设您定义了一个DAO的操作界面如下:IUserDAO.java

package onlyfun.caterpillar;

public interface IUserDAO {

public void insert(User user);

public User find(Integer id);

}

这边关于DAO的界面定义只有insert()与find()两个方法。在这个界面中所使用到的User类别则如下定义:User.java

package onlyfun.caterpillar;

public class User {

private Integer id;

private String name;

private Integer age;

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 Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

}

接着您可以定义一个UserDAO类别,它实作了IUserDAO界面,是实际进行数据库存取服务的物件,如下所示:UserDAO.java

package onlyfun.caterpillar;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import javax.sql.DataSource;

public class UserDAO implements IUserDAO {

private DataSource dataSource;

public void setDataSource(DataSource dataSource) {

this.dataSource = dataSource;

}

public void insert(User user) {

String name = user.getName();

int age = user.getAge().intValue();

Connection conn = null;

Statement stmt = null;

try {

conn = dataSource.getConnection();

stmt = conn.createStatement();

stmt.execute("INSERT INTO user (name,age) "

+ "VALUES('" + name + "'," + age + ")");

} catch (SQLException e) {

e.printStackTrace();

}

finally {

if(stmt != null) {

try {

stmt.close();

}

catch(SQLException e) {

e.printStackTrace();

}

}

if(conn != null) {

try {

conn.close();

}

catch(SQLException e) {

e.printStackTrace();

}

}

}

}

public User find(Integer id) {

Connection conn = null;

Statement stmt = null;

try {

conn = dataSource.getConnection();

stmt = conn.createStatement();

ResultSet result = stmt.executeQuery(

"SELECT * FROM user WHERE id=" + id.intValue());

if(result.next()) {

Integer i = new Integer(result.getInt(1));

String name = result.getString(2);

Integer age = new Integer(result.getInt(3));

User user = new User();

user.setId(i);

user.setName(name);

user.setAge(age);

return user;

}

} catch (SQLException e) {

e.printStackTrace();

}

finally {

if(stmt != null) {

try {

stmt.close();

}

catch(SQLException e) {

e.printStackTrace();

}

}

if(conn != null) {

try {

conn.close();

}

catch(SQLException e) {

e.printStackTrace();

}

}

}

return null;

}

}

UserDAO类别上宣告了一个setDataSource()方法,可以让您注入DataSource的实例,您可以在Bean定义档中进行依赖注入的定义,如下所示:beans-config.xml

/p>

"http://www.springframework.org/dtd/spring-beans.dtd">

class="org.springframework.jdbc.datasource.DriverManagerDataSource">

com.mysql.jdbc.Driver

jdbc:mysql://localhost:3306/demo

caterpillar

123456

class="onlyfun.caterpillar.UserDAO">

可以撰写一个简单的测试程序来操作UserDAO的实例,看看是否能进行数据的储存与查询:SpringDAODemo.java

package onlyfun.caterpillar;

import org.springframework.context.ApplicationContext;

import org.springframework.context.

support.FileSystemXmlApplicationContext;

public class SpringDAODemo {

public static void main(String[] args) {

ApplicationContext context =

new FileSystemXmlApplicationContext(

"beans-config.xml");

User user = new User();

user.setName("caterpillar");

user.setAge(new Integer(30));

IUserDAO userDAO =

(IUserDAO) context.getBean("userDAO");

userDAO.insert(user);

user = userDAO.find(new Integer(1));

System.out.println("name: " + user.getName());

}

}

在进行程序的测试之前,当然的您要先开启数据库服务,并将beans-config.xml中相关的驱动程序类别、数据库URL、使用者名称与密码等修改为您的设定,在这边我所使用的是MySQL数据库,而我所建立的user表格是使用以下的SQL来建立的:

CREATE TABLE user (

id INT(11) NOT NULL auto_increment PRIMARY KEY,

name VARCHAR(100) NOT NULL default '',

age INT

);

程序的执行结果会先在数据库的user表格中存入一笔数据,接着根据id值查询出先前所存入的数据,最后结果会显示“name: caterpillar”的文字。

您需要spring-core.jar、spring-beans.jar、spring-context.jar、spring-dao.jar与spring-jdbc.jar这几个档案,如果您使用的是spring.jar,当中已经包括了相关API,另外也需要相依的commons- logging.jar,当然,为了使用JDBC,您必须要有JDBC驱动程序的jar档。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值