• 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 id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <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 id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <!--
                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);
            }
        }
  • 相关阅读:
    Linux利用crontab命令定时任务
    Linux利用scp命令上传下载文件
    Linux利用ftp命令上传下载文件
    cmd杀死占用端口号的Java进程
    布隆过滤器
    redis缓存穿透、缓存击穿、缓存雪崩
    redis的主从复制master/slaver
    Redis的发布订阅Pub/Sub
    博客园隐藏反对按钮,并简单装饰推荐按钮
    redis事务
  • 原文地址:https://www.cnblogs.com/haojia/p/12386234.html
Copyright © 2020-2023  润新知