您的位置:首页 > 编程语言 > Java开发

Spring和数据库连接 --- 征服数据库jdbc

2012-04-19 21:15 330 查看
Spring和数据库连接   --- 征服数据库jdbc

1.首先导jar包
在和mysql数据库连接之前首先要导入几个包,有
spring-framework-2.5.5\lib\jakarta-commons \mons-dbcp.jar,
spring-framework-2.5.5\lib\jakarta-commons \ommons-pool.jar
mysql-connector-java-5.1.16-bin.jar  mysql驱动
2.在src下创建一个bean.xml,在bean.xml中配置和mysql连接的bean,用到的是BasicDataSource
用spring连接数据库,在编写xml代码的时候要用到切面,所以要引入: http://www.springframework.org/schema/aop 配置一个dataSource,代码为
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>${driverClassName}</value>
</property>
<property name="url">
<value>${url}</value>
</property>
<property name="username">
<value>${username}</value>
</property>
<property name="password">
<value>${password}</value>
</property>
</bean>
在外部编写properties文件,来连接数据库,jdbc.properties代码清单:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/spring
username=root
password=1234

在bean.xml中读取外部的文件,因为要用到上下文对象,所以要引入: http://www.springframework.org/schema/context 
<context:property-placeholder location="jdbc.properties" />

这样就连接到了数据库,因为要和数据库连接,从数据库读取数据,为了测试,我们可以建一个数据库,数据库名为spring,即为url中的spring,建一个表为admin,属
性为id和name

在domain层中实体类的映射为  Admin.java:
package cn.csdn.hr.domain;

import java.io.Serializable;

public class Admin implements Serializable {

private static final long serialVersionUID = 1L;
private Integer id;
private String name;

public Admin() {
super();
// TODO Auto-generated constructor stub
}

public Admin(Integer id, String name) {
super();
this.id = id;
this.name = name;
}

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;
}

@Override
public String toString() {
return "Admin [id=" + id + ", name=" + name + "]";
}
}

在dao层中我们来编写方法来测试和数据库连接是否成功,创建的一个接口为:AdminDao.java,一个实现类为:AdminDaoImpl.java,
首先来编写接口 :
package cn.csdn.hr.dao;

import java.util.List;

import cn.csdn.hr.domain.Admin;

public interface AdminDao {

//查询所有
public List<Admin> findAll();

//更新
public void update();

//添加
public void insert();

//删除
public void delete();

//查询总记录数
public void getCount();

// 批量更新
public void updateBath(final List<Admin> admins);
}

实现的类为:
package cn.csdn.hr.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

import cn.csdn.hr.domain.Admin;

@SuppressWarnings("unchecked")
public class AdminDaoImpl extends JdbcDaoSupport implements AdminDao {

// JdbcDaoSupport中封装了JdbcTemplate jdbcTemplate属性的类,可以直接使用

@Override
public List<Admin> findAll() {
// TODO Auto-generated method stub
// 使用模板类对象
List<Admin> admins = this.getJdbcTemplate().query(
"select id,name from admin", new RowMapper() {

@Override
public Object mapRow(ResultSet rs, int rowNum)
throws SQLException {
// TODO Auto-generated method stub

Admin admin = new Admin();
admin.setId(rs.getInt("id"));
admin.setName(rs.getString("name"));
return admin;
}
});
return admins;
}

// 更新
@Override
public void update() {
// TODO Auto-generated method stub
int i = this.getJdbcTemplate().update(
"update admin set name='老王' where id=1");

this.getJdbcTemplate().update("update admin set name=? where id=?",
new Object[] { "熊熊", 2 });

}

@Override
public void insert() {
// TODO Auto-generated method stub
int i = this.getJdbcTemplate().update(
"insert into admin(name) values('err')");
System.out.println(i);
}

@Override
public void delete() {
// TODO Auto-generated method stub
this.getJdbcTemplate().update("delete from admin where id=3");
}

@Override
public void getCount() {
// TODO Auto-generated method stub
int i = this.getJdbcTemplate()
.queryForInt("select count(*) from admin");
System.out.println("总记录数:" + i);
}

// 批量更新
@Override
public void updateBath(final List<Admin> admins) {
// TODO Auto-generated method stub
this.getJdbcTemplate().batchUpdate(
"update admin set name=? where id=?",
new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i)
throws SQLException {
// TODO Auto-generated method stub
ps.setString(1, admins.get(i).getName() + "aaaa");
ps.setInt(2, admins.get(i).getId());
}
@Override
public int getBatchSize() {
// TODO Auto-generated method stub
return admins.size();
}
});
}
}

当然方法实现完了,可是在读取bean.xml中的文件的时候,还是需要配置的,因为要用到JdbcTemplate,所以要在bean.xml中创建一个bean来在实体类中实现,并且和数据库连接,
<!-- jdbcTemplate模板类 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>

<!-- 注入到实现类中 -->
<bean id="adminDaoImpl" class="cn.csdn.hr.dao.AdminDaoImpl">
<!-- 注入模板类 -->
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>

测试类:
public void test() {
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
AdminDao adminDao = (AdminDao)ac.getBean("adminDaoImpl");

List<Admin> admins = adminDao.findAll();

for(Admin entity:admins){
System.out.println(entity.toString());
}
}

这里只测试了查询所有,其他的方法我都测试过了,没有问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息