Spring JDBC 数据访问

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
创建角色表:

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

1.3 测试代码

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

2. Spring管理JdbcTemplate

1. 创建Role.java

1 public class Role {
2 private Integer cid;
3 private String rname;
4 private String alias;
5 //setter getter
6 }

2. RoleDao.java

 1 public interface RoleDao {
 2 //增
 3 void save(Role role);
 4 //删除
 5 void delete(Integer id);
 6 //改
 7 void update(Role role);
 8 //查
 9 Role getById(Integer id);
10 //查
11 int getTotalCount();
12 //查
13 List<Role> getAll();
14 }

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代码:

 1 public class RoleDaoImpl extends JdbcDaoSupport implements RoleDao {
 2 public void save(Role role) {
 3 //TODO 插入数据
 4 String sql = "INSERT INTO role (rname,alias) value (?,?) ;";
 5 getJdbcTemplate().update(sql,role.getRname(),role.getAlias());
 6 }
 7 public void delete(Integer id) {
 8 //TODO 根据id删除
 9 String sql = "delete from role where rid = ? ;";
10 getJdbcTemplate().update(sql,id);
11 }
12 public void update(Role role) {
13 //TODO 修改role信息
14 String sql="update role set rname = ? , alias = ? where rid = ? ;" ;
15 getJdbcTemplate().update(sql,role.getRname(),role.getAlias(),role.getRid());
16 }
17 public Role getById(Integer id) {
18 String sql = "select * from role where rid = ? ;";
19 //直接查询
20 // Role role = getJdbcTemplate().queryForObject(sql, new Object[]{id}, Role.class);
21 Role role = (Role) getJdbcTemplate().queryForObject(sql, new Object[]{id}, new
22 RowMapper<Object>() {
23 public Object mapRow(ResultSet resultSet, int index) throws SQLException {
24 //将一行数据解析成一个java对象
25 return mapRowHandler(resultSet);
26 }
27 });
28 return role;
29 }
30 public int getTotalCount() {
31 String sql = "select count(*) from role ;";
32 Integer count = getJdbcTemplate().queryForObject(sql,Integer.class);
33 return count;
34 }
35 //查询所有
36 public List<Role> getAll() {
37 String sql = "select * from role";
38 List<Role> list = getJdbcTemplate().query(sql, new RowMapper<Role>() {
39 public Role mapRow(ResultSet resultSet, int i) throws SQLException {
40 return mapRowHandler(resultSet);
41 }
42 });
43 return list;
44 }
45 private Role mapRowHandler(ResultSet resultSet) throws SQLException{
46 Role role = new Role();
47 role.setRid(resultSet.getInt("rid"));
48 role.setRname(resultSet.getString("rname"));
49 role.setAlias(resultSet.getString("alias"));
50 return role;
51 }
52 }

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文件夹下

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4 xmlns:context="http://www.springframework.org/schema/context"
 5 xmlns:p="http://www.springframework.org/schema/p"
 6 xsi:schemaLocation="
 7 http://www.springframework.org/schema/beans
 8 http://www.springframework.org/schema/beans/spring-beans.xsd
 9 http://www.springframework.org/schema/context
10 http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions
11 here -->
12 <context:component-scan base-package="com.itqf.spring"></context:component-scan>
13 <context:property-placeholder location="db.properties"></context:property-
14 placeholder>
15 <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
16 p:jdbcUrl="${jdbc.jdbcUrl}"
17 p:driverClass="${jdbc.driverClass}"
18 p:user="root"
19 p:password="111"
20 />
21 <!-- bean jdbcTemplate -->
22 <bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
23 <property name="dataSource" ref="dataSource"/>
24 </bean>
25 <bean name="roleDao" class="com.itqf.spring.dao.impl.RoleDaoImpl">
26 <property name="jdbcTemplate" ref="jdbcTemplate"/>
27 </bean>
28 </beans>

测试:

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

原文地址:https://www.cnblogs.com/sueyyyy/p/9277246.html

时间: 2024-08-06 19:39:55

Spring JDBC 数据访问的相关文章

Spring04-SpringEL&amp;Spring JDBC数据访问

一. SpringEL入门 Spring动态语言(简称SpEL) 是一个支持运行时查询和操作对象图的强大的动态语言,语法类似于EL表达式,具有诸如显示方法和基本字符串模板函数等特性. 1. 准备工作 项目:spring-el 2. 需要导入jar包 spring-expression.jar maven项目pom文件添加: 1 <dependency> 2 <groupId>org.springframework</groupId> 3 <artifactId&g

Spring Boot 数据访问集成 MyBatis

对于软件系统而言,持久化数据到数据库是至关重要的一部分.在 Java 领域,有很多的实现了数据持久化层的工具和框架(ORM).在 Java 应用程序中,ORM 框架的本质是简化编程中操作数据库的繁琐性,比如可以根据对象生成 SQL 的 Hibernate ,后面 Hibernate 也实现了JPA 的规范,使用 JPA 的方式只需要几行代码即可实现对数据的访问和操作:MyBatis 的前身是 IBATIS 是一个简化和实现了 Java 数据持久化层的开源框架,可以灵活调试 SQL , MyBat

Spring的数据访问---------------事务管理

ThreadLocal ThreadLocal为每一个使用该变量的线程分配一个变量副本,所以每一个线程在改变自己的副本时,不会改变其他线程的副本信息.该类主要包含四个方法: public void set(Object obj) public Object get() public void remove() protected Object InitialValue() package thread; public class ThreadLocalTest { private static

Java Spring JDBC代理访问

一.首先采用org.springframework.jdbc.datasource.DriverManagerDataSource类进行实现 1.applicationContext.xml配置如下: <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassNa

Java面试--Spring技术要点--Spring数据访问

24  Spring对DAO的支持 Spring对数据访问对象(DAO)的支持旨在简化它和数据访问技术如JDBC,Hibernateor JDO 结合使用.这使我们可以方便切换持久层.编码时也不用担心会捕获每种技术特有的异常. 优化了的异常类型体系:细化了数据访问异常,丰富了异常类型.(都是 Unchecked Exception,这种异常不会变动,采用同一种异常,表示同一种现象,与使用的持久化技术无关) 使用模板回调模式,开发者不再写模式化代码,简化编程: 不变:资源的获取,资源的释放,异常转

Spring数据访问和事务

1.模型 2.解耦 3.实现 3.1 核心接口 3.2 代码分析 3.2.1 事务管理 3.2.2 数据访问 4.使用 4.1 编程模式 4.2 配置模式 4.2.1 声明式配置方式 4.2.2 注解式配置方式 5.总结 1.模型 在一般的编程习惯中,Spring的数据访问和事务处理的层次结构归纳如下图所示: 图. 1 2.解耦 Spring事务作为一个独立的组件,其目的就是为了与数据访问组件进行分离,这也是Spring事务框架设计的原则.根据这一职责清晰的原则,Spring在设计时就对事务和数

Spring+JDBC基础

1.Spring对DAO技术提供了那些支持Spring对JDBC等数据库访问技术编写DAO提供以下几个重要支持Spring对DAO异常提供了统一处理Spring对DAO编写提供了支持的抽象类提高编程效率,减少JDBC编码量 2.Spring对DAO异常支持Spring把特定某种技术的异常,如SQLException,统一装换为自己的异常类型,这些异常以DataAccessException为父类,它们封装了原始异常对象,不会丢失原始错误信息DataAccessException继承于Runtim

在Spring中基于JDBC进行数据访问时如何控制超时

超时分类 超时根据作用域可做如下层级划分: Transaction Timeout > Statement Timeout > JDBC Driver Socket Timeout Transaction Timeout指一组SQL操作执行时应在设定的时间内完成(提交或回滚),否则将引发超时.它的值应大于 N(语句数) * Statement Timeout Statement Timeout指完成单条SQL语句执行的最大允许时间.它的值应小于JDBC Driver Socket Timeou

Spring 4 官方文档学习(十)数据访问之JDBC

1.Spring框架JDBC的介绍 Spring JDBC - who does what? 动作 Spring 你 定义连接参数   是 打开连接 是   指定SQL语句   是 声明参数,提供参数值   是 准备.执行语句 是   迭代结果(如果有) 是   操作每个迭代   是 处理任何异常 是   处理事务 是   关闭连接.语句.结果集 是   一句话,Spring框架负责所有的低级别细节操作. 1.1.选择JDBC数据库访问的路径 所有的路径都需要兼容JDBC 2.0的驱动,部分特性