首页 > 其他分享 >Spring JdbcTemplate

Spring JdbcTemplate

时间:2023-08-29 11:22:43浏览次数:45  
标签:Spring dataSource user new public jdbcTemplate JdbcTemplate

什么是 JdbcTemplate

大家来回顾一下,java中操作db最原始的方式就是纯jdbc了,是不是每次操作db都需要加载数据库驱动、获取连接、获取PreparedStatement、执行sql、关闭PreparedStatement、关闭连接等等,操作还是比较繁琐的。

spring中提供了一个模块,对jdbc操作进行了封装,使其更简单,就是本文要讲的JdbcTemplate,JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。

JdbcTemplate 使用步骤

  1. 创建数据源 DataSource
  2. 创建JdbcTemplate,new JdbcTemplate(dataSource)
  3. 调用JdbcTemplate的方法操作db,如增删改查

添加 Maven 依赖项

<dependency>
  <groupId>org.apache.tomcat</groupId>
  <artifactId>tomcat-jdbc</artifactId>
  <version>7.0.35</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.18</version>
</dependency>

创建数据库表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `pwd` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `tel` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `grade` int(0) NULL DEFAULT NULL,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

案例

public class JdbcTest {
    private DataSource dataSource;

    @Before
    public void before() {
        //创建数据源DataSource
        dataSource = new org.apache.tomcat.jdbc.pool.DataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/binge?characterEncoding=UTF-8&serverTimezone=GMT");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        dataSource.setInitialSize(5);
        System.out.println("初始化测试");
    }

    @After
    public void after() {
        System.out.println("结束测试");
    }

    //查询
    @Test
    public void test1() {
        //1.创建JdbcTemplate
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        //2.调用JdbcTemplate的方法操作db,返回值是一个Map集合,Map表示一行记录,key为列名,value为列对应的值
        List<Map<String, Object>> maps = jdbcTemplate.queryForList("select * from t_user");
        System.out.println(maps);
    }

    //查询(条件)
    @Test
    public void test2() {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        String sql = "select id,name from t_user where id>?";
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql, 1);
        System.out.println(maps);
    }

    //查询(单行记录结果转换为对象)
    @Test
    public void test3() {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        String sql = "select id,name from t_user where id = ?";
        //查询id为34的用户信息
        RowMapper<User> rowMapper = new BeanPropertyRowMapper<>(User.class);
        User user = jdbcTemplate.queryForObject(sql, rowMapper, 1);
        System.out.println(user);
    }

    //查询(多行记录转换为对象集合)
    @Test
    public void test4() {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        String sql = "select id,name from t_user where id>?";
        List<User> maps = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class), 1);
        System.out.println(maps);
    }

    //插入(无参)
    @Test
    public void test5() {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        int updateRows = jdbcTemplate.update("INSERT INTO t_user (name,pwd,email,tel) VALUE ('spring系列','111111','[email protected]','1354922010')");
        System.out.println("影响行数:" + updateRows);
    }

    //插入(有参)
    @Test
    public void test6() {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        int updateRows = jdbcTemplate.update("INSERT INTO t_user (name,pwd,email,tel) VALUE (?,?,?,?)", "spring系列","111111","[email protected]","1354922010");
        System.out.println("影响行数:" + updateRows);
    }

    //批量插入
    @Test
    public void test7() {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        List<Object[]> list = Arrays.asList(
            new Object[]{"刘德华","11111","[email protected]","13452211233"},
            new Object[]{"郭富城","22222","[email protected]","13752244533"},
            new Object[]{"张学友","33333","[email protected]","13042811233"},
            new Object[]{"黎明","44444","[email protected]","13918211233"});
        int[] updateRows = jdbcTemplate.batchUpdate("INSERT INTO t_user (name,pwd,email,tel) VALUE (?,?,?,?)", list);
        for (int updateRow : updateRows) {
            System.out.println(updateRow);
        }
    }

    //删除
    @Test
    public void test8() {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        int updateRows = jdbcTemplate.update("DELETE FROM t_user WHERE id = ?",1);
        System.out.println("影响行数:" + updateRows);
    }

    //修改
    @Test
    public void test9() {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        int updateRows = jdbcTemplate.update("UPDATE t_user SET pwd = ? WHERE id = ?",123,2);
        System.out.println("影响行数:" + updateRows);
    }
}
@Data
public class User {
    private Integer id;
    private String name;
    private String pwd;
    private String tel;
    private int grade;
    private String email;
}

总结

  1. BeanPropertyRowMapper 可以将行记录映射为 Java 对象
  2. JdbcTemplate 采用模板的方式操作 jdbc 变的特别的容易,代码特别的简洁,不过其内部没有动态 sql 的功能,即通过参数,动态生成指定的 sql,mybatis 在动态 sql 方面做的比较好,大家用的时候可以根据需求进行选择

标签:Spring,dataSource,user,new,public,jdbcTemplate,JdbcTemplate
From: https://www.cnblogs.com/binbingg/p/17664284.html

相关文章

  • 架构之选:评价Spring Cloud在微服务完整性方面的独到观点!
    大家好,我是小米!今天我们要来聊一个非常热门的话题:SpringCloud在微服务架构方面的完整度情况。随着技术的不断演进,微服务架构已经成为了众多企业构建灵活、可扩展系统的首选。而SpringCloud作为微服务架构的佼佼者,自然成为了我们必须深入了解的对象。废话不多说,咱们开始吧!前言:微服......
  • 基于SpringBoot的装饰工程管理系统
    如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统装饰工程项目信息管理难度大,容错率低,管理人员处理数据费工费时,所以专门为解决这个难题开发了一个装饰工程管理系统项目立......
  • Spring Boot 别再用 Date 作为入参了,LocalDateTime、LocalDate 真香!
    作者:TinyThing链接:https://www.jianshu.com/p/b52db905f0200x0背景项目中使用LocalDateTime系列作为dto中时间的类型,但是spring收到参数后总报错,为了全局配置时间类型转换,尝试了如下3中方法。注:本文基于Springboot2.0测试,如果无法生效可能是spring版本较低导致的。PS:如果你......
  • 聊聊spring项目中如何动态刷新bean
    前言前阵子和朋友聊天,他手头上有个spring单体项目,每次数据库配置变更,他都要重启项目,让配置生效。他就想说有没有什么办法,不重启项目,又可以让配置生效。当时我就跟他说,可以用配置中心,他的意思是因为是维护类项目,不想再额外引入一个配置中心,增加运维成本。后边跟他讨论了一个方案,可......
  • SpringBoot内置Tomcat的参数值
    SpringBoot内置Tomcat,在默认设置中,Tomcat的最大线程数是200,最大连接数是10000。默认情况下,支持最大并发量为一万,也就是指支持的连接数。Tomcat有两种处理连接的模式是BIO,一个线程只处理一个Socket连接是NIO,一个线程处理多个Socket连接处理多个连接的单个线程通常不会引起太......
  • Springboot——后端的一些配置(大部分都用得到)
    <repositories><repository><id>nexus-aliyun</id><name>nexus-aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><rele......
  • day127-springMVC的介绍与入门
    springMVC介绍与初始化介绍MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分M:Model,模型层,指工程中的JavaBean,作用是处理数据JavaBean分为两类:一类称为实体类Bean:专门存储业务数据的,如Student、User等一类称为业务处理Bean:指Service或Dao对象,专门用于处理......
  • SpringBoot - 原理
    目录配置文件优先级配置文件优先级虽然springboot支持多种格式配置文件,但是在项目开发时,推荐统一使用一种格式的配置(yml是主流)IDEA配置系统属性和命令行参数:命令行参数>系统属性总体优先级:命令行参数优先级>系统属性>application.properties>application.y......
  • springMvc常用注解与作用
    @Controller注解的作用在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model,然后再把该Model返回给对应的View进行展示。在SpringMVC中提供了一个非常简便的定义Controller的方......
  • 使用SpringBoot实现网页版交互式增删改查
    1、新建项目选中以下几个DevelopTools:2、引入依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>......