zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Activity传递数据
    Java JDK环境变量配置
    Java与IOS日期格式
    第十四篇 ANDROID的 BLUETOOTH 实现机制--中介模式和代理模式
    第十五篇 Android 的Backup服务管理机制--助手模式
    第十八篇 ANDROID的声音管理系统及服务
    使用Unsafe来实现自定义锁
    rabbitMQ实现推迟队列
    简单分布式锁的实现
    [原创]通过切面与分布式锁实现合并相同请求
  • 原文地址:https://www.cnblogs.com/yft-javaNotes/p/10299988.html
Copyright © 2011-2022 走看看