• Spring 对JDBC操作的支持


    1.Spring 对JDBC操作的支持

    Spring对jdbc技术提供了很好的支持,体现在:
    1.Spring对c3p0连接池的支持很完善
    2.Spring对jdbc提供了jdbcTemplate,来简化jdbc操作,jdbcTemplate是模板工具类,类似于dbutils组件

    使用步骤:
    1.引入jar文件

    • spring-jdbc-3.2.5.RELEASE.jar
    • spring-tx-3.2.5.RELEASE.jar

    2.优化
    优化,我们从最开始基本的jdbc使用方法UserDao01.java开始优化,到使用spring创建对象和连接UserDao02.java,再到使用jdbcTemplate来优化UserDao02.java

    其余的代码主要是一个bean对象,和配置文件,以及测试类
    bean对象:Dept.java

    public class Dept {
    
        private int deptId;
        private String deptName;
        public int getDeptId() {
            return deptId;
        }
        public void setDeptId(int deptId) {
            this.deptId = deptId;
        }
        public String getDeptName() {
            return deptName;
        }
        public void setDeptName(String deptName) {
            this.deptName = deptName;
        }
    
    }
    

    最原始的使用jdbc连接数据库:UserDao01.java

    public class UserDao01 {
    
    
        /*
         *  保存方法
         *  需求优化的地方:
         *  	1. 连接管理
         *  	2. jdbc操作重复代码封装
         */
        public void save() {
            try {
                String sql = "insert into t_dept(deptName) values('test');";
                Connection con = null;
                Statement stmt = null;
                Class.forName("com.mysql.jdbc.Driver");
                // 连接对象
                con = DriverManager.getConnection("jdbc:mysql:///db", "root", "root");
                // 执行命令对象
                stmt =  con.createStatement();
                // 执行
                stmt.execute(sql);
    
                // 关闭
                stmt.close();
                con.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    对于这里的方法,我们可以从两方面来优化,分别是数据库的连接管理(使用xml配置)和jdbc操作重复代码封装(对象的创建使用Spring)

    初步优化之后的方法:UserDao02.java

    public class UserDao02 {
    
        // IOC容器注入
        private DataSource dataSource;
        public void setDataSource(DataSource dataSource) {
            this.dataSource = dataSource;
        }
    
    
        public void save() {
            try {
                String sql = "insert into t_dept(deptName) values('test');";
                Connection con = null;
                Statement stmt = null;
                // 连接对象
                con = dataSource.getConnection();
                // 执行命令对象
                stmt =  con.createStatement();
                // 执行
                stmt.execute(sql);
    
                // 关闭
                stmt.close();
                con.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    现在的方法还是需要连接操作和执行以及关闭操作,再次优化,使用jdbcTemplate进行优化,如果要使用jdbcTemplate优化,需要先创建这个对象,这里在bean.xml中用Spring来创建
    优化后的UserDao.java

    public class UserDao {
    
        // IOC容器注入
    //	private DataSource dataSource;
    //	public void setDataSource(DataSource dataSource) {
    //		this.dataSource = dataSource;
    //	}
    
        private JdbcTemplate jdbcTemplate;
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }
    
    
        //使用jdbc模板工具类简化jdbc操作
        public void save() {
            String sql = "insert into t_dept(deptName) values('test');";
    
            jdbcTemplate.update(sql);
        }
    
        public Dept findById(int id) {
            String sql = "select * from t_dept where deptId=?";
            List<Dept> list = jdbcTemplate.query(sql,new MyResult(), id);
            return (list!=null && list.size()>0) ? list.get(0) : null;
        }
    
        public List<Dept> getAll() {
            String sql = "select * from t_dept";
            List<Dept> list = jdbcTemplate.query(sql, new MyResult());
            return list;
        }
    
    
    
    
        class MyResult implements RowMapper<Dept>{
    
            // 如何封装一行记录
            @Override
            public Dept mapRow(ResultSet rs, int index) throws SQLException {
                Dept dept = new Dept();
                dept.setDeptId(rs.getInt("deptId"));
                dept.setDeptName(rs.getString("deptName"));
                return dept;
            }
    
        }
    }
    
    
    

    配置文件bean.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!-- 1. 数据源对象: C3P0连接池 -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
            <property name="jdbcUrl" value="jdbc:mysql:///db"></property>
            <property name="user" value="root"></property>
            <property name="password" value="root"></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>
    
        <!-- 2. 创建JdbcTemplate对象 -->
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
    
        <!-- dao 实例 -->
        <bean id="userDao" class="h_jdbc.UserDao">
            <property name="jdbcTemplate" ref="jdbcTemplate"></property>
        </bean>
    </beans>
    
    
    
    
  • 相关阅读:
    Yahoo团队经验:网站性能优化的34条黄金法则
    SaltStack中状态间关系unless、onlyif、require、require_in、watch、watch_in
    kubectl 常用命令一
    Linux系统的限制
    DNS服务器搭建与配置
    Python对文件的操作
    SaltStack schedule功能
    saltstack的salt-api介绍
    SaltStack事件驱动 – event reactor
    SaltSack 中Job管理
  • 原文地址:https://www.cnblogs.com/cenyu/p/6291990.html
Copyright © 2020-2023  润新知