首页 > 其他分享 >JdbcTemplate的基本使用-新增

JdbcTemplate的基本使用-新增

时间:2024-01-05 12:31:46浏览次数:31  
标签:基本 新增 springframework JdbcTemplate org import public user

一、JdbcTemplate的基本介绍

JdbcTemplate 是 Spring 对 JDBC 的封装,目的是使JDBC更加易于使用,JdbcTemplate是Spring的一部分。JdbcTemplate 处理了资源的建立和释放,它帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果即可。

Spring为了简化数据库访问,主要做了以下几点工作:

  • 提供了简化的访问JDBC的模板类,不必手动释放资源;
  • 提供了一个统一的 DAO 类以实现 Data Access Object 模式;
  • SQLException封装为DataAccessException,这个异常是一个RuntimeException,并且让我们能区分SQL异常的原因,例如,DuplicateKeyException表示违反了一个唯一约束;
  • 能方便地集成Hibernate、JPA和MyBatis这些数据库访问框架。

 

二、为什么要使用jdbctemplate

如果直接使用JDBC的话,需要我们加载数据库驱动、创建连接、释放连接、异常处理等一系列的动作,繁琐且代码看起来不直观。而使用 jdbctemplate 则无需关注加载驱动、释放资源、异常处理等一系列操作,我们只需要提供 sql 语句并且提取最终结果即可,大大方便我们编程开发。此外,Spring提供的JdbcTempate能直接数据对象映射成实体类,不再需要获取ResultSet去获取值、赋值等操作,提高开发效率;

 

三、jdbctemplate常用方法

jdbcTemplate主要提供的5类方法及使用:

(1)execute() 方法:可以执行任何SQL语句,一般用于执行DDL语句。

(2)update(sqlStr, 参数列表) 方法:用于执行新增、修改、删除等语句。

(3)batchUpdate() 方法:用于执行批处理相关语句,batchUpdate方法第二参数是一个元素为 Object[] 数组类型的 List 集合。

(4)query() 方法及 queryForXXX() 方法:用于执行查询相关语句,查询结果为基本数据类型或者是单个对象一般使用 queryForObject()

  • queryForInt():查询一行数据并返回 int 型结果。例子:jdbcTemplate.queryForInt("select count(*) from user")
  • queryForObject(sqlStr, 指定的数据类型, 参数列表):查询一行任何类型的数据,最后一个参数指定返回结果类型。例子:jdbcTemplate.queryForObject("selct count(*) from user", Integer.class)
  • queryForMap(sqlStr, 参数列表):查询一行数据并将该行数据转换为 Map 返回。将会将列名作为key,列值作为 value 封装成 map。当查询出来的行数大于1时会报错。例子:jdbcTemplate.queryForMap("select * from user where username = ?", "aaa");
  • List<Map<String, Object>> queryForList(sqlStr, 参数列表):将查询结果集封装为 list 集合,该集合的每一条元素都是一个 map。
  • query(sqlStr, RowMapper对象, 参数列表):查询多行数据,并将结果集封装为元素是 JavaBean 的 list。(注意,指定的JavaBean的属性最好不要是基本类型,因为查询出来的结果可能是null,而null赋值为基本数据类型将会报错。比如int最好定义为Integer)

(5)call() 方法:用于执行存储过程、函数相关语句。

 

四、JdbcTemplate的基本使用-新增数据(jdbcTemplate.update)

我们用 jdbcTemplate.update(sqlStr, 参数列表) 的方法来新增数据。

1、引入jar

先导入以下依赖包。Spring框架的JdbcTemplate在spring-jdbc的jar包中,,除了要导入这个 jar 包外,还需要导入一个 spring-tx的jar包(它是和事务相关的)。当然连接池的jar包也不能忘记,这里使用的是 druid。

JdbcTemplate的基本使用-新增_新增

maven 依赖如下:

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.8</version>
  </dependency>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.12</version>
  </dependency>
  <!-- Spring-jdbc 用于配置JdbcTemplate -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.0.9.RELEASE</version>
  </dependency>
 
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.6.RELEASE</version>
  </dependency>
  <!--事务-->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>5.0.2.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
  </dependency>
 
</dependencies>

2、配置spring 的 xml 文件

然后在 spring 的 xml 配置文件中配置数据库连接池和 JdbcTemplate,同时我们也开启组件扫描。另外我们可以通过一个  jdbc.properties 配置文件来维护数据库的连接配置。

下面假设我们操作的是 test 数据库里面的 user 表,表结构如下:

JdbcTemplate的基本使用-新增_JdbcTemplate_02

jdbc.properties 配置文件内容:

prop.driverClass=com.mysql.jdbc.Driver
prop.url=jdbc:mysql://localhost:3306/test
prop.username=root
prop.password=123456

spring 的 xml 配置文件内容如下,文件命名可自定义,比如下面我们将其命名为 bean01.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
 
    <!--开启组件扫描-->
    <context:component-scan base-package="test, service, dao"></context:component-scan>
 
    <!--引入外部配置文件-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
 
    <!--配置数据库连接池-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${prop.driverClass}"></property>  <!--通过${}使用外部配置文件的值-->
        <property name="url" value="${prop.url}"></property>
        <property name="username" value="${prop.username}"></property>
        <property name="password" value="${prop.password}"></property>
    </bean>
 
    <!-- 配置JdbcTmplate -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!-- 注入dataSource -->
        <property name="dataSource" ref="dataSource"></property>
        <!-- <constructor-arg name="dataSource" ref="dataSource"></constructor-arg>-->  <!-- 也可以用构造函数写法 -->
    </bean>
</beans>

3、新建实体类 

新建一个实体类 User :

package entity;
public class User {
    private int id;
    private String name;
    private String password;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

4、新建UserServiceImpl 类

新建一个 UserServiceImpl 类:

package service;
import dao.UserDao;
import entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService{
    @Autowired
    private UserDao userDao;
    @Override
    public void addUser(User user) {
        userDao.addUser(user);
    }
}

5、新建UserDaoImpl 类

新建一个 UserDaoImpl 类:

package dao;
import entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class UserDaoImpl implements UserDao{
    //注入JdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Override
    public void addUser(User user) {
        //创建SQL语句
        String sql = "insert into user values(?, ?, ?)";
        //调用方法执行SQL
        int updateRow = jdbcTemplate.update(sql, user.getId(), user.getName(), user.getPassword());
        
        System.out.println(updateRow);
    }
}

6、编写调用方法

package test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import entity.User;
import service.UserService;
import service.UserServiceImpl;
public class Test01 {
    ApplicationContext ioc = new ClassPathXmlApplicationContext("bean01.xml");
    //JdbcTemplate jdbcTemplate= ioc.getBean(JdbcTemplate.class);   //我们也可以直接通过获取到的jdbctemplate进行SQL操作,上面使用UserServiceImpl和UserDaoImpl只是为了更符合MVC分层的规范
    //jdbcTemplate.update(sqlStr);
    @Test
    public void test1() {
        User user = new User();
        user.setId(5);
        user.setName("AA");
        user.setPassword("112233");
        UserService userService = ioc.getBean(UserServiceImpl.class);
        userService.addUser(user);   //执行增加方法
    }
}

执行上面 test1 方法,可以看到输出如下:

JdbcTemplate的基本使用-新增_JdbcTemplate_03

 即对一行数据起了作用,可以看到表数据发生了更改:

JdbcTemplate的基本使用-新增_新增_04

标签:基本,新增,springframework,JdbcTemplate,org,import,public,user
From: https://blog.51cto.com/u_16421711/9110566

相关文章

  • JVM1(基本概念)
    (1)基本概念:JVM是可运行Java代码的假想计算机,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆和一个存储方法域。JVM是运行在操作系统之上的,它与硬件没有直接的交互。(2)运行过程:我们都知道Java源文件,通过编译器,能够生产相应的.Class文件,也就是字节码文件......
  • 【flink番外篇】6、flink的WaterMark(介绍、基本使用、kafka的水印以及超出最大允许延
    文章目录Flink系列文章一、watermark介绍1、watermark介绍2、Watermark策略简介3、使用Watermark策略4、处理空闲数据源5、自定义WatermarkGenerator1)、自定义周期性Watermark生成器2)、自定义标记Watermark生成器6、Watermark策略与Kafka连接器7、算子处理Watermark......
  • Redis 之基本命令
    一、基本命令1、ping心跳命令2、get/set(读写键值命令)3、select(切换数据库)4、dbsize(查看key数量)5、flushdb(删除当前库中所有数据)6、flushall(删除所有DB中的数据) ......
  • Redis基本知识与方法
    redis支持五种基本数据类型String(字符串)Hash(哈希)List(列表)Set(集合)Zset(有序集合)字符串(String):这是Redis最基本的数据类型,一个key对应一个value,且值的数据没有类型。Redis的字符串是二进制安全的,这意味着你可以存储任何类型的数据,比如jpg图片或者序列化的对象。哈希(Hash):哈希......
  • Pytest测试框架基本使用方法详解
    pytest介绍pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点:1、简单灵活,容易上手,文档丰富;2、支持参数化,可以细粒度地控制要测试的测试用例;3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);4、......
  • python学习笔记6(基本数据类型2、数据类型之间的转换、eval()函数)
    (一)基本数据类型21、字符串的索引和切片索引,查找某个字符,包括正向和反向索引,正向从0开始,负向从-1开始s='hello'print(s[0])print(s[-5])切片,字符串中了串检索,注意下面的输出是he,也就是第二个参数是不包含参数,正向反向规则一样,n或m可以节省s='hello'print(s[0:2])2、字符串类型xn或......
  • 初识C语言1(C语言的部分基础认知)(初识系列主要目的在于在脑海中初步建立对C语言的认知,建
    C语言是一门通用计算机编程语言,广泛应用于底层开发。 简述写C语言代码的过程       C语言规定:main函数是程序的入口,同时main函数有且只有一个。(一个工程之中)......
  • python学习笔记5(保留字、标识符、变量、基本数据类型)
    上一节学习了print复杂语法、input、注释、代码缩进本节内容:(一)保留字特殊意义的词,区分大小写#查看保留字importkeywordprint(keyword.kwlist)(二)标识符1、名字,组成:字母、下划线和数字数字不能开头注意不能有殊殊字符一般不以_开头,有特殊意义一般不以中文开头2、代码规范模块名称,a......
  • 黑马程序员《苍穹外卖》项目Day02-02-新增员工_代码开发
    问题:使用注解@Insert插入数据到sql中时无法正确识别sql表办法:1、先在idea添加数据库,导入驱动(具体可搜索ideaMysql驱动安装导入)2、安装好数据库及驱动之后,如图,勾选需要的架构。可以查看到对应的表即为导入成功3、最后在Insert位置添加对应表即可。具体操作为光标放在标红的表......
  • Hive基本操作
     Hive的基本操作很简单,与SQL的写法很类似,总结如下:  进入Hive环境     $HIVE_HOME/bin/hive  数据库操作       CREATE(DATABASE|SCHEMA)[IFNOTEXISTS]database_name[COMMENTdatabase_comment][LOCATIONhdfs_path][WITHDBPROPERTIE......