背景

在JDBC开发中,充斥这大量重复的代码,可能只是换了个SQL语句,其他代码是完全不用变的。Spring的jar包里,提供了一个叫JDBCTemplate的模板,在保持操作灵活方便的情况下,将代码量降到最低。


配置文件

首先修改Spring的xml文件(src目录下),我这里采用的是c3p0数据源,如下图所示:

<?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:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">  <!-- 定义要扫描 controller的包 --><context:component-scan base-package="cn.com.restapi.controller" /><context:component-scan base-package="cn.com.restapi.daoimpl"/><context:component-scan base-package="cn.com.restapi.serviceimpl"/><!-- 引用配置文件 --><context:property-placeholder location="classpath:jdbc.properties"/><mvc:default-servlet-handler /> <!-- 启动注解驱动 SpringMVC 功能 --><mvc:annotation-driven /><!-- 配置视图解析器解析路径 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"><!-- 定义视图存放路径 --><property name="prefix" value="/WEB-INF/jsp/" /><!-- 定义视图后缀 --><property name="suffix" value=".jsp" /></bean><!-- 1、声明数据源对象:C3P0连接池 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!-- 加载jdbc驱动 --><property name="driverClass" value="${driverClass}"></property><!-- jdbc连接地址 --><property name="jdbcUrl" value="${jdbcUrl}"></property><!-- 连接数据库的用户名 --><property name="user" value="${user}"></property><!-- 连接数据库的密码 --><property name="password" value="${password}"></property><!-- 数据库的初始化连接数 --><property name="initialPoolSize" value="3"></property><!-- 数据库的最大连接数 --><property name="maxPoolSize" value="10"></property><!-- 数据库最多执行的事务 --><property name="maxStatements" value="100"></property><!-- 连接数量不够时每次的增量 --><property name="acquireIncrement" value="2"></property>           </bean><!--  创建jdbcTemplate对象 --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean></beans>

properties文件(src目录下)如下图内容如下图所示:

然后写一个JDBCTemplate的类,里面的方法用于对数据进行增删改查操作。这里的JdbcTemplate属性,Spring容器会根据XML文件里的配置进行自动的注入。

package cn.com.restapi.daoimpl;import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import cn.com.restapi.dao.EmployeeDao;
import cn.com.restapi.model.Employee;@Repository
public class EmployeeDaoImpl implements EmployeeDao{@Autowiredprivate JdbcTemplate jdbcTemplate;private Log log = LogFactory.getLog(EmployeeDaoImpl.class.getName());@Overridepublic List<Employee> getEmployees() {// TODO Auto-generated method stubString sql = "SELECT EMPLOYEE_ID,EMPLOYEE_NAME,AGE,ADDRESS,SEX FROM EMPLOYEE";log.info(sql);return jdbcTemplate.query(sql, new EmployeeRowMapper());}@Overridepublic Employee getEmployeeByID(int id) {// TODO Auto-generated method stubString sql = "SELECT EMPLOYEE_ID,EMPLOYEE_NAME,AGE,ADDRESS,SEX FROM EMPLOYEE WHERE EMPLOYEE_ID = ?";log.info(sql);List<Employee> employees = this.jdbcTemplate.query(sql, new EmployeeRowMapper(),id);if (employees.isEmpty()) {return null;}return employees.get(0);}@Overridepublic int createEmployee(Employee employee) {// TODO Auto-generated method stubString sql = "INSERT INTO EMPLOYEE(EMPLOYEE_ID,EMPLOYEE_NAME,AGE,ADDRESS,SEX) VALUE(?,?,?,?,?)";log.info(sql);int rowNum = this.jdbcTemplate.update(sql,employee.getEmployeeID(),employee.getEmployeeName(),employee.getAge(),employee.getAddress(),employee.getSex());return rowNum;}@Overridepublic int updateEmployee(Employee employee) {// TODO Auto-generated method stubString sql  = "UPDATE EMPLOYEE SET EMPLOYEE_NAME = ?,AGE = ?,ADDRESS = ?,SEX = ? WHERE EMPLOYEE_ID = ?";log.info(sql);int rowNum = this.jdbcTemplate.update(sql,employee.getEmployeeName(),employee.getAge(),employee.getAddress(),employee.getSex(),employee.getEmployeeID());return rowNum;}@Overridepublic int deleteEmployee(Employee employee) {// TODO Auto-generated method stubString sql = "DELETE EMPLOYEE WHERE EMPLOYEE_ID = ?";log.info(sql);int rowNum = this.jdbcTemplate.update(sql,employee.getEmployeeID());return rowNum;}public class EmployeeRowMapper implements RowMapper<Employee>{@Overridepublic Employee mapRow(ResultSet rSet, int rowNum) throws SQLException {// TODO Auto-generated method stubEmployee employee = new Employee();employee.setEmployeeID(rSet.getInt("EMPLOYEE_ID"));employee.setEmployeeName(rSet.getString("EMPLOYEE_NAME"));employee.setAddress(rSet.getString("ADDRESS"));employee.setAge(rSet.getInt("AGE"));employee.setSex(rSet.getString("SEX"));return employee;}}@Overridepublic boolean ifEmployeeExist(Employee employee) {// TODO Auto-generated method stubEmployee employee2 = this.getEmployeeByID(employee.getEmployeeID());if (employee2 == null) {return true;}return false;}}

只要对JdbcCompany进行依赖注入,就可以调用使用了。以下是spring mvc rest服务中实现注入:

@RestController
public class CompanyController {@Autowiredprivate JdbcCompany jdbcCompany;@RequestMapping(value="/company",method = RequestMethod.GET)public ResponseEntity<List<Company>> getAllCompany(){List<Company> companies = new ArrayList<Company>();companies = jdbcCompany.queryAllCompany();if (companies.isEmpty()) {return new ResponseEntity<List<Company>>(companies,HttpStatus.NO_CONTENT);}return new ResponseEntity<List<Company>>(companies,HttpStatus.OK);}@RequestMapping(value = "/company/{id}",method = RequestMethod.GET)public ResponseEntity<List<Company>> getCompany(@PathVariable("id") String id){List<Company> companies = null;companies = jdbcCompany.queryCompany(id);HttpStatus httpStatus = companies != null? HttpStatus.OK:HttpStatus.NOT_FOUND;return new ResponseEntity<List<Company>>(companies,httpStatus);}
}

Spring整合JDBC开发相关推荐

  1. JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

    Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring?  Spring是分层的Java ...

  2. spring整合jdbc

    spring整合jdbc 在pom.xml文件中导入依赖: <!-- 阿里数据源 --> <dependency><groupId>com.alibaba</ ...

  3. Spring4.x()--Spring整合Jdbc的HelloWorld

    Spring整合Jdbc的HelloWorld 一.JdbcTemplate概述 它是spring框架中提供的一个对象,是对原始Jdbc API对象的简单封装.spring框架为我们提供了很多的操作模 ...

  4. spring整合JDBC 实现拦截器用户的登录和注册的案例源代码及解析

    前言:为了大家学习的方便,我自己完成了一个登录注册的小案例供大家参考,如有疑问?请私信博主,小主辛苦总结,望大家转载请标明出处. **项目介绍:**本项目使用的是spring整合jdbc实现用户的登录 ...

  5. spring整合cxf开发rest风格的webservice接口(客户端服务端)

    前面文章记录了在spring中如何整合cxf开发webservice客户端和服务端,其实,相较于原生开发方式,已经有了不少优化.rest风格的开发,作为一种极为流行的开发规范,可以帮助我们更加简洁高效 ...

  6. spring整合jdbc配置文件

    spring通过jdbcTemplate整合jdbc,在spring框架中管理数据源配置,并进行事务管理 <?xml version="1.0" encoding=" ...

  7. spring整合mina开发web项目和简单mina客户端的使用

    场景要求在web项目中使用mina与一些客户端通讯. 一.maven引包 <project xmlns="http://maven.apache.org/POM/4.0.0" ...

  8. Spring整合web开发

    正常整合Servlet和Spring没有问题的 public class UserServlet extends HttpServlet {public void doGet(HttpServletR ...

  9. ActiveMQ整合spring结合项目开发流程(生产者和消费者)总结

    1 一:生产者代码编写: 2 1.配置pom.xml引入相关坐标 3 <dependencies> 4 <!-- spring开发测试 --> 5 <dependency ...

最新文章

  1. 腾讯告诉你小孩子的钱也有多好赚,一月花费25万不是梦!
  2. 一步一步学Silverlight 2系列(18):综合实例之RSS阅读器
  3. MATLAB安装相机驱动
  4. 【C 语言】内存四区原理 ( 内存四区建立流程 )
  5. 电离辐射防护与辐射源安全基本标准_漳武南靖段A1项目成功举办桥面系 安全防护标准化观摩会...
  6. reentrantlock非公平锁不会随机挂起线程?_【原创】Java并发编程系列16 | 公平锁与非公平锁...
  7. Redis 使用 Lua 脚本进行原子操作
  8. 域用户登录方法在计算机上不被允许,如何解决不能交互式登录的问题
  9. System Toolkit for Mac(Mac系统维护工具)
  10. 《大数据技术原理与应用》第三版 林子雨编著 第一章 大数据概述
  11. css静态网页设计 北京旅游(1页) 北京旅游网页设计制作 简单静态HTML网页作品 我的旅游网页作业成品 学生旅游网站模板
  12. Abaqus之地应力平衡分析步 Geostatic step
  13. 对角占优矩阵(Diagonally-dominant Matrix)
  14. 关于使用java操作doc与docx互转
  15. linux boost库安装
  16. 离线数仓建设及技术选型
  17. ZYNQ - 无DDR固化程序(代码运行在OCM上)
  18. 空调主板电路设计特点
  19. hdu 2189 悼念512汶川大地震遇难同胞——来生一起走
  20. nfc标签 方案 防伪_酒类NFC防伪解决方案

热门文章

  1. ELK 分析 nginx access 日志
  2. UML--组件图,部署图
  3. Composer学习之————Ubuntu14.04下安装Composer
  4. 【喜报】JEEWX荣获“2016 年度码云新增热门开源软件排行榜”第一名!
  5. 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)
  6. 《小强升职记》读后感和思维导图
  7. Android 照相功能
  8. 游标、过程、函数、包
  9. python培训一般要多久_入门 Python 要多久时间?该如何学习?
  10. java框架mybatis配置文件总结一