`
wxq594808632
  • 浏览: 262422 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring jdbctemplate

阅读更多

最近离职一边找工作一边开始重新学习spring.以前学的都忘记了

做个例子放上来.就当自己的学习归纳了.省的老忘.

 

首先说下对spring的看法.spring主要提供的功能就是管理.降低层与层之间的耦合,它主要包含IOC(控制反转),Dependency Injection(依赖注入)AOP(面向切面编程),以及对事务的管理

 

首先说下IOC,所谓的控制反转就是说应用所需要的依赖对象.不是由应用本身创建,而是由外部容器也就是spring的配置文件applicationContext.xml创建的.这种对对象创建控制权的转移就叫控制反转

 

这方面的例子网上很多.我就不列举了

 

依赖注入就是在运行期,有外部容器把需要的依赖对象注入到组件中

 

aop我理解的也不怎么清晰.下面是引用百度中的说明

  AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向切面编程。可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。

 

上面说了那么多废话.本文的重点是spring提供的一个jdbc模板

先说下模板

 

直接贴代码了.我代码中只列举到了个别方法.想研究可以自己多看看

package com.smallq.dao.impl;

import java.util.List;

import javax.sql.DataSource;
import org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import com.smallq.dao.DaoException;
import com.smallq.dao.UserDao;
import com.smallq.domain.User;

public class UserDaoImpl implements UserDao {
	private SimpleJdbcTemplate simpleJdbcTemplate;

	/**
	 * 注入数据源
	 * @param dataSource
	 */
	public void setDataSource(DataSource dataSource) {
		this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
	}

	/**
	 * 删除
	 */
	public void delete(int userId) {
		try {
			simpleJdbcTemplate.update("delete from user where id=?",
					new Object[] { userId });
		} catch (Exception e) {
			throw new DaoException("删除用户出错" + e.getMessage(), e);
		}
	}

	/**
	 * 根据id查找
	 */
	public User findUser(int userId) {
		try {
			return simpleJdbcTemplate.queryForObject(
					"select * from user where id=?",
					ParameterizedBeanPropertyRowMapper.newInstance(User.class),
					new Object[] { userId });
		} catch (Exception e) {
			throw new DaoException("查询id为:" + userId + " 的用户出错"
					+ e.getMessage(), e);
		}
	}

	/**
	 * 查找所有
	 */
	@SuppressWarnings("unchecked")
	public List<User> getUsers() {
		try {
			return simpleJdbcTemplate.getJdbcOperations().query(
					"select * from user",
					ParameterizedBeanPropertyRowMapper.newInstance(User.class));
		} catch (Exception e) {
			throw new DaoException("查询所有用户出错" + e.getMessage(), e);
		}
	}

	/**
	 * 根据用户名密码查找
	 */
	public User login(String username, String password) {
		try {
			return simpleJdbcTemplate.queryForObject(
					"select * from user where username=? and password=?",
					ParameterizedBeanPropertyRowMapper.newInstance(User.class),
					new Object[] { username, password });
		} catch (Exception e) {
			throw new DaoException("登陆出现异常" + e.getMessage(), e);
		}
	}

	/**
	 * 添加
	 */
	public void save(User user) {
		try{
		simpleJdbcTemplate.update("insert into user values(?,?)",new Object[]{user.getUsername(),user.getPassword()});
		}catch (Exception e) {
			throw new DaoException("添加用户出现异常" + e.getMessage(), e);
		}
		// 下面这种方式比较安全.如果需要返回主键.推荐使用
		// 主键是自动增长的.这里不需要指定主键
		/*
		String sql = "insert into user (username,password) values (:username,:password)";
		SqlParameterSource param = new BeanPropertySqlParameterSource(user);
		KeyHolder keyHolder = new GeneratedKeyHolder();
		try {
			simpleJdbcTemplate.getNamedParameterJdbcOperations().update(sql,
					param, keyHolder);
			user.setId(keyHolder.getKey().intValue());
		} catch (Exception e) {
			throw new DaoException(e.getMessage(), e);
		}
		*/
		// return user.getId(); 如果需要返回主键
	}

	/**
	 * 修改
	 */
	public void update(User user) {
		try {
			simpleJdbcTemplate.update(
					"update user set username=?,password=? where id=?",
					new Object[] { user.getUsername(), user.getPassword(),
							user.getId() });
		} catch (Exception e) {
			throw new DaoException("执行更新出错" + e.getMessage(), e);
		}
	}

}

 

上面用到的DaoException 是一个继承RuntimeException的异常处理类

 

User是一个实体对象.我就不写代码了

 

spring配置文件applicationContext.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: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">
      <!-- 启用注解自动装配  @Resource -->
      <context:annotation-config></context:annotation-config>
      
      <!-- 数据源配置 -->
	 <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/smallq?userUnicode=true&amp;characterEncoding=UTF-8"/>
	    <property name="username" value="root"/>
	    <property name="password" value="5"/>
	     <!-- 连接池启动时的初始值 -->
		 <property name="initialSize" value="1"/>
		 <!-- 连接池的最大值 -->
		 <property name="maxActive" value="500"/>
		 <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
		 <property name="maxIdle" value="2"/>
		 <!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
		 <property name="minIdle" value="1"/>
	 </bean>

	
     <!-- 注解方式配置事务  -->
	<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  	   <property name="dataSource" ref="dataSource"/>
    </bean>
	<tx:annotation-driven transaction-manager="txManager"/>
	
	
	<bean id="personDao" class="com.smallq.dao.impl.UserDaoImpl">
		<property name="dataSource" ref="dataSource"></property>	
	</bean>
	<bean id="personService" class="com.smallq.service.impl.UserServiceImpl">
	</bean>
	</beans>

  

 

 事务就先不说了.下篇说.附件见下篇

分享到:
评论
4 楼 wxq594808632 2012-08-01  
zhangpeili 写道
wxq594808632 写道
zhangpeili 写道
result = namedParameterJdbcTemplate.update(sql,new BeanPropertySqlParameterSource(student));
可以用这个新特性!

都好久没用这个了,现在的spring太庞大了,现在的组合是backbone+jquery+strut2-rest+guice+dbutils




Guice听说不错!你在哪里上班啊!用的这么先进

这个不过是比较小众而已。。先进说不上。在哪里上班和先进没关系。。
3 楼 zhangpeili 2012-07-30  
wxq594808632 写道
zhangpeili 写道
result = namedParameterJdbcTemplate.update(sql,new BeanPropertySqlParameterSource(student));
可以用这个新特性!

都好久没用这个了,现在的spring太庞大了,现在的组合是backbone+jquery+strut2-rest+guice+dbutils




Guice听说不错!你在哪里上班啊!用的这么先进
2 楼 wxq594808632 2012-06-19  
zhangpeili 写道
result = namedParameterJdbcTemplate.update(sql,new BeanPropertySqlParameterSource(student));
可以用这个新特性!

都好久没用这个了,现在的spring太庞大了,现在的组合是backbone+jquery+strut2-rest+guice+dbutils
1 楼 zhangpeili 2012-06-16  
result = namedParameterJdbcTemplate.update(sql,new BeanPropertySqlParameterSource(student));
可以用这个新特性!

相关推荐

    基于注解的Spring JdbcTemplate

    **基于注解的Spring JdbcTemplate** 在Java世界中,Spring框架是企业级应用开发的首选。Spring JDBC模絫提供了一种简洁的方式来处理数据库操作,而`Spring JdbcTemplate`是这个模絫的核心组件。本教程将深入探讨...

    Spring JdbcTemplate

    **Spring JdbcTemplate**是Spring框架中的一个核心组件,主要用于简化Java数据库访问。它提供了一种模板化的方式来执行SQL语句,使得开发人员可以避免编写大量的重复代码,专注于业务逻辑,而不是底层的数据库交互...

    Spring JdbcTemplate调用Oracle存储过程实现CRUD

    使用 Spring JdbcTemplate 调用 Oracle 存储过程实现 CRUD 在本文中,我们将讨论如何使用 Spring JdbcTemplate 调用 Oracle 存储过程来实现 CRUD(Create、Read、Update、Delete)操作。我们将首先编写 Oracle 存储...

    Spring JdbcTemplate 常用方法整理

    Spring的JdbcTemplate是Spring框架中用于简化数据库操作的工具类,它是基于JDBC但又抽象出了一层,避免了直接与数据库驱动API交互,从而提高了代码的可读性和可维护性。本文将深入探讨Spring JdbcTemplate的常用方法...

    Spring JDBCTemplate连接池jar包

    首先,我们要理解Spring JDBCTemplate的工作原理。它作为一个模板类,提供了执行SQL语句的方法,如`update()`, `query()`, `insert()`, `delete()`等。开发者只需要提供SQL语句和参数绑定,JDBCTemplate会自动处理...

    SpringJdbcTemplate封装工具类

    SpringJdbcTemplate是Spring框架中用于简化Java数据库访问的工具,它是Spring JDBC模块的核心。这个封装工具类的出现是为了提供一种更简洁、易于使用的接口来执行SQL操作,减轻开发者处理数据库连接、事务管理以及...

    spring-jdbcTemplate实例工程

    《深入解析Spring JdbcTemplate》 Spring JDBC Template是Spring框架中用于简化JDBC操作的一个核心组件,它是Spring对JDBC API的封装,旨在提供一个更加简洁、健壮且可测试的数据库访问层。在这个实例工程中,我们...

    Druid数据库连接池的SpringJDBCTemplate所需的jar包

    Druid数据库连接池的SpringJDBCTemplate所需的jar包,Druid数据库连接池的SpringJDBCTemplate所需的jar包,Druid数据库连接池的SpringJDBCTemplate所需的jar包,Druid数据库连接池的SpringJDBCTemplate所需的jar包,...

    使用Spring JDBCTemplate进行增删改查curd操作

    在Spring框架中,JdbcTemplate是用于简化数据库操作的重要工具,它是Spring JDBC模块的一部分。通过使用JdbcTemplate,开发者可以避免编写大量的重复代码,如手动管理连接、处理结果集等,从而专注于业务逻辑。本文...

    模仿spring jdbcTemplate的实现

    模仿spring jdbcTemplate的粗略实现,只有很小的参考价值,如果是java初学者可以使用这个封装好的工具进行数据库操作,只需要在db.properties里配置好driver,url等信息

    Spring JdbcTemplate.batchUpdate 例子

    在Spring框架中,`JdbcTemplate`是用于简化Java数据库连接(JDBC)操作的一个核心组件。这个类提供了很多方法来执行SQL查询、更新语句,包括批处理操作。本篇文章将详细探讨`batchUpdate`方法及其在实际开发中的应用...

    strut2+spring+springjdbctemplate做的简易登录系统

    Struts2、Spring和Spring JDBC Template是Java Web开发中常用的三个框架,它们分别负责不同的职责。Struts2作为MVC(Model-View-Controller)框架,主要处理前端请求和业务逻辑;Spring则是一个全面的后端框架,提供...

    Spring JdbcTemplate查询实例

    Spring JdbcTemplate是Spring框架中用于简化数据库操作的一个重要组件,它是Spring对JDBC的轻量级封装,旨在提供一种结构良好、易于使用的SQL执行机制,同时保持了JDBC的灵活性。在本实例中,我们将深入探讨Spring ...

    Spring JdbcTemplate例子

    Spring JdbcTemplate是Spring框架中的一个核心组件,主要用来简化数据库操作。它提供了一种模板方法设计模式,将SQL语句的执行与结果处理进行了抽象,使得开发者可以更加专注于业务逻辑,而无需关心底层数据访问的...

    Spring JdbcTemplate api

    根据给定的文件信息,以下是对“Spring JdbcTemplate API”的详细知识点解析: ### Spring JdbcTemplate API:数据库操作的模板模式 #### 概述 在Spring框架中,`JdbcTemplate`是一个用于简化JDBC编程的工具类,...

    spring jdbcTemplate

    《Spring JdbcTemplate 深入解析与实战应用》 在Java世界中,Spring框架以其强大的功能和灵活性,深受广大开发者的喜爱。其中,Spring JDBC Template是Spring提供的一个用于简化数据库操作的工具,它抽象了JDBC API...

    spring jdbcTemplate 注入到servlet

    在Java Web开发中,Spring框架提供了丰富的工具来简化数据库操作,其中之一就是`Spring JdbcTemplate`。`JdbcTemplate`是Spring对JDBC(Java Database Connectivity)的一层轻量级封装,它使得开发者能够更加方便地...

    SSH笔记-Spring JdbcTemplate

    SSH笔记-Spring JdbcTemplate是关于如何在Spring框架中利用JdbcTemplate进行数据库操作的教程。Spring是一个广泛应用的Java企业级应用框架,它提供了多种数据访问工具,而JdbcTemplate就是其中之一,用于简化JDBC...

    Spring jdbcTemplate pom.xml

    1.Spring4前 spring-jdbc包是独立的,4以后spring-jdbc 就已经没有了

Global site tag (gtag.js) - Google Analytics