jdbc框架有很多,包括spring jdbc
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的更多相关文章
- Unit06: Spring对JDBC的 整合支持 、 Spring+JDBC Template、Spring异常处理
Unit06: Spring对JDBC的 整合支持 . Spring+JDBC Template .Spring异常处理 1. springmvc提供的异常处理机制 我们可以将异常抛给spring框架 ...
- 11.Spring——JDBC框架
1.DBC 框架概述 2.Spring JDBC 示例 3.Spring 中 SQL 的存储过程 1.DBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关 ...
- Spring(十二)之JDBC框架
JDBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQ ...
- Spring JDBC 框架使用JdbcTemplate 类的一个实例
JDBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQ ...
- Spring JDBC
转载:博客主页:http://blog.csdn.NET/chszs 一.概述 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1)core即核心包,它包含了JDBC的核心功能.此包内 ...
- Spring DAO vs Spring ORM vs Spring JDBC
Pat 的疑惑 最近关注于 Spring 提供的数据访问技术,对于 Spring 相关的这几个项目有何不同我不是太明白: Spring-DAO (http://docs.spring.io/sprin ...
- Spring JDBC 随笔
Spring 框架,借助 JdbcTemplate 类来简化 java 访问 database. 完成一个增查改删(CRUD)的基本功能,借助下面 5 个角色来共同来完成. 1. object cla ...
- Sping-Spring JDBC框架
JDBC框架概述 在使用普通的JDBC数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但Spring JDBC框架负责所有的底层细节,从开始打开连接,准备和执行SQL语句,处理 ...
- Spring JDBC实现查询
1 db.properties jdbc.user=root jdbc.password=920614 jdbc.driverClass=com.mysql.jdbc.Driver jdbc.jdbc ...
随机推荐
- linux中getmntent setmntent endmntent 用法例子
mntent 结构是在 <mntent.h> 中定义,如下: struct mntent { char *mnt ...
- 次短路经(dijsktra)
#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#defi ...
- Otto:EventBus
Otto:EventBus 2014年6月20日 星期五 15:14 参考: http://www.mythroad.net/?p=4151 Otto 是Android系统的一个Event Bus模式 ...
- 关于ZIP自动打包的进一步进化思路
http://blog.163.com/long200259@126/blog/static/11288755920093120529157/
- 【LOJ】#2017. 「SCOI2016」围棋
题解 考虑到状态数比较复杂,其实我们需要轮廓线dp-- 我们设置\(f[x][y][S][h][k]\)为考虑到第(x,y)个格子,S是轮廓线上的匹配状态,是二进制,如果一位是1表示这一位匹配第一行匹 ...
- Wannafly挑战赛7 C - 小Q与氪金游戏
题目描述 “为世界上所有的美好而战!”小Q同学最近沉迷“稳固3”,为了从最新的蛋池中抽出自己喜欢的角色卡,不惜氪下重金.在这个游戏中,氪一单可以得到x个宝石,而抽一次卡需要花费y个宝石,由于游戏策划十 ...
- 手机锁屏js倒计时停止问题解决办法探索
如图,有这么个需求,测试人员在测试过程中提了一个bug,手机锁屏再唤醒倒计时时间没有更新,仍从锁屏的时间继续,于是开始寻找解决之法 经了解得知,锁屏时候,浏览器的一切活动会停止运行,那么js也无法幸免 ...
- 使用抽象bean
定义抽象类Abstract=“true”抽象bean不能实例化,一个类可以创建多个bean. 抽象bean的配置和一般bean的配置基本一样只是在增加了Abstract=“true”抽象bean是一个 ...
- dev devfs udev sysfs及关系
Linux 下对设备的管理方式主要有/dev和sysfs两种,前者是将设备注册为设备节点放入/dev目录下,而后者是在linux2.6内核后引入的新的文件系统. ➤/dev方式 关于/dev的 ...
- FastReport.Net使用:[10]报表栏目说明
报表栏目说明 报表标题(Report Title):在每个报表的开始时打印. 报表合计区(Report Summary):在报表结尾时打印,显示在最后一行数据后,页脚前. 页眉(Page Header ...