jdbcTemplate入门程序

1、概念:

Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中 (spring-jdbc.jar)

2.jdbcTemplate的入门程序

1)介绍jdbcTemplate的API

①DrvierManagerDataSource spring-jdbc.jar中提供的一个连接池对象

1、连接池中可以设置driver驱动

2、连接池对象中可以设置url

3、连接池中设置用户名(数据库用户民)

4、连接池对象中设置数据库的密码

②JdbcTemplate 核心处理对象(有对应的增删改查的方法)

1、update(sql, 实际传递的参数 ); 可以完成增删改

2、查询的方法

  1.   queryForObject(sql ,返回数据类型的字节码对象, 实际传递的参数); 查询指定的字段
  2. **queryForObject(sql, BeanPropertyRowMapper, 实际传递的参数) 查询对象**
  3. queryForMap(sql , 实际传递的参数) 返回的是一个Map , map对象中存放的是对象的数据, 以键值对方式存储
  4. queryForList(sql , 实际参数) 返回的是List<Map<String,Object>> 查询一个List的结果,但是list中有map
  5. query(sql,BeanPropertyRowMapper) 查询一个List<POJO对象>

2)环境准备

1、数据库的准备工作

2、jar包的导入

<!--
        spring JdbcTemplate
        1)mysql
        2)spring-context
        3)spring-jdbc
        4)spring-test
        5)junit
        6)lombok
    -->
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
        </dependency>
    </dependencies>
</project>

需求     使用jdbcTemplate完成数据的插入

3)代码实现:

package com.itheima.jdbcTemplate;

import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

public class Demo1_JdbcTemplate {

    @Test
    public void testInsert(){
        //1.首先创建数据库连接池对象 DataSource
        DriverManagerDataSource  dataSource = new DriverManagerDataSource();
        //2.设置DataSource的四个属性
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql:///day25");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        //3.创建JdbcTemplate 对象, 传递DataSource给该对象的构造方法
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        //4.调用jdbcTemplate的update方法完成数据的插入
        jdbcTemplate.update("insert into stu values(? , ? ,? ,?)", 2,"刘能","清华大学",728);

    }
}

4).jdbcTemplate 对象由

  • 连接池对象DriverManagerDataSource 数据源对象有spring来管理,里面参数也有spring来注入

  • jdbcTemplate对象也由spring来管理 , 给该对象注入dataSource

  • 测试代码中使用spring的环境, 注入jdbcTemplate, 直接测试.

spring来管理

改造的步骤

1.添加bean.xml配置文件, 目的是创建连接池和jdbcTemplate都交给spirng

 <!--0.引入外部数据源 db.properties-->
    <context:property-placeholder location="classpath:db.properties"/>

    <!--1.创建连接池对象-->
    <bean >
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!--2.创建JdbcTemplate对象-->
    <bean >
        <!--
            set方式注入  <property
            Constructor构造注入  <Constructor
        -->
        <constructor-arg name="dataSource" ref="dataSource"/>
    </bean>
</beans>

外部数据源

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///day16
jdbc.username=root
jdbc.password=root

2、.测试文件中修改测试方法,使用spirng的测试环境

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:bean.xml")
public class Demo1_JdbcTemplate {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Test
    public void testInsert02(){
        jdbcTemplate.update("insert into stu values(?,?,?,?)",4,"谢广坤","北大",715);
    }
}

6)使用jdbcTemplate完成查询功能

  • 根据根据id查询学生name
 @Test
    public void testQueryNameById(){
        String name = jdbcTemplate.queryForObject("select sname from stu where sid = ?", String.class, 1);
        System.out.println(name);
    }
  • 查询一共有多少个学生数
   //2. 查询一共有多少个学生数  int
    //queryForObject(sql ,返回数据类型的字节码对象, 实际传递的参数);  查询指定的字段
    @Test
    public void testQueryCount(){
        Integer count = jdbcTemplate.queryForObject("select count(*) from stu ", Integer.class);
        System.out.println(count);
    }
  • 查询id为7 的student对象,返回Stud
    // 3. 查询id为7 的student对象,返回Student
    // queryForObject(sql, BeanPropertyRowMapper, 实际传递的参数)   查询对象
    @Test
    public void testQueryStuById(){
        Student student = jdbcTemplate.queryForObject("select * from stu where sid = ? ",
                new BeanPropertyRowMapper<Student>(Student.class), 18);
        System.out.println(student);
    }
  • 查询id为8的student对象返回map
  // 4. 查询id为3的student对象返回map
    //queryForMap(sql , 实际传递的参数)    返回的是一个Map  , map对象中存放的是对象的数据,  以键值对方式存储
    @Test
    public void testFindStuMap(){
        Map<String, Object> map = jdbcTemplate.queryForMap("select * from stu where sid = ? ", 3);
        System.out.println(map);
    }
  • 查询所有的student对象 返回List<Map<String ,Object>> queryForList
    //5. 查询所有的student对象 返回List<Map<String ,Object>>  queryForList
    @Test
    public void testFindList(){
        List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from stu ");
        for (Map<String, Object> map : list) {
            System.out.println(map);
        }
    }
  • 如果只想查询结果放到List<Bean> query
 // 6. 如果只想查询结果放到List<Bean>  query
    //query(sql,BeanPropertyRowMapper)   查询一个List<POJO对象>
    @Test
    public void testFindStuList(){
        List<Student> list =
                jdbcTemplate.query("select * from stu", new BeanPropertyRowMapper<Student>(Student.class));
        for (Student student : list) {
            System.out.println(student);
        }
    }