Java EE day10学习总结

本文详细介绍了Java EE中JdbcTemplate和DBUtils的使用,包括JdbcTemplate的概念、创建对象、CRUD操作及结果处理,以及DBUtils的DBUtils类、QueryRunner和ResultSetHandler的功能和示例。内容涵盖了JdbcTemplate的预编译操作、结果转换为JavaBean,以及DBUtils的DML和DQL操作,展示了如何简化JDBC操作。
摘要由CSDN通过智能技术生成

今天主要学习JdbcTemplate,DBUtils

思维导图:

一.JdbcTemplate

1.概念:

JdbcTemplate是spring框架对JDBC进行简便操作所提供一个模板类吗,这个类core包下面进行提供的JdbcTemplate可以在JDBC的基础进行一些简单的CRUD(增删改查)操作,同时还大量的使用了预编译操作,所以在性能和安全上都可以达到一个非常优秀的地步。


2. 如何去使用JdbcTemplate:
(1)需要导入jar包(因为这是一个第三方工具)
   所提供的JdbcTemplate目录下的lib下面的所有包(5个)
(2)创建JdbcTemplate对象
   JdbcTemplate template = new             JdbcTemplate(JdbcUtils.getDataSource());
   注意:这里的构造方法需要一个DataSource()的具体对象(其实要的就是连接池,因为JdbcTemplate不具备连接功能,所以需要连接池来驱动它)
(3)调用我们的 JdbcTemplate的各种方法实现对DML和DQL的操作
   int update(String sql):适用于没有修改条件的增删改(不存在预参数参与)
   delete from account;
   int update(String sql,Object...):适用于带有操作条件的增删改(存在预编译参数)
        delete from account where id = ?;
  注意:这个Object...是一个可变参数

3.查询的结果有哪些?
(1)返回的结果只有单行(查询之后只能存在一条结果的操作)
                    Map<String, Object> queryForMap(String var1):适用于没有预编译参数的sql
                    Map<String, Object> queryForMap(String var1, Object... var2):适合存在预编译参数的sql
注意:
queryForMap只适用于一条结果的查询,如果是是多条结果则会产生异常,查询后的结果列会存储到一个Map集合当中,其中Map的键用于存储列名,Map值则存储列的数据

(2)返回的结果是全部或者多行(查询全表数据或者查询结果存在多条)
   List<Map<String, Object>> queryForList(String var1):适用于没有预编译参数的sql
   List<Map<String, Object>> queryForList(String var1,Object... var2):适合存在预编译参数的sql
注意:queryForMap适用于多条结果的查询,如果确保是一条结果则不建议使用它,因为操作比较复杂其查询的每一行数据会先存在Map集合当中,然后在将Map集合存储在List集合当当中在正常的开发逻辑当中,我们的每一个数据应该是一个对象的属性,所有的操作应该以对象作为中心JdbcTemplate为了更加的符合面向对象思想,也给我们提供了一个将查询结果封装到对象的方法
方式一:手写转换处理
 List<T> query(String var1, RowMapper<T> var2):
                            var1:需要操作的SQL
                            var2:这是一个接口,里面需要依赖重写后的mapRow方法,因为所有查询的结果全部存在这个方法的ResultSet当中。
方式二:自动转换处理
template.query(sql,new BeanPropertyRowMapper<UserVO>(UserVO.class));

(3)返回的结果是一个数据(聚合函数的SUM/AVG/COUNT)
queryForObject(String sql, Class<T> requiredType);
sql:需要查询的SQL语句
requiredType:返回结果和接收结果的数据类型,通过反射加载 一般只能是Double.class和Long.class

 

例子:
package com.jdbctemlate;
import com.util.JdbcUtils;
import com.vo.UserVO;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class Demo01 {
    public static void main(String[] args) {
        select05();


    }

    //一个结果的查询
    public static void select05() {
        JdbcTemplate template = new JdbcTemplate(JdbcUtils.getDataSource());
        String sql = "select count(id) from ask_users";
        Long l = template.queryForObject(sql,Long.class);
        System.out.println(l);
    }

    //自动将查询结果转化为JavaBean
    public static void select04() {
        JdbcTemplate template = new JdbcTemplate(JdbcUtils.getDataSource());
        String sql = "select * from ask_users";

        List<UserVO> list = template.query(sql,new BeanPropertyRowMapper<UserVO>(UserVO.class));
        for (UserVO userVO : list) {
            System.out.println(userVO.getUsername());
            System.out.println(userVO.getPassword());
            System.out.println(userVO.getEmail());
            System.out.println(userVO.getStatus());
            System.out.println(userVO.getJob());
            System.out.println(userVO.getGender());
            System.out.println("--------------------");
        }
    }
    //手动将查询结果转化为JavaBean
    public static void select03() {
        JdbcTemplate template = new JdbcTemplate(JdbcUtils.getDataSource());
        String sql = "select * from ask_users";

        //通过子类实现RowMapper,并mapRow方法
        //List<UserVO> u = template.query(sql,new MyRowMapper());

        //直接使用匿名内部类
        //        List<UserVO> u = template.query(sql, new RowMapper<UserVO>() {
        //            @Override
        //            public UserVO mapRow(ResultSet rs, int i) throws SQLException {
        //                //创建一个实体对

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值