`
luxhua
  • 浏览: 86193 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring与JDBC的集成

阅读更多
1.beans.xml文件

<?xml version="1.0" encoding="UTF-8"?>


<beans xmlns="http://www.springframework.org/schema/beans"
	     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	     xmlns:aop="http://www.springframework.org/schema/aop"
	     xmlns:tx="http://www.springframework.org/schema/tx"
	     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">


	<!-- 配置数据源 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
		<property name="url" value="jdbc:mysql://127.0.0.1:3306/person"></property>
		<property name="username" value="root"></property>
		<property name="password" value="root"></property>
		
		<!-- 连接池启动时的初始值 -->
		<property name="initialSize" value="1"></property>
		<!-- 连接池的最大值 --> 
		<property name="maxActive" value="500"></property>
		<!-- 最大空闲值,当经过高峰期后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
		<property name="maxIdle" value="2"></property>
		<!-- 最小空闲值,当空闲的连接数少于阈值时,连接池就会预申请一些连接,以免洪峰来时来不及申请 -->
		<property name="minIdle" value="1"></property>
	</bean>
	
	<!-- 配置注解式事务管理 -->
	<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	<tx:annotation-driven transaction-manager="txManager"/>
	
	
	<bean id="personService" class="service.impl.PersonServiceImpl">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
</beans> 


2.一个简单实体对象
package entity;

public class Person {
	private Integer id;
	private String name;
	public Person(String name) {
		super();
		this.name = name;
	}
	public Person() {
		super();
		// TODO Auto-generated constructor stub
	}
	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;
	}
}


3,DAO接口
package service;

import java.util.List;

import entity.Person;

public interface PersonService {
	
	void save(Person person);
	Person getPerson(Integer personId);
	void update(Person person);
	List<Person> getPersons();
	void delete(Integer personId);
}



4,DAO实现类
package service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.annotation.Transactional;

import entity.Person;
import service.PersonService;

@Transactional
public class PersonServiceImpl implements PersonService {
	
         private JdbcTemplate jdbcTemplate;
	
	
	public void setDataSource(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
	}

	@Override
	public Person getPerson(Integer personId) {
		String sql = "select * from person where id=?";
		Object[] args = {personId};
		
		return (Person)this.jdbcTemplate.queryForObject(sql, args, new PersonRowMapper());
		
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Person> getPersons() {
		List<Person> persons = new ArrayList<Person>();
		String sql = "select * from person";
		persons = jdbcTemplate.query(sql, new PersonRowMapper());
		return persons;
		
	}

	@Override
	public void save(Person person) {
		// TODO Auto-generated method stub
		String sql = "insert into person(name) values(?)";
		Object[] args = {person.getName()};
		int[] argTypes = {java.sql.Types.VARCHAR};
		this.jdbcTemplate.update(sql, args, argTypes);
	}

	@Override
	public void update(Person person) {
		String sql = "update person set name=? where id=?";
		Object[] args = {person.getName()};
		int[] argTypes = {java.sql.Types.VARCHAR,java.sql.Types.INTEGER};
		this.jdbcTemplate.update(sql, args, argTypes);
		
	}

	@Override
	public void delete(Integer personId) {
		// TODO Auto-generated method stub
		String sql = "delete from person where id=?";
		Object[] args = {personId};
		int[] argTypes = {java.sql.Types.INTEGER};
		this.jdbcTemplate.update(sql, args, argTypes);
	}

}



5,RowMapper类
 package service.impl;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

import entity.Person;

public class PersonRowMapper implements RowMapper {

	@Override
	public Object mapRow(ResultSet rs, int index) throws SQLException {
		// TODO Auto-generated method stub
		Person person = new Person(rs.getString("name"));
		person.setId(rs.getInt("id"));
		return person;
	}

}



6,测试
package junit.test;


import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import entity.Person;

import service.PersonService;

public class PersonServiceTest {
	private static PersonService personService;
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		try {
			ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
			personService = (PersonService) ctx.getBean("personService");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	@Test
	public void save() {
		personService.save(new Person("李坏"));
	}

}



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics