Spring(十三)Spring整合JDBC

做开发不连接数据库怎么行!Spring整合JDBC过程中,数据源可以直接都在beans.xml里配置,也可以把数据单独放在一个properties文件里,方便维护。

首先放入各种jar包,连接MySQL当然要放数据驱动文件。

jar包什么的对照项目截图,切面aspect和cglib在这个工程没用到,jar包可以不添加进来

beans.xml,在头文件加上tx事务相关的引用,其他要注意的在文件的注释里基本都点到了

<?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:context="http://www.springframework.org/schema/context"
	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.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

	<!-- 加上classpath明确指定配置文件在类路径底下 -->
	<context:property-placeholder location="classpath:jdbc.properties" />
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<!-- 可以把这些配置信息放在同一个配置文件里面 -->
		<!--
		<property name="driverClassName" value="org.gjt.mm.mysql.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/spring_2015?useUnicode=true&characterEncoding=UTF-8"/>
		<property name="username" value="root" />
		<property name="password" value="686175"/>
		<property name="initialSize" value="1" />
		<property name="maxActive" value="500"/>
		<property name="maxIdle" value="2"/>
		<property name="minIdle" value="1"/>
		-->
		<property name="driverClassName" value="${driverClassName}" />
		<property name="url" value="${url}" />
		<property name="username" value="${username}" />
		<property name="password" value="${password}" />
		<property name="initialSize" value="${initialSize}" />
		<property name="maxActive" value="${maxActive}" />
		<property name="maxIdle" value="${maxIdle}" />
		<property name="minIdle" value="${minIdle}" />
	</bean>

	<bean id="txManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>

	<!-- 采用@Transaction注解方式使用事务 -->

	<tx:annotation-driven transaction-manager="txManager" />

	<!-- 将PersonServiceImpl交给Spring管理 -->
	<bean id="personService" class="test.spring.service.impl.PersonServiceImpl">
		<!-- 通过xml的方式对数据源进行注入 -->
		<property name="dataSource" ref="dataSource"></property>
	</bean>
</beans>

jdbc.properties

driverClassName=org.gjt.mm.mysql.Driver
url=jdbc\:mysql\://localhost\:3306/spring_2015?useUnicode\=true&characterEncoding\=UTF-8
username=root
password=686175
initialSize=1
maxActive=500
maxIdle=2
minIdle=1

测试用到的数据库spring_2015,表person

实体类

package test.spring.entity;

public class Person {

	private Integer id;
	private String name;

	public Person() {

	}

	public Person(String name) {
		super();
		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() {
		// TODO Auto-generated method stub
		return "[Person:id = " + id + ",name = " + name + "]";
	}

}

业务实现类,注意在类前面加上@Transactional注解,这样能保证一个业务操作在一个单独的事务里面执行

package test.spring.service.impl;

import java.util.List;

import javax.sql.DataSource;

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

import test.spring.entity.Person;
import test.spring.service.PersonService;

@Transactional
public class PersonServiceImpl implements PersonService {

	// private DataSource dataSource;
	private JdbcTemplate jTemplate;

	public void setDataSource(DataSource dataSource) {
		// this.dataSource = dataSource;
		this.jTemplate = new JdbcTemplate(dataSource);
	}

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

	@Override
	public void update(Person person) {
		// TODO Auto-generated method stub
		jTemplate.update("update person set name=? where id=?", new Object[] {
				person.getName(), person.getId() }, new int[] {
				java.sql.Types.VARCHAR, java.sql.Types.INTEGER });
	}

	@Override
	public Person getPerson(Integer personId) {
		// TODO Auto-generated method stub
		Person person = (Person) jTemplate.queryForObject(
				"select * from person where id=?", new Object[] { personId },
				new int[] { java.sql.Types.INTEGER }, new PersonRowMapper());
		return person;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Person> getPersons() {
		// TODO Auto-generated method stub
		List<Person> persons = jTemplate.query("select * from person",
				new PersonRowMapper());
		return persons;
	}

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

}

各个方法的测试

package test.spring.junit;

import static org.junit.Assert.*;

import java.util.List;

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

import test.spring.entity.Person;
import test.spring.service.PersonService;

public class SpringAndJDBCTest {

	private static PersonService pService;

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		AbstractApplicationContext aContext = new ClassPathXmlApplicationContext(
				"beans.xml");
		pService = (PersonService) aContext.getBean("personService");
	}

	@Test
	public void testSave() {
		pService.save(new Person("LinDL"));
	}

	@Test
	public void testGetPerson() {
		Person person = pService.getPerson(1);
		System.out.println(person.getName());
	}

	@Test
	public void testGetPersons() {
		List<Person> list = pService.getPersons();
		for (Person person : list) {
			System.out.println(person);
		}
	}

	@Test
	public void testUpdate() {
		Person person = pService.getPerson(1);
		person.setName("张大春");
		pService.update(person);
	}

	@Test
	public void testDelete() {
		pService.delete(1);
	}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载,请注明出处:http://blog.csdn.net/lindonglian

时间: 2024-08-08 09:23:10

Spring(十三)Spring整合JDBC的相关文章

Spring学习5-Spring整合JDBC及其事务处理(注解方式)

一.整合的步骤   1.步骤一:首先要获得DataSource连接池(推荐使用B方式): 要对数据库执行任何的JDBC操作,需要有一个Connection.在Spring中,Connection对象是通过DataSource获得的. 有几种方法可以得到DataSource, 其中一种方法是使用Spring提供的轻量级 org.springframework.jdbc.datasource.DriverManagerDataSource,第二种方法是使用 org.apache.commons.db

Spring整合jdbc

首先web.xml文件跟往常一样,加载spring容器和加载org.springframework.web.context.ContextLoaderListener读取applicationContext.xml文件初进行始化. 使用spring整合jdbc工具步骤: 1.使用连接池com.mchange.v2.c3p0.ComboPooledDataSource等工具创建数据源. 2.把数据源交给LazyConnectionDataSourceProxy进行管理 3.把LazyConnect

JAVAEE——spring03:spring整合JDBC和aop事务

一.spring整合JDBC 1.spring提供了很多模板整合Dao技术 2.spring中提供了一个可以操作数据库的对象.对象封装了jdbc技术. JDBCTemplate => JDBC模板对象 与DBUtils中的QueryRunner非常相似. //0 准备连接池 ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setDriverClass("com.mysql.jdbc.Dri

spring 整合JDBC

使用Spring提供的三个JDBC模板类(JdbcTemplate.NamedParameterJdbcTemplate.SimpleJdbcTemplate)操作数据库 一.JdbcTemplate是Spring中最主要的JDBC模板, 利用JDBC和简单的索引參数查询对数据库进行简单訪问 二.NamedParameterJdbcTemplate可以在查询的时候把值绑定到SQL里的命名參数,而不是索引參数 NamedParameterJdbcTemplate内部包括了一个JdbcTemplat

Spring整合JDBC模板方法设计模式之基于继承的实现

Spring整合JDBC模板方法设计模式之基于继承的实现: 模板设计模式简单描述: 把相同的部分提取出来,当我们运行的时候自动往里面设置值,在JdbcTemplate 的源代码中得execute(). 他把公共的部分拎出来写到一个特别的函数中,当我们使用的时候把会发生变化的内容在特定的部分调用,在不同的类里面处理相同的操作,这种方式就做模板设计模式. 例如,JdbcTemplate类中的方法: // ------------------------------------------------

Spring整合JDBC模板方法设计模式之基于组合的实现

Spring整合JDBC模板方法设计模式之基于组合的实现 模板设计模式指的是将相应的模板方法提取出来在一个专门的一个位置定义,然后把相同调用过程的操作通过模板实现. 对于模板设计模式,一般有2中方式 1.基于继承的方式实现 2.基于组合的方式实现 前面实现了:1.基于继承的方式实现 ,Spring整合JDBC模板方法设计模式之基于继承的实现 接下来实现:2.基于组合的方式实现 Spring整合JDBC模板方法设计模式之基于组合的方法在我们有大量类的情况下使用特别方便. 此实现模拟了Spring中

Spring整合JDBC实现简单的增删改

Spring整合JDBC实现简单的增删改: 1.导入Spring的包和数据库的驱动包: 2.选择一个数据源(dbcp和C3P0) 3.导入数据源的包(这里我们使用dbcp) <span style="font-family:FangSong_GB2312;font-size:14px;">commons-pool-1.5.6.jar .commons-dbcp-1.4.jar(jdk6+)</span> 4.在beans.xml中创建dataSource数据源

Spring笔记(五): spring 整合jdbc、hibernate、jpa

一.简介 (一)需要的jar包 1.需要的jar包:spring.hibernate.mysql.xml.apache-commons等等的jar包.        2.以上jar包,如spring.xml和commos都是冗余的. (二)分析 1.涉及到的实体.service.dao接口.jdbc配置文件以及service实现类都可以通用,只需要实现不同的dao实现类.配置.测试类. 2.通用的源码如下: 1)实体: <span style="font-size:18px;"&

Spring整合JDBC以及AOP管理事务

本节内容: Spring整合JDBC Spring中的AOP管理事务 一.Spring整合JDBC Spring框架永远是一个容器,Spring整合JDBC其实就是Spring提供了一个对象,这个对象封装了JDBC技术,它可以操作数据库,这个对象可以放入Spring容器,交给Spring容器来管理.所以我们主要是要学习这个对象:JDBCTemplate.这个对象和DBUtils中的QueryRunner非常相似. 1. 导包 4+2+2(测试需要的包spring-test,新版本测试时还需要sp