Spring JDBC是Spring所提供的持久层技术,它的主要目标是降低使用JDBC API的门槛,以一种更直接,更简介,更
简单的方式使用JDBC API, 在Spring JDBC里,仅需做那些与业务相关的DML操作,而将资源获取,Statment创建,
资源释放以及异常处理等繁杂而乏味的工作交给Spring JDBC.
虽然ORM的框架已经成熟丰富,但是JDBC的灵活,直接的特性,依然让他拥有自己的用武之地,如在完全依赖查询
模型动态产生查询语句的综合查询系统中,Hibernaye,MyBatis,JPA等框架都无法使用,这里JDBC是唯一的选择.

1. JdbcTemplate入门

1.1 创建项目-引入jar包-导入日志:log4j.properties

1.2 创建数据库
数据库名: springjdbc
创建角色表:

 CREATE TABLE `role` (
`rid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '角色id',
`rname` VARCHAR(20) NOT NULL COMMENT '角色名',
`alias` VARCHAR(20) NOT NULL COMMENT '角色别名',
PRIMARY KEY (`rid`)
)
INSERT INTO role (rid,rname,alias)
VALUES(1,'admin','系统管理员'),(2,'dispatcher','调度员');

1.3 测试代码

 @Test
public void test1() throws Exception {
//TODO 测试jdbcTemplate简单使用
//1.创建c3p0链接池
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/springjdbc");
dataSource.setUser("root");
dataSource.setPassword("111");
//创建jdbcTemplate对象
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
//创建sql语句
String sql = "insert into role (rid , rname ,alias) value (? , ?,?);";
jdbcTemplate.update(sql,"3","visitor","游客");
}

2. Spring管理JdbcTemplate

1. 创建Role.java

 public class Role {
private Integer cid;
private String rname;
private String alias;
//setter getter
}

2. RoleDao.java

 public interface RoleDao {
//增
void save(Role role);
//删除
void delete(Integer id);
//改
void update(Role role);
//查
Role getById(Integer id);
//查
int getTotalCount();
//查
List<Role> getAll();
}

3. 创建RoleDaoImpl.java

创建数据源(连接池),JdbcTemplate,RoleDao交给Spring容器管理(IOC)
注意: 可以自己在RoleDaoImpl中添加 JdbcTemplate变量,如果不自动装载记得添加变量的set方法,
标准的操作,我们可以让RoleDaoImpl 继承 JdbcDaoSupport, 因为
(org.springframework.jdbc.core.support.JdbcDaoSupport)类提供了JdbcTemplate对象以及对应的获取和设置方
法.不用自己在实现类中添加JdbcTemplate变量!!

JdbcTemplate // Spring操作数据模板类(工具类)
JdbcTemplate.update(sql,ArgsObj....); //DML
JdbcTemplate.execute(sql) //DDL DCL
//DQL 查询单个
jdbcTemplate.queryForObject(String var1, RowMapper<T> var2, Object... var3);
RowWapper<T> 将结果封装的处理器; 得到Result解析成实体类对象即可!
//查询所有
jdbcTemplate.query(String var1, RowMapper<T> var2, Object... var3);

RoleDaoImple代码:

 public class RoleDaoImpl extends JdbcDaoSupport implements RoleDao {
public void save(Role role) {
//TODO 插入数据
String sql = "INSERT INTO role (rname,alias) value (?,?) ;";
getJdbcTemplate().update(sql,role.getRname(),role.getAlias());
}
public void delete(Integer id) {
//TODO 根据id删除
String sql = "delete from role where rid = ? ;";
getJdbcTemplate().update(sql,id);
}
public void update(Role role) {
//TODO 修改role信息
String sql="update role set rname = ? , alias = ? where rid = ? ;" ;
getJdbcTemplate().update(sql,role.getRname(),role.getAlias(),role.getRid());
}
public Role getById(Integer id) {
String sql = "select * from role where rid = ? ;";
//直接查询
// Role role = getJdbcTemplate().queryForObject(sql, new Object[]{id}, Role.class);
Role role = (Role) getJdbcTemplate().queryForObject(sql, new Object[]{id}, new
RowMapper<Object>() {
public Object mapRow(ResultSet resultSet, int index) throws SQLException {
//将一行数据解析成一个java对象
return mapRowHandler(resultSet);
}
});
return role;
}
public int getTotalCount() {
String sql = "select count(*) from role ;";
Integer count = getJdbcTemplate().queryForObject(sql,Integer.class);
return count;
}
//查询所有
public List<Role> getAll() {
String sql = "select * from role";
List<Role> list = getJdbcTemplate().query(sql, new RowMapper<Role>() {
public Role mapRow(ResultSet resultSet, int i) throws SQLException {
return mapRowHandler(resultSet);
}
});
return list;
}
private Role mapRowHandler(ResultSet resultSet) throws SQLException{
Role role = new Role();
role.setRid(resultSet.getInt("rid"));
role.setRname(resultSet.getString("rname"));
role.setAlias(resultSet.getString("alias"));
return role;
}
}

4. 创建数据库配置文件

文件名:db.properties
位置: src下/ maven项目 resources文件夹下

jdbc.jdbcUrl=jdbc:mysql://localhost:3306/****
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=***

5.编写IOC配置

文件名:applicationContext.xml
位置:src下 / maven项目 resources文件夹下

 <?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions
here -->
<context:component-scan base-package="com.itqf.spring"></context:component-scan>
<context:property-placeholder location="db.properties"></context:property-
placeholder>
<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
p:jdbcUrl="${jdbc.jdbcUrl}"
p:driverClass="${jdbc.driverClass}"
p:user="root"
p:password="111"
/>
<!-- bean jdbcTemplate -->
<bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean name="roleDao" class="com.itqf.spring.dao.impl.RoleDaoImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
</beans>

测试:

 @Test
public void test2(){
//TODO 测试使用配置文件
ApplicationContext context =new
ClassPathXmlApplicationContext("applicationContext.xml");
RoleDao dao = context.getBean("roleDao", RoleDaoImpl.class);
Role byId = dao.getById(2);
System.out.println(byId);
List<Role> all = dao.getAll();
System.out.println("all = " + all);
}

Spring JDBC 数据访问的更多相关文章

  1. Spring04-SpringEL&Spring JDBC数据访问

    一. SpringEL入门 Spring动态语言(简称SpEL) 是一个支持运行时查询和操作对象图的强大的动态语言,语法类似于EL表达式,具有诸如显示方法和基本字符串模板函数等特性. 1. 准备工作 ...

  2. jdbc数据访问技术

    jdbc数据访问技术 1.JDBC如何做事务处理? Con.setAutoCommit(false) Con.commit(); Con.rollback(); 2.写出几个在Jdbc中常用的接口 p ...

  3. Spring 梳理-数据访问-DB

    针对接口编程 DAO是指数据访问对象(data access object),它提供了数据读取和写入到数据库中的一种方式.Spring认为,它应该以接口的方式发布功能,而应用程序的其他部分需要通过接口 ...

  4. SpringBoot系列之JDBC数据访问

    SpringBoot系列之JDBC数据访问 New->Project or Module->Spring Initializer 选择JDBC和mysql驱动,为了方便测试web等等也可以 ...

  5. 06.深入浅出 Spring Boot - 数据访问之Druid

    代码下载:https://github.com/Jackson0714/study-spring-boot.git 一.Druid是什么? 1.Druid是数据库连接池,功能.性能.扩展性方面都算不错 ...

  6. 07.深入浅出 Spring Boot - 数据访问之Mybatis(附代码下载)

    MyBatis 在Spring Boot应用非常广,非常强大的一个半自动的ORM框架. 代码下载:https://github.com/Jackson0714/study-spring-boot.gi ...

  7. Spring ( 五 )Spring之数据访问与事务管理

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.Spring之数据访问 1.Spring数据访问工程环境搭建 ​ jdbc.properties配置 ...

  8. Spring Boot数据访问之动态数据源切换之使用注解式AOP优化

    在Spring Boot数据访问之多数据源配置及数据源动态切换 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中详述了如何配置多数据源及多数据源之间的动态切换.但是需要读数据库的地方,就 ...

  9. Spring Boot数据访问之多数据源配置及数据源动态切换

    如果一个数据库数据量过大,考虑到分库分表和读写分离需要动态的切换到相应的数据库进行相关操作,这样就会有多个数据源.对于一个数据源的配置在Spring Boot数据访问之数据源自动配置 - 池塘里洗澡的 ...

随机推荐

  1. linux中断源码分析 - 概述(一)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 关于中断和异常 一般在书中都会把中断和异常一起说明,因为它们具有相同的特点,同时也有不同的地方.在CPU里,中断 ...

  2. jquery ajax超时设置(转载)

    var ajaxTimeoutTest = $.ajax({ url:'', //请求的URL timeout : 1000, //超时时间设置,单位毫秒 type : 'get', //请求方式,g ...

  3. Luogu2839 Middle 主席树、二分答案

    题目传送门:https://www.luogu.org/problemnew/show/P2839 题目大意:给出一个长度为$N$的序列与$Q$次询问,每次询问左端点在$[a,b]$,右端点在$[c, ...

  4. Vue-详解设置路由导航的两种方法: <router-link :to="..."> 和router.push(...)

    一.<router-link :to="..."> to里的值可以是一个字符串路径,或者一个描述地址的对象.例如: // 字符串 <router-link to= ...

  5. C#批量插入数据到Sqlserver中的四种方式 - 转

    先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生成一个GUID算法所花的时间肯定比你从数据表中重新查询上一条记 ...

  6. [Oracle]为何Archivelog 没有马上被删除

    [Oracle]为何Archivelog 没有马上被删除 客户设置了 Archivelog 的 deletion policy 是 CONFIGURE ARCHIVELOG DELETION POLI ...

  7. LNMP V1.4一键快速部署Let's Encrypt免费SSL证书

    老左年前在"军哥LNMP V1.4测试版一键脚本安装以及功能上的升级体验"已经简单的体验到目前还没有正式版本的V1.4版本,理论上会在今年儿童节正式上线.从体验和实际的版本变动文档 ...

  8. Ubuntu轻松编译openJDK

    花了三天在windows上搞openJDK,对bash本来就不熟,加上各种莫名依赖和脚本里的bug,身心俱疲.最后make all的时候产生一个莫名其妙的错误说什么有warning且-Werror置为 ...

  9. Session配置之WebApi支持

    1.在WebApiConfig中建立建立HttpControllerHandler和HttpControllerRouteHandler 并覆写它 public class SessionRouteH ...

  10. easyui datagrid remoteSort的实现 Controllers编写动态的Lambda表达式 IQueryable OrderBy扩展

    EF 结合easy-ui datagrid 实现页面端排序 EF动态编写排序Lambda表达式 1.前端页面 var mainListHeight = $(window).height() - 20; ...