1.由于jdbc连接的繁琐性,故很多公司封装了jdbc框架,比如spring jdbc

2.比如spring jdbc框架中,用jdbctemplate,

通过jdbcTemplate 提供 int update(String sql, Object... args) 实现增加 、修改 、删除

代替了原来connection.createStatement().execuate(sql);

statemment.executeQuery(),executeUpdate()等方法。

甚至包括preparestatement的预处理参数?

比如:

   String sql="select * from user where id=?";
return this.getJdbcTemplate().queryForObject(sql, new UserRowMapper(), id);

3.Spring中关于JDBC的一个辅助类(JDBC Template),它封装了JDBC的操作,使用起来非常方便。

appliactionContext.xml

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--数据源的配置 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///spring"></property>
<property name="username" value="root"></property>
<property name="password" value=""></property>
</bean>   
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean> <bean id="userDao" class="com.curd.spring.impl.UserDAOImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean> </beans>

接口:IUserDAO.java

 package com.curd.spring.dao;

  import java.util.List;

  import com.curd.spring.vo.User;

  public interface IUserDAO {

      public void addUser(User user);

     public void deleteUser(int id);

     public void updateUser(User user);

     public String searchUserName(int id);

     public User searchUser(int id);

     public List<User> findAll();

 }

接口实现类:UserDAOImpl.java

按照以往Spring的依赖注入,我们需要在接口实现类中利用构造器去获取JdbcTemplate

Spring早就帮我们想到了这点,它为我们提供了JdbcDaoSupport支持类,所有DAO继承这个类,就会自动获得JdbcTemplate(前提是注入DataSource)。

  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean> <bean id="userDao" class="com.curd.spring.impl.UserDAOImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>

在我们的实现类中直接利用getJdbcTemplate就可以获取操作对象了。

JdbcTemplate主要提供下列方法:

  1、execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;

  2、update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;

  3、query方法及queryForXXX方法:用于执行查询相关语句;

  4、call方法:用于执行存储过程、函数相关语句。

 package com.curd.spring.impl;

  import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List; import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import com.curd.spring.dao.IUserDAO;
import com.curd.spring.vo.User; public class UserDAOImpl extends JdbcDaoSupport implements IUserDAO { public void addUser(User user) {
String sql = "insert into user values(?,?,?)";
this.getJdbcTemplate().update(sql, user.getId(), user.getUsername(),
user.getPassword());
} public void deleteUser(int id) {
String sql = "delete from user where id=?";
this.getJdbcTemplate().update(sql, id); } public void updateUser(User user) {
String sql = "update user set username=?,password=? where id=?";
this.getJdbcTemplate().update(sql, user.getUsername(),
user.getPassword(), user.getId());
} public String searchUserName(int id) {// 简单查询,按照ID查询,返回字符串
String sql = "select username from user where id=?";
// 返回类型为String(String.class)
return this.getJdbcTemplate().queryForObject(sql, String.class, id); } public List<User> findAll() {// 复杂查询返回List集合
String sql = "select * from user";
return this.getJdbcTemplate().query(sql, new UserRowMapper()); } public User searchUser(int id) {
String sql="select * from user where id=?";
return this.getJdbcTemplate().queryForObject(sql, new UserRowMapper(), id);
} class UserRowMapper implements RowMapper<User> {
     //rs为返回结果集,以每行为单位封装着
public User mapRow(ResultSet rs, int rowNum) throws SQLException { User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
return user;
} } }

测试类:UserTest.java

 package com.curd.spring.test;

  import java.util.List;

  import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.curd.spring.dao.IUserDAO;
import com.curd.spring.vo.User; public class UserTest { @Test//增
public void demo1(){
User user=new User();
user.setId();
user.setUsername("admin");
user.setPassword(""); ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
IUserDAO dao=(IUserDAO) applicationContext.getBean("userDao");
dao.addUser(user); } @Test//改
public void demo2(){
User user=new User();
user.setId();
user.setUsername("admin");
user.setPassword("admin"); ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
IUserDAO dao=(IUserDAO) applicationContext.getBean("userDao");
dao.updateUser(user);
} @Test//删
public void demo3(){
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
IUserDAO dao=(IUserDAO) applicationContext.getBean("userDao");
dao.deleteUser();
} @Test//查(简单查询,返回字符串)
public void demo4(){
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
IUserDAO dao=(IUserDAO) applicationContext.getBean("userDao");
String name=dao.searchUserName();
System.out.println(name);
} @Test//查(简单查询,返回对象)
public void demo5(){
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
IUserDAO dao=(IUserDAO) applicationContext.getBean("userDao");
User user=dao.searchUser();
System.out.println(user.getUsername());
} @Test//查(复杂查询,返回对象集合)
public void demo6(){
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
IUserDAO dao=(IUserDAO) applicationContext.getBean("userDao");
List<User> users=dao.findAll();
System.out.println(users.size());
} }

附:

1、Spring 为每种持久化技术 提供一个支持类,在DAO 中注入 模板工具类
    (1)JDBC : org.springframework.jdbc.core.support.JdbcDaoSupport
    (2)Hibernate 3.0 :org.springframework.orm.hibernate3.support.HibernateDaoSupport
    (3)iBatis :org.springframework.orm.ibatis.support.SqlMapClientDaoSupport

用户自己编写DAO 只需要继承 JdbcDaoSupport, 就可以注入 JdbcTemplate

2、 通过jdbcTemplate 提供 int update(String sql, Object... args) 实现增加 、修改 、删除

3、简单查询,返回原始数据类型, String类型
String sql = "select count(*) from user"; // int queryForInt(String sql)
String sql = "select name from user where id = ? "; // <T> T queryForObject(String sql, Class<T> requiredType, Object... args)

4、 复杂查询
JdbcTemplate 没有handler, 手动完成对象封装

编写实体类 RowMapper
class UserRowMapper implements RowMapper<User> {
  @Override
  public User mapRow(ResultSet rs, int rowNum) throws SQLException {
    // rs 已经指向每一条数据,不需要自己调用 next,将rs指向数据 转换 User对象
    User user = new User();
    user.setId(rs.getInt("id"));
    user.setName(rs.getString("name"));
    return user;
  }
}

查询单个对象 <T> T queryForObject(String sql, RowMapper<T> rowMapper, Object... args)
return this.getJdbcTemplate().queryForObject(sql, new UserRowMapper(),id);

查询所有对象List集合 <T> List<T> query(String sql, RowMapper<T> rowMapper, Object... args)
return this.getJdbcTemplate().query(sql, new UserRowMapper());

以上提供的方法基本可以满足我们的日常需要了。

本文转自http://www.cnblogs.com/lichenwei/p/3902294.html 感谢作者

jdbc框架有很多,包括spring jdbc的更多相关文章

  1. Unit06: Spring对JDBC的 整合支持 、 Spring+JDBC Template、Spring异常处理

    Unit06: Spring对JDBC的 整合支持 . Spring+JDBC Template .Spring异常处理 1. springmvc提供的异常处理机制 我们可以将异常抛给spring框架 ...

  2. 11.Spring——JDBC框架

    1.DBC 框架概述 2.Spring JDBC 示例 3.Spring 中 SQL 的存储过程 1.DBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关 ...

  3. Spring(十二)之JDBC框架

    JDBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQ ...

  4. Spring JDBC 框架使用JdbcTemplate 类的一个实例

    JDBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQ ...

  5. Spring JDBC

    转载:博客主页:http://blog.csdn.NET/chszs 一.概述 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1)core即核心包,它包含了JDBC的核心功能.此包内 ...

  6. Spring DAO vs Spring ORM vs Spring JDBC

    Pat 的疑惑 最近关注于 Spring 提供的数据访问技术,对于 Spring 相关的这几个项目有何不同我不是太明白: Spring-DAO (http://docs.spring.io/sprin ...

  7. Spring JDBC 随笔

    Spring 框架,借助 JdbcTemplate 类来简化 java 访问 database. 完成一个增查改删(CRUD)的基本功能,借助下面 5 个角色来共同来完成. 1. object cla ...

  8. Sping-Spring JDBC框架

    JDBC框架概述 在使用普通的JDBC数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但Spring JDBC框架负责所有的底层细节,从开始打开连接,准备和执行SQL语句,处理 ...

  9. Spring JDBC实现查询

    1 db.properties jdbc.user=root jdbc.password=920614 jdbc.driverClass=com.mysql.jdbc.Driver jdbc.jdbc ...

随机推荐

  1. rcnn ->fast rcnn->faster rcnn物体检测论文

    faster rcnn中的rpn网络: 特征可以看做一个尺度51*39的256通道图像,对于该图像的每一个位置,考虑9个可能的候选窗口:三种面积{1282,2562,5122}×三种比例{1:1,1: ...

  2. 详述Linux配置静态IP、设置DNS和主机名(一)

    Linux配置静态IP.设置DNS和主机名首先要找到配置文件,这是在Linux系统下进行工作的必须知道工作方式.后面一步步的跟着这个范例来进行配置相信你最终也会完成Linux配置静态IP.设置DNS和 ...

  3. 禁用Flash P2P上传

    Mac OS: sudo bash -c 'echo RTMFPP2PDisable=1 >> /Library/Application\ Support/Macromedia/mms.c ...

  4. apache Apache winnt_accept: Asynchronous AcceptEx failed 错误的解决

    httpd配置文件中添加: AcceptFilter http noneAcceptFilter https none apache优化: http://blog.csdn.net/hytfly/ar ...

  5. Hadoop(八)Hadoop数据压缩与企业级优化

    一 Hadoop数据压缩 1.1 概述 压缩技术能够有效减少底层存储系统(HDFS)读写字节数.压缩提高了网络带宽和磁盘空间的效率.在Hadood下,尤其是数据规模很大和工作负载密集的情况下,使用数据 ...

  6. 微信小程序之wepy自动化架构搭建(fly+wepy-plugin-replace)

    前言 本文章秉着自动化工程项目的思想搭建的,基础架子完全按照wepy官网搭建,在基础上增加配置达到自动化项目.新增动flxio拦截器自动处理接口,新增根据环境变量来改变运行时的参数. Fly.js 小 ...

  7. js对小数的操作

    1.丢弃小数部分,保留整数部分 js:parseInt(7/2) 2.向上取整,有小数就整数部分加1 js: Math.ceil(7/2) 3,四舍五入. js: Math.round(7/2) 4, ...

  8. js获取url链接地址的参数

    访问地址为:http://XXX.com?style=green <script language="javascript"> var getArgs = functi ...

  9. NumPy 新知

    import numpy as np a = np.arange(5) a array([0, 1, 2, 3, 4]) 增加一个维度: b = a[:, None] c = a[:,np.newax ...

  10. Python开发基础-Day29多线程

    概念 进程:进程就是一个程序在一个数据集上的一次动态执行过程 程序:代码 数据集:程序执行过程中需要的资源 进程控制块:完成状态保存的单元 线程:线程是寄托在进程之上,为了提高系统的并发性 线程是进程 ...