Spring学习笔记之Spring与JDBC整合

1 篇文章 0 订阅

整合步骤:

1.配置数据源


 	<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/learning?useUnicode=true&characterEncoding=UTF-8"></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>
 	 	 <!-- 连接数小于minIdle后开始申请连接 -->
 	 	 <property name="minIdle" value="1"></property>
 	</bean>

2.配置事务

配置事务有两种方式,(1)注解方式(2)xml方式, 这里先使用注解方式配置

命名空间:

<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:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"   
    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
 ">

注解方式配置

 <!-- 采用@Transaction注解方式使用事务 -->
 	<tx:annotation-driven transaction-manager="txManager"/>

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

3.数据库sql

create table userinfo(
id int(5) not null auto_increment,
name varchar(50) not null,
primary key(id)
);

4.pojo类

package com.skymr.spring.jdbc.pojo;

public class UserInfo {
//	org.apache.commons.dbcp2.BasicDataSource t = new org.apache.commons.dbcp2.BasicDataSource();
//	org.springframework.jdbc.datasource.DataSourceTransactionManager
	
	private int id;
	
	private String name;

	public int getId() {
//		t.setm
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	
	public String toString(){
		return "(" + id +"," + name + ")";
	}
	
}

5.创建业务层接口

package com.skymr.spring.jdbc.service;

import java.util.List;

import com.skymr.spring.jdbc.pojo.UserInfo;

public interface UserInfoService {

	public void save(UserInfo userInfo);
	
	public void update(UserInfo userInfo);
	
	public UserInfo getUserInfo(Integer userId);
	
	public List<UserInfo> getAllUserInfos();
	
	public void delete(Integer userId);
}

package com.skymr.spring.jdbc.service.impl;

import java.util.List;

import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.annotation.Transactional;

import com.skymr.spring.jdbc.pojo.UserInfo;
import com.skymr.spring.jdbc.service.UserInfoService;
@Transactional//告诉Spring UserInfoServiceBean受Spring事务管理
public class UserInfoServiceBean implements UserInfoService{

	//JDBC模版
	private JdbcTemplate jdbcTemp;
	
	public void setDataSource(BasicDataSource dataSource){
		jdbcTemp = new JdbcTemplate(dataSource);
	}
	
	public void delete(Integer userId) {
		jdbcTemp.update("delete from userinfo where id=?", new Object[]{userId}, new int[]{java.sql.Types.INTEGER});
	}

	public List<UserInfo> getAllUserInfos() {
		return (List<UserInfo>)jdbcTemp.query("select id,name from userinfo", new UserInfoRowMapper());
	}

	public UserInfo getUserInfo(Integer userId) {
		return (UserInfo)jdbcTemp.queryForObject("select id,name from userinfo where id=?", new UserInfoRowMapper(),
				new Object[]{userId}, new int[]{java.sql.Types.INTEGER});
	}

	public void save(UserInfo userInfo) {
		jdbcTemp.update("insert into userinfo (name) values (?)", new Object[]{userInfo.getName()}, 
				new int[]{java.sql.Types.VARCHAR}
		);
	}

	public void update(UserInfo userInfo) {
		jdbcTemp.update("update usreinfo set name=? where id=?", 
				new Object[]{userInfo.getName(), userInfo.getId()},
				new int[]{java.sql.Types.VARCHAR, java.sql.Types.INTEGER} 
				);
	}

}

ResultSet转UserInfo工具类:

package com.skymr.spring.jdbc.service.impl;

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

import org.springframework.jdbc.core.RowMapper;

import com.skymr.spring.jdbc.pojo.UserInfo;

public class UserInfoRowMapper implements RowMapper{
	/**
	 * resultSet 转pojo
	 */
	public Object mapRow(ResultSet resultSet, int rowNum) throws SQLException {
		UserInfo userInfo = new UserInfo();
		userInfo.setId(resultSet.getInt("id"));
		userInfo.setName(resultSet.getString("name"));
		return userInfo;
	}

}

配置业务实例:

 	<bean id="userInfoService" class="com.skymr.spring.jdbc.service.impl.UserInfoServiceBean">
 		<property name="dataSource" ref="dataSource"></property>
 	</bean>

JUnit测试:

package com.skymr.spring.jdbc.test;

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

import com.skymr.spring.jdbc.pojo.UserInfo;
import com.skymr.spring.jdbc.service.UserInfoService;

public class JDBCTest {

	@Test
	public void testJdbc(){
		ApplicationContext context = new ClassPathXmlApplicationContext("jdbcsource.xml");
		UserInfoService userInfoService = (UserInfoService)context.getBean("userInfoService");
		UserInfo userInfo = new UserInfo();
		userInfo.setName("windskymr");
		userInfoService.save(userInfo);
		
		userInfo.setName("naruto");
		userInfoService.save(userInfo);
		
		userInfo.setName("fengsheng");
		userInfoService.save(userInfo);
		
		System.out.println(userInfoService.getAllUserInfos());
		((ClassPathXmlApplicationContext)context).close();
	}
//	java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid(I)Z

}

在测试时可能出现异常:

java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid(I)Z
那是因为commons-dbcp,commons-pool与 mysql-connector的版本不合适

commons-dbcp,commons-pool的1.x版本与mysql-connector5.0对应



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring是一个开源的Java框架,用于构建企业级应用程序。它提供了一种轻量级的、非侵入式的开发方式,通过依赖注入和面向切面编程等特性,简化了Java应用程序的开发过程。 以下是关于Spring学习的一些笔记: 1. IoC(控制反转):Spring通过IoC容器管理对象的创建和依赖关系的注入。通过配置文件或注解,将对象的创建和依赖关系的维护交给Spring容器来管理,降低了组件之间的耦合度。 2. DI(依赖注入):Spring通过依赖注入将对象之间的依赖关系解耦。通过构造函数、Setter方法或注解,将依赖的对象注入到目标对象中,使得对象之间的关系更加灵活和可维护。 3. AOP(面向切面编程):Spring提供了AOP的支持,可以将与业务逻辑无关的横切关注点(如日志、事务管理等)从业务逻辑中分离出来,提高了代码的可重用性和可维护性。 4. MVC(模型-视图-控制器):Spring提供了一个MVC框架,用于构建Web应用程序。通过DispatcherServlet、Controller、ViewResolver等组件,实现了请求的分发和处理,将业务逻辑和视图展示进行了分离。 5. JDBC和ORM支持Spring提供了对JDBC和ORM框架(如Hibernate、MyBatis)的集成支持,简化了数据库访问的操作,提高了开发效率。 6. 事务管理:Spring提供了对事务的支持,通过声明式事务管理和编程式事务管理,实现了对数据库事务的控制和管理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值