zoukankan      html  css  js  c++  java
  • Spring整合jdbc编程

    一、Spring对Jdbc的支持

        Spring为了提供对Jdbc的支持,在Jdbc API的基础上封装了一套实现,以此建立一个 JDBC 存取框架。

      作为 Spring JDBC 框架的核心, JDBC 模板的设计目的是为不同类型的 JDBC 操作提供模板方法. 每个模板方法都能控制整个过程, 并允许覆盖过程中的特定任务. 通过这种方式, 可以在尽可能保留灵活性的情况下, 将数据库存取的工作量降到最低.

    二、传统的Jdbc实现

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

    public void save() {
            try {
                String sql = "insert into aa(id,name) values(3,'happy');";
                Connection con = null;
                Statement stmt = null;
                Class.forName("com.mysql.jdbc.Driver");
                // 连接对象
                con = DriverManager.getConnection("jdbc:mysql://localhost:3306/kk", "root", "123456");
                // 执行命令对象
                stmt =  con.createStatement();
                // 执行
                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是线程安全类

      步骤1.配置Spring+JDBC配置文件

    <?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:util="http://www.springframework.org/schema/util"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        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
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop.xsd
            ">
            
            <!-- 1、声明数据源对象:C3P0连接池 -->
            <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
                <!-- 加载jdbc驱动 -->
                <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
                <!-- jdbc连接地址 -->
                <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/kk"></property>
                <!-- 连接数据库的用户名 -->
                <property name="user" value="root"></property>
                <!-- 连接数据库的密码 -->
                <property name="password" value="123456"></property>
                <!-- 数据库的初始化连接数 -->
                <property name="initialPoolSize" value="3"></property>
                <!-- 数据库的最大连接数 -->
                <property name="maxPoolSize" value="10"></property>
                <!-- 数据库最多执行的事务 -->
                <property name="maxStatements" value="100"></property>
                <!-- 连接数量不够时每次的增量 -->
                <property name="acquireIncrement" value="2"></property>           
            </bean>
            
            <!--  创建jdbcTemplate对象 -->
            <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
                <property name="dataSource" ref="dataSource">
                </property>
            </bean>
            
            <bean id="jdbcUser" class="com.jyk.spring.jdbc.JdbcUser">
                <property name="jdbcTemplate" ref="jdbcTemplate">
                </property>
            </bean>
            
    </beans>

      步骤2.通过jdbcTemplate编写对业务的增删改查操作

    package com.jyk.spring.jdbc;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.List;
    import java.util.Map;
    
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.core.RowMapper;
    
    public class JdbcUser {
        
        private JdbcTemplate jdbcTemplate;    
    
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }
    
        public void save()
        {
            String sql = "insert into aa(id,name) values ('4','admin4')";
            //使用jdbc模板工具类来简化数据库执行前的操作
            jdbcTemplate.update(sql);
        }
        
        public person queryById(String id)
        {
            String sql = "select s.name from aa s where s.id=?";
            Map<String, Object> map = jdbcTemplate.queryForMap(sql, id);
            System.out.println(map);
            return null;
        }
        
        public List<person> queryAll()
        {
            String sql = "select * from aa";
            return jdbcTemplate.query(sql, new RowMapper<person>(){
    
                @Override
                public person mapRow(ResultSet rs, int index) throws SQLException {
                    person p = new person();
                    p.setId(rs.getInt("id"));
                    p.setName(rs.getString("name"));
                    return p;
                }});
        }
    }

      RowMapper的使用:在Jdbc的操作中,有很多情况下是要将ResultSet里的数据封装到一个持久化Bean里,再把持久化Bean封装到集合中。这样会造成大量的代码的重复,不利于代码重用。而RowMapper正好解决了这个问题。

  • 相关阅读:
    mysql修改数据表名
    HDU 5742 It's All In The Mind (贪心)
    HDU 5752 Sqrt Bo (数论)
    HDU 5753 Permutation Bo (推导 or 打表找规律)
    HDU 5762 Teacher Bo (暴力)
    HDU 5754 Life Winner Bo (博弈)
    CodeForces 455C Civilization (并查集+树的直径)
    CodeForces 455B A Lot of Games (博弈论)
    CodeForces 455A Boredom (DP)
    HDU 4861 Couple doubi (数论 or 打表找规律)
  • 原文地址:https://www.cnblogs.com/jiyukai/p/9386183.html
Copyright © 2011-2022 走看看