Spring学习笔记(五)—— Spring整合JDBC

一、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

原文地址:https://www.cnblogs.com/yft-javaNotes/p/10299988.html