一、Spring对JDBC的支持

  Spring提供了很多模板整合Dao技术

  

  与JDBC的整合中,Spring中提供了一个可以操作数据库的对象——JdbcTemplate,该对象封装了JDBC技术,与DBUtils中的QueryRunner非常相似。

二、传统的Jdbc实现

  如下为传统的Jdbc实现,该实现有两个明显的缺点就是(1)需要自己管理连接 (2)Jdbc操作重复代码封装与编写

public void save(){
try {
Class.forName("com.mysql.jdbc.Driver");
// 连接对象
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/crm", "root", "root");
// 通过Connection得到Statement对象
Statement stmt = con.createStatement();
// 使用Statement发送sql语句
String sql = "insert into cst_user(user_id,user_name) values(2,'lisi');";
stmt.execute(sql);
// 关闭
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}

三、Spring+Jdbc实现

  相比于传统的Jdbc实现,在Jdbc API的基础上封装了一套实现JdbcTemplate,JdbcTemplate的优点如下:

  (1)配置基于模板设置

  (2)完成了资源的创建和释放的工作

  (3)完成了对JDBC的核心流程的工作,包括SQL语句的创建和执行,简化了对JDBC的操作

  (4)仅需要传递DataSource就可以把它实例化

  (5)JdbcTemplate只需要创建一次,减少了代码复用的烦恼

  (6)JdbcTemplate是线程安全类

  JdbcTemplate的使用步骤如下:

  第一步:导包

    

  第二步:书写DAO

  • 增删改

    // JdbcDaoSupport:根据连接池创建JDBC模板
    public class UserDaoImpl extends JdbcDaoSupport implements UserDao { // 增
    public void save(User user) {
    String sql = "insert into cst_user(user_id,user_name) value(null,?)";
    super.getJdbcTemplate().update(sql,user.getName());
    } // 删
    public void delete(Integer id) {
    String sql = "delete from cst_user where user_id=?";
    super.getJdbcTemplate().update(sql, id);
    } // 改
    public void update(User user) {
    String sql = "update cst_user set user_name=? where user_id=?";
    super.getJdbcTemplate().update(sql, user.getName(),user.getId());
    }
    }
  • 查询单个对象
      // 查询单个对象
    public User getById(Integer id){
    String sql = "select * from cst_user where user_id=?";
    return super.getJdbcTemplate().queryForObject(sql, new RowMapper<User>(){
    @Override
    public User mapRow(ResultSet rs, int arg1) throws SQLException {
    User user = new User();
    user.setId(rs.getInt("user_id"));
    user.setName(rs.getString("user_name"));
    return user;
    }
    },id);
    }
  • 查询值类型
        // 查询值类型
    public int getTotalCount() {
    String sql = "select count(*) from cst_user";
    Integer count = super.getJdbcTemplate().queryForObject(sql, Integer.class);
    return count;
    }
  • 查询list集合类型
       // 查询list集合类型
    public List<User> getAll() {
    String sql = "select * from cst_user";
    List<User> list = super.getJdbcTemplate().query(sql, new RowMapper<User>() {
    @Override
    public User mapRow(ResultSet rs, int arg1) throws SQLException {
    User user = new User();
    user.setId(rs.getInt("user_id"));
    user.setName(rs.getString("user_name"));
    return user;
    }
    });
    return list;
    }

  第三步:准备db.properties

jdbc.jdbcUrl=jdbc:mysql:///crm
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=root  

  第四步:配置applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd "> <!-- 指定spring读取db.properties -->
<context:property-placeholder location="classpath:db.properties"/> <!-- 1.将连接池放入spring容器 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"/>
</bean> <!-- 2.将JDBCTemplate放入spring容器 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean> <!-- 3.将UserDao放入spring容器 -->
<bean id="userDao" class="cn.itcast.dao.impl.UserDaoImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>

  第五步:测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Demo {
@Resource(name="userDao")
private UserDao userDao; @Test
public void fun1() throws Exception {
User user = new User();
user.setName("tom");
userDao.save(user);
}
}

参考资料:https://www.cnblogs.com/jiyukai/p/9386183.html

Spring学习笔记(五)—— Spring整合JDBC的更多相关文章

  1. Java架构师之路 Spring学习笔记(一) Spring介绍

    前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...

  2. spring学习笔记(一) Spring概述

    博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书.  强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...

  3. Spring 学习笔记(2) Spring Bean

    一.IoC 容器 IoC 容器是 Spring 的核心,Spring 通过 IoC 容器来管理对象的实例化和初始化(这些对象就是 Spring Bean),以及对象从创建到销毁的整个生命周期.也就是管 ...

  4. Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(二:mybatis整合spring)

    http://blog.csdn.net/qq598535550/article/details/51703190 二.Spring整合mybatis其实是在mybatis的基础上实现Spring框架 ...

  5. Spring学习笔记五:Spring进行事务管理

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6776256.html  事务管理主要负责对持久化方法进行统一的提交或回滚,Spring进行事务管理即我们无需在 ...

  6. [Spring学习笔记 6 ] Spring JDBC 详解

    项目使用maven管理,pom.xml和项目组织如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...

  7. Spring学习笔记:spring整合web之spring-web架包的引用(WebApplicationContextUtils注入容器)

    WebApplicationContextUtils 一.Spring整合web之前 案例:给部门列表添加新部门 import org.apache.log4j.Logger; import org. ...

  8. Spring学习笔记:spring与mybatis四种整合方法

    1.采用数据映射器(MapperFactoryBean)的方式,不用写mybatis映射文件,采用注解方式提供相应的sql语句和输入参数.  (1)Spring配置文件: <!-- 引入jdbc ...

  9. Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(一:知识点回顾)

    一.知识点回顾 1.Mybatis环境搭建(DAO层的实现)(使用maven项目管理工具) 需要引入的依赖包: <!-- 单元测试junit --> <dependency> ...

  10. Spring学习笔记:Spring整合Mybatis学习PPT(三:整合思路)

    三.Spring-Mybatis的整合思路

随机推荐

  1. 刷题向》DP》关于基础DP(easy)

    openjudge  8464 这道题其实很简单,算是DP的基础题,比较适合开拓DP思维. 题目比较有欺骗性,其实稍微想想就可以解决,因为题意说第一次卖出后才能买入,所以我们可以考虑枚举断点,所以题目 ...

  2. 使用Layered Window遇到的一些问题及解决方法

    1. 使用Layered Window需要设置 WS_EX_LAYERED 属性 2.  Layered Window不能作为Child Window 3. 它也不能包含子窗口,为什么呢,因为它收不到 ...

  3. Map-making Robots: A Review of the Occupancy Grid Map Algorithm

    栅格地图算法:http://www.ikaros-project.org/articles/2008/gridmaps/

  4. Django框架 之 Auth用户认证

    Django框架 之 Auth用户认证 浏览目录 auth模块 user对象 一.auth模块 1 from django.contrib import auth django.contrib.aut ...

  5. JAVA的编码转换测试

    package test; import java.io.UnsupportedEncodingException; /** * * @author jim */ public class Test ...

  6. LibreOJ 6278 数列分块入门 2(分块)

     题解:非常高妙的分块,每个块对应一个桶,桶内元素全部sort过,加值时,对于零散块O(sqrt(n))暴力修改,然后暴力重构桶.对于大块直接整块加.查询时对于非完整块O(sqrt(n))暴力遍历.对 ...

  7. 迷宫救人——DFS小题

    原创 题目大意:人质被困在迷宫之中,要求你寻找一条最短路径快速找到人质. 如图,人质在黄色点2处,营救者在起点红色处,1表示无法通过的障碍点,寻找一条最短路径快速找到人质. 毫无疑问用DFS,遍历4个 ...

  8. DFS小题

    原创 题目为:()()()+()()()=()()() 将1~9这9个数字填入括号,每个数字只能用一次. 枚举: public class Test { public static void main ...

  9. java类创建时里面成员执行的先后顺序

    静态代码块在类第一次使用的时候执行一次,在构造函数执行之前执行.只要用到类,哪怕new对象(比如只声明变量)也会被执行,且只执行一次.一般用于对类进行初始化. 先执行静态代码块,静态成员(谁在前就先执 ...

  10. docker 镜像 容器删除

    Docker 容器镜像删除   1.停止所有的container,这样才能够删除其中的images: docker stop $(docker ps -a -q) 如果想要删除所有container的 ...