`
weitao1026
  • 浏览: 1053179 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring JdbcTemplate详解

 
阅读更多

JdbcTemplate简介

  Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。

  JdbcTemplate位于中。其全限定命名为org.springframework.jdbc.core.JdbcTemplate。要使用JdbcTemlate还需一个这个包包含了一下事务和异常控制

  

JdbcTemplate主要提供以下五类方法:

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

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

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

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

 

下面进行案件分析

 

在src下面新建一个属性配置文件

1 jdbc.user=root
2 jdbc.password=123456
3 jdbc.driverClass=com.mysql.jdbc.Driver
4 jdbc.jdbcUrl=jdbc\:mysql\:///test

  我们通常将数据库的配置信息单独放到一个文件中,这样也为了方便后期维护

 

配置Spring配置文件applicationContext.xml

复制代码
 1 <context:property-placeholder location="classpath:db.properties"/>
 2 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
 3     <property name="user" value="${jdbc.user}"></property>
 4     <property name="password" value="${jdbc.password}"></property>
 5     <property name="driverClass" value="${jdbc.driverClass}"></property>
 6     <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
 7 </bean>
 8 
 9 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
10     <property name="dataSource" ref="dataSource"></property>
11 </bean>
复制代码

  第一行代码:用来读取db.properties文件中的数据。

  第二行代码:用来配置一个数据源,这里数据实现类来自C3P0中的一个属性类。其中属性的值就是来自于db.properties

  第九行代码:配置一个JdbcTemplate实例,并注入一个dataSource数据源

 

测试代码

 

1、update()方法

 

a、通过update插入数据

复制代码
1 //启动IoC容器
2 ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
3 //获取IoC容器中JdbcTemplate实例
4 JdbcTemplate jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate");
5 String sql="insert into user (name,deptid) values (?,?)";
6 int count= jdbcTemplate.update(sql, new Object[]{"caoyc",3});
7 System.out.println(count);
复制代码

  这里update方法,第二参可以为可变参数。在数据库中可以看到,数据以被正确插入

 

b、通过update修改数据

1 String sql="update user set name=?,deptid=? where id=?";
2 jdbcTemplate.update(sql,new Object[]{"zhh",5,51});

 

 c、通过update删除数据

1 String sql="delete from user where id=?";
2 jdbcTemplate.update(sql,51);

 

2、batchUpdate()批量插入、更新和删除方法

a、批量插入

复制代码
1 String sql="insert into user (name,deptid) values (?,?)";
2 
3 List<Object[]> batchArgs=new ArrayList<Object[]>();
4 batchArgs.add(new Object[]{"caoyc",6});
5 batchArgs.add(new Object[]{"zhh",8});
6 batchArgs.add(new Object[]{"cjx",8});
7 
8 jdbcTemplate.batchUpdate(sql, batchArgs);
复制代码

  batchUpdate方法第二参数是一个元素为Object[]数组类型的List集合

 

3、从数据中读取数据到实体对象

  先定一个User实体类

 

复制代码
 1 package com.proc;
 2 
 3 public class User {
 4     private Integer id;
 5     private String name;
 6     private Integer deptid;
 7     public Integer getId() {
 8         return id;
 9     }
10     public void setId(Integer id) {
11         this.id = id;
12     }
13     public String getName() {
14         return name;
15     }
16     public void setName(String name) {
17         this.name = name;
18     }
19     public Integer getDeptid() {
20         return deptid;
21     }
22     public void setDeptid(Integer deptid) {
23         this.deptid = deptid;
24     }
25 
26     public String toString() {
27         return "User [id=" + id + ", name=" + name + ", deptid=" + deptid + "]";
28     }
29 }
复制代码

 

 

a、读取单个对象

1 String sql="select id,name,deptid from user where id=?";
2 
3 RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
4 User user= jdbcTemplate.queryForObject(sql, rowMapper,52);
5 System.out.println(user);

  输出结果:

  User [id=52, name=caoyc, deptid=6]

 

【注意】:1、使用BeanProperytRowMapper要求sql数据查询出来的列和实体属性需要一一对应。如果数据中列明和属性名不一致,在sql语句中需要用as重新取一个别名

     2、使用JdbcTemplate对象不能获取关联对象

 

b、读取多个对象

复制代码
1 String sql="select id,name,deptid from user";
2 
3 RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
4 List<User> users= jdbcTemplate.query(sql, rowMapper);
5 for (User user : users) {
6     System.out.println(user);
7 }
复制代码

 

输出结果

...

User [id=49, name=姓名49, deptid=5]
User [id=50, name=姓名50, deptid=8]
User [id=52, name=caoyc, deptid=6]
User [id=53, name=zhh, deptid=8]
User [id=54, name=cjx, deptid=8]

---

 

c、获取某个记录某列或者count、avg、sum等函数返回唯一值

1 String sql="select count(*) from user";
2 
3 int count= jdbcTemplate.queryForObject(sql, Integer.class);
4 System.out.println(count);

 

 

在实际开发中可以怎样用

UserDao.java

复制代码
 1 package com.proc;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 5 import org.springframework.jdbc.core.JdbcTemplate;
 6 import org.springframework.jdbc.core.RowMapper;
 7 import org.springframework.stereotype.Repository;
 8 
 9 @Repository
10 public class UserDao {
11 
12     @Autowired
13     private JdbcTemplate jdbcTemplate;
14     
15     public User get(int id){
16         String sql="select id,name,deptid from user where id=?";
17         RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
18         return jdbcTemplate.queryForObject(sql, rowMapper,id);
19     }
20 }
复制代码

 

xml配置:

复制代码
 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:aop="http://www.springframework.org/schema/aop"
 5     xmlns:context="http://www.springframework.org/schema/context"
 6     xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
 7         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 8         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
 9 
10 <context:component-scan base-package="com.proc"></context:component-scan>
11 <context:property-placeholder location="classpath:db.properties"/>
12 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
13     <property name="user" value="${jdbc.user}"></property>
14     <property name="password" value="${jdbc.password}"></property>
15     <property name="driverClass" value="${jdbc.driverClass}"></property>
16     <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
17 </bean>
18 
19 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
20     <property name="dataSource" ref="dataSource"></property>
21 </bean>
22 </beans>
复制代码

 

代码测试

1 UserDao userDao=(UserDao) ctx.getBean("userDao");
2 System.out.println(userDao.get(53));
分享到:
评论

相关推荐

    Spring JdbcTemplate方法详解

    JdbcTemplate主要提供以下五类方法;JdbcTemplate类支持的回调类;并附例子

    Spring JdbcTemplate整合使用方法及原理详解

    Spring JdbcTemplate 整合使用方法及原理详解 Spring JdbcTemplate 是 Spring 框架中的一部分,提供了一个简单的方式来与数据库进行交互。它可以帮助开发者快速地执行数据库操作,无需关心底层的 JDBC 详细实现。...

    Spring-JdbcTemplate

    ### Spring-JdbcTemplate详解 #### 一、Spring框架与JdbcTemplate概览 Spring框架是一个开源的轻量级Java应用开发框架,旨在简化企业级应用的开发。其核心特性包括依赖注入(Dependency Injection,DI)、面向切面...

    day4-Spring JdbcTemplate & 声明式事务.md

    ### Spring JdbcTemplate与声明式事务知识点详解 #### JdbcTemplate基本使用概述 JdbcTemplate是Spring框架提供的用于简化JDBC API操作的对象。它通过提供一个高级抽象层来减少编码工作量,并帮助开发者避免处理...

    Spring--JdbcTemplate.pdf

    描述中提到的"一图详解(脑图)"意味着文档中可能包含了一个清晰的图示,这个图示将详细展示JdbcTemplate在Spring中的使用过程和相关组件的交互。这样的图示对于理解JdbcTemplate的工作原理以及如何在项目中实际应用它...

    Spring的JDBCTemplate

    ### Spring的JDBCTemplate详解 #### 一、引言 在Java开发中,当我们面临复杂的数据库操作需求时,往往需要一种既能满足性能又能保证代码简洁性的解决方案。Spring框架提供的`JDBCTemplate`就是一个非常实用且强大...

    基于Spring MVC, Spring, JdbcTemplate的学生信息管理系统.zip

    《基于Spring MVC、Spring、JdbcTemplate的学生信息管理系统详解》 在信息技术高度发展的今天,信息管理系统已经成为各类组织管理和处理数据的核心工具。本项目“基于Spring MVC、Spring、JdbcTemplate的学生信息...

    图书管理系统( Spring+Spring MVC+JdbcTemplate).rar

    《图书管理系统:基于Spring+SpringMVC+JdbcTemplate的实现详解》 图书管理系统是信息化建设中的重要组成部分,它能够高效地管理和维护图书馆的资源,提供便捷的服务给读者和管理员。本系统采用主流的Spring框架、...

    详解在spring中使用JdbcTemplate操作数据库的几种方式

    在Spring框架中,JdbcTemplate是用于简化数据库操作的工具,它提供了一种声明式的方式处理SQL,降低了数据库访问的复杂性。本篇文章将详细介绍如何在Spring中使用JdbcTemplate进行数据库操作,包括设置依赖、创建...

    easyframework-data:基于 Spring JdbcTemplate 的数据访问框架

    EasyFramework-Data 是一个基于 Spring JdbcTemplate 的轻量级数据访问框架,它简化了数据库操作,提供了更加简洁、安全的API,旨在提高开发效率,降低项目中的数据库访问复杂性。这个框架适用于使用Java语言进行...

    Spring Boot详解

    Spring Boot详解 Spring框架自2003年发布以来,经历了多次重大版本更新,逐渐从一个繁琐的XML配置时代进化到现在的简洁、自动化配置的Java配置时代。Spring Boot的出现,更是极大地简化了Spring应用的初始搭建以及...

    Spring笔记之整合JdbcTemplate.doc

    ### Spring与JdbcTemplate整合详解 #### 一、JdbcTemplate简介及使用 **1.1 JdbcTemplate概述** JdbcTemplate是Spring框架中的一个重要组成部分,它提供了一种简单而强大的方式来访问数据库,通过封装JDBC API,...

    spring入门详解.rtfd.zip

    Spring框架是Java开发中最常用的轻量级框架之一,它的出现极大地简化了企业级应用的开发。本教程将从零开始,逐步带...通过这个“Spring入门详解”教程,你将能深入理解Spring的核心概念,并掌握如何在实践中运用它们。

    spring框架技术详解及使用指导(电子书PDF)

    5. **模版**:Spring提供了诸如JdbcTemplate、JmsTemplate等模板类,简化了数据库和消息队列的操作。 6. **Spring Boot**:近年来,Spring Boot成为了快速开发Spring应用的首选,它通过默认配置、自动配置和起步...

    spring接管jdbc详解

    Spring 接管 JDBC 详解 Spring 框架中提供了对 JDBC 的支持,使得开发者可以更方便地访问数据库。在本文中,我们将详细介绍 Spring 是如何接管 JDBC 的,并提供一个简单的示例来展示如何使用 Spring 来访问数据库。...

    spring 所有功能详解

    ### Spring七大功能详解 #### 一、核心容器(Spring Core) **核心容器**提供了Spring框架的基础功能,通过Bean的方式组织和管理Java应用中的各种组件及其之间的关系。在Spring框架中,Bean Factory扮演着核心角色...

    spring2.0和spring2.5 及以上版本的jar包区别 spring jar 包详解

    ### Spring2.0与Spring2.5及以上版本的jar包区别及spring jar包详解 #### 概述 Spring框架作为一款流行的Java应用开发框架,在不同的版本之间,其提供的功能、性能以及兼容性等方面都有所差异。本文将重点介绍...

    SSM框架教程Spring+SpringMVC+MyBatis全覆盖_Java热门框架视频教程

    5、Spring JDBCTemplate的基本使用 6、Spring AOP的介绍及其配置使用 7、Spring的声明式事务控制 8、SpringMVC的介绍及其快速入门 9、SpringMVC的数据请求和响应 10、SpringMVC的异常处理及其拦截器 11、MyBatis简介...

Global site tag (gtag.js) - Google Analytics