Spring框架——JDBC模板

目录

Spring框架的JDBC模板技术

Spring框架的JDBC模板技术概述

演示JDBC的模板类

使用Spring框架来管理模板类

Spring框架管理开源的连接池

Spring框架的JDBC模板的简单操作

查询一条或多条记录的另外一种封装方式 BeanPropertyRowMapper

继承 Spring提供的 JdbcDaoSupport 类


Spring框架的JDBC模板技术


Spring框架的JDBC模板技术概述

1. Spring框架中提供了很多持久层的模板类来简化编程,使用模板类编写程序会变的简单
2. 提供了JDBC模板,Spring框架提供的
    * JdbcTemplate类  类似我们之前学习的一个工具类dbutils 里面的QueryRunner
​
3. Spring框架可以整合Hibernate或MyBatis 框架,也提供了模板类
    * HibernateTemplate类

演示JDBC的模板类

1. 步骤一:创建数据库的表结构
    create database spring_day03;
    use spring_day03;
    create table t_account(
        id int primary key auto_increment,
        name varchar(20),
        money double
    );
​
2. 引入开发的jar包
    * 先引入IOC基本的6个jar包
        com.springsource.org.apache.commons.logging-1.1.1.jar
        com.springsource.org.apache.log4j-1.2.15.jar
        spring-beans-5.0.2.RELEASE.jar
        spring-context-5.0.2.RELEASE.jar
        spring-core-5.0.2.RELEASE.jar
        spring-expression-5.0.2.RELEASE.jar
    * 再引入Spring-aop的jar包
         spring-aop-5.0.2.RELEASE.jar
             com.springsource.org.aopalliance-1.0.0.jar
         com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
         spring-aspects-5.0.2.RELEASE.jar
        
    * 最后引入JDBC模板需要的jar包
        * MySQL数据库的驱动jar包
        * spring-jdbc-5.0.2.RELEASE.jar
        * spring-tx-5.0.2.RELEASE.jar
            * 想要做测试再引入一个测试的包
        spring-test-5.0.2.RELEASE.jar

          ** 当然如果是Maven项目,我们只需要在pom.xml 文件中添加所需jar包的坐标
          
          
          
                    org.springframework
                    spring-context
                    5.0.2.RELEASE
                
                
                    org.aspectj
                    aspectjweaver
                    1.8.7
                
                
                    junit
                    junit
                    4.12
                
                
                    org.springframework
                    spring-test
                    5.0.2.RELEASE
                
                
                    org.springframework
                    spring-jdbc
                    5.0.2.RELEASE
                
    
           
            org.springframework
                spring-tx
                5.0.2.RELEASE
            
    
            
                mysql
                mysql-connector-java
                5.1.6
            

3.编写测试代码(自己来new对象的方式,不用加载配置文件)
        @Test
        public void run1(){
            // 创建连接池,先使用Spring框架内置的连接池
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql:///spring_day03");
            dataSource.setUsername("root");
            dataSource.setPassword("123456");
            // 创建模板类
            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);  //参数要一个连接池,可以使用Spring内置的链接池,可以使用第三方的 例如 C3P0,DBCP
            // 完成数据的添加
            jdbcTemplate.update("insert into t_account values (null,?,?)", "测试",10000);
        }


使用Spring框架来管理模板类

1. 刚才编写的代码使用的是new的方式,应该把这些类交给Spring框架来管理。
2. 修改的步骤如下
    * 步骤一:Spring管理内置的连接池
        
            
            
            
            
        
    
    * 步骤二:Spring管理模板类
        
            
        
    
    * 步骤三:编写测试程序
        @RunWith(SpringJUnit4ClassRunner.class)
        @ContextConfiguration("classpath:applicationContext.xml")
        public class Demo2 {
            
            @Resource(name="jdbcTemplate")
            private JdbcTemplate jdbcTemplate;
            
            @Test
            public void run2(){
                jdbcTemplate.update("insert into t_account values (null,?,?)", "测试2",10000);
            }
        }

Spring框架管理开源的连接池

1. 管理DBCP连接池
    * 先引入DBCP的2个jar包   
        在我们下载的Spring开发包中的依赖文件夹中可以找到这两个jar包
        资料\spring-framework-3.0.2.RELEASE-dependencies 这个依赖的文件夹中找到DBCP的两个jar包
        * com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar 
        * com.springsource.org.apache.commons.pool-1.5.3.jar
    * 如果是Maven项目添加DBCP的jar包坐标
      
            org.apache.commons
            com.springsource.org.apache.commons.pool
            1.5.3
        
        
            commons-dbcp
            commons-dbcp
            1.2.2
        
    
    * 编写配置文件
        
            
            
            
            
        
​
2. 管理C3P0连接池
    * 先引入C3P0的jar包
        在 资料\spring-framework-3.0.2.RELEASE-dependencies 这个依赖的文件夹中找到C3P0这个jar包
        * com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar
        
    * 如果是Maven项目,添加c3p0的jar包坐标
      
            com.mchange
            c3p0
            0.9.2.1
        
    
    * 编写配置文件
        
            
            
            
            
        
​
​
            
        
            com.alibaba
            druid
            1.1.10
        
 
​
    
        
        
        
        
    

Spring框架的JDBC模板的简单操作

1. 增删改查的操作
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:applicationContext.xml")
    public class SpringDemo3 {
        
        @Resource(name="jdbcTemplate")
        private JdbcTemplate jdbcTemplate;
        
        @Test
        // 插入操作
        public void demo1(){
            jdbcTemplate.update("insert into account values (null,?,?)", "冠希",10000d);
        }
        
        @Test
        // 修改操作
        public void demo2(){
            jdbcTemplate.update("update account set name=?,money =? where id = ?", "思雨",10000d,5);
        }
        
        @Test
        // 删除操作
        public void demo3(){
            jdbcTemplate.update("delete from account where id = ?", 5);
        }
        
        @Test
        // queryForObject()方法 查询一条记录 也就是返回一行记录  写一个JavaBean 然后查询一条数据,帮你封装进这个JavaBean
        public void demo4(){
            Account account = jdbcTemplate.queryForObject("select * from account where id = ?", new BeanMapper(), 1);
            System.out.println(account);
        }
        
        @Test
        // 查询所有记录 使用query方法 直接返回一个集合 这个集合装有所有记录
        public void demo5(){
            List list = jdbcTemplate.query("select * from t_account", new BeanMapper());
            for (Account account : list) {
                System.out.println(account);
            }
        }
        
      @Test
    public void findAll() {
        List> list = jdbcTemplate.queryForList("select * from account");
​
        for (Map map : list) {
            Set> entries = map.entrySet();
            for (Map.Entry entry : entries) {
                String key = entry.getKey();
                Object value = entry.getValue();
                System.out.println(key + "===" + value);
            }
        }
    }
        
      @Test
    public void test3() {
        //只能查询一条,字段名作为键,这个字段的值,就作为值
        Map map = jdbcTemplate.queryForMap("select * from account where id=?", 1);
        Set> entries = map.entrySet();
        for (Map.Entry entry : entries) {
            String key = entry.getKey();
            Object value = entry.getValue();
            System.out.println(key + "===" + value);
        }
    }   
}
    
    //定义一个类 实现RowMapper接口 自己重写方法,把查出的数据封装到 JavaBean中
    class BeanMapper implements RowMapper{
        public Account mapRow(ResultSet rs, int arg1) throws SQLException {
            //这里不用循环,因为他是一行一行来封装的 
            Account account = new Account();
            account.setId(rs.getInt("id"));
            account.setName(rs.getString("name"));
            account.setMoney(rs.getDouble("money"));
            return account;
        }
    }

查询一条或多条记录的另外一种封装方式 BeanPropertyRowMapper

   ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
        //我们查询出来的数据直接封装到JavaBean里面,然后再放到集合中
        //那么我们可以使用BeanPropertyRowMapper 来做
        List list = jdbcTemplate.query("select * from account where id=?", new BeanPropertyRowMapper(Account.class), 4);
        System.out.println(list);

继承 Spring提供的 JdbcDaoSupport 类

public class AccountDaoImpl extends JdbcDaoSupport implements AccountDao {
    //在继承了JdbcDaoSupport后,我们就可以不需要再dao里面注入jdbcTemplate而是从父类获取一个用
    /* private JdbcTemplate jdbcTemplate;
    @Override
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }*/
    
    public List findAll() {
        List query = super.getJdbcTemplate().query("select * from account", new BeanPropertyRowMapper(Account.class));
        return query;
    }
}
上面的dao继承了 JdbcDaoSupport 后,我们可以通过getJdbcTemplate()来获取一个JdbcTemplate对象
​
那么配置文件中就可以直接注入数据源

        
        
        
        
    
    
    
        
        
    
​
    
        注入数据源,那么父类JdbcDaoSupport就会创建JDBCTemplate
        
        
        在继承了JdbcDaoSupport我们就不需要注入jdbcTemplate了
        
    

你可能感兴趣的:(Spring,spring,java,后端)