Spring5 框架 ---- JdbcTemplate

举报
在人间负债^ 发表于 2024/11/26 17:16:14 2024/11/26
【摘要】 1. JdbcTemplate概念和准备 1. 什么是JdbcTemplateSpring 矿建对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作 2. 准备工作引入相关 jar 包在 spring 配置文件配置数据库连接池 <!-- 数据库连接池 --> <bean id="dataSource" class="com.alibaba.druid.p...

1. JdbcTemplate概念和准备

1. 什么是JdbcTemplate

Spring 矿建对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作

2. 准备工作

  1. 引入相关 jar 包

image.png

  1. 在 spring 配置文件配置数据库连接池
    <!-- 数据库连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
          destroy-method="close">
        <property name="url" value="jdbc:mysql:///user_db"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    </bean>
  1. 配置 JdbcTemplate 对象,注入 DataSource
    <!--JdbcTemplate对象-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!--注入dataSource-->
        <property name="dataSource" ref="dataSource"></property>
    </bean>
  1. 创建 service 类,创建 dao 类,在 dao 注入 jdbcTemplate 对象

配置文件

    <!--开启组件扫描-->
    <context:component-scan base-package="com.fickler"></context:component-scan>

Service

package com.fickler.spring5.service;

import com.fickler.spring5.dao.BookDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author dell
 * @version 1.0
 */

@Service
public class BookService {

    //注入dao
    @Autowired
    private BookDao bookDao;
}

Dao

package com.fickler.spring5.dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

/**
 * @author dell
 * @version 1.0
 */

@Repository
public class BookDaoImpl implements BookDao{

    //注入JdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;
}

2. JdbcTemplate操作数据库(添加)

1. 对应数据库表创建实体类

package com.fickler.spring5.entity;

/**
 * @author dell
 * @version 1.0
 */
public class User {

    private String userId;
    private String username;
    private String ustatus;

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUstatus() {
        return ustatus;
    }

    public void setUstatus(String ustatus) {
        this.ustatus = ustatus;
    }
}

2. 编写 service 和 dao

  1. 在 dao 进行数据添加操作
    @Override
    public void add(Book book) {

        //创建sql语句
        String sql = "insert into t_book values (?, ?, ?)";
        //调用方法实现
        Object[] args = {book.getUserId(), book.getUsername(), book.getUstatus()};
        int update = jdbcTemplate.update(sql, args);
        System.out.println(update);

    }
  1. 调用 JdbcTemplate 对象里面 update 方法实现添加操作

image.png

第一个参数:sql 语句
第二个参数:可变参数,设置 sql 语句值

3. 测试类

    @Test
    public void testJdbcTemplateAdd(){

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean1.xml");
        BookService bookService = applicationContext.getBean("bookService", BookService.class);

        Book book = new Book();
        book.setUserId("1");
        book.setUsername("java");
        book.setUstatus("a");
        bookService.addBook(book);

    }

image.png

3. JdbcTemplate操作数据库(修改和删除)

1. 修改

    @Override
    public void updateBook(Book book) {

        String sql = "update t_book set username = ?, ustatus = ? where user_id = ?";
        //args的顺序要sql语句中?的顺序对应起来
        Object[] args = {book.getUsername(), book.getUstatus(), book.getUserId()};
        int update = jdbcTemplate.update(sql, args);
        System.out.println(update);

    }

image.png

2. 删除

    @Override
    public void delete(String id) {

        String sql = "delete from t_book where user_id = ?";
        int update = jdbcTemplate.update(sql, id);
        System.out.println(update);

    }

image.png

4. JdbcTemplate操作数据库(查询返回某个值)

1. 查询表里面有多少条记录,返回某个值

2. 使用JdbcTemplate实现查询返回某个值代码

image.png

第一个参数:sql 语句
第二个参数:返回类型 Class

    @Override
    public int selectCount() {

        String sql = "select count(*) from t_book";
        Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
        return count;

    }

image.png

测试

    @Test
    public void testJdbcTemplateSelectCount(){

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean1.xml");
        BookService bookService = applicationContext.getBean("bookService", BookService.class);

        int count = bookService.findCount();
        System.out.println(count);

    }

image.png

5. JdbcTemplate操作数据库(查询返回对象)

1. 场景:查询图书详情

2. JdbcTemplate实现查询返回对象

image.png

第一个参数:sql 语句
第二个参数:RowMapper,是接口,返回不同类型数据,使用这个接口里面实现类完成数据封装
第三个参数:sql 语句值

    @Override
    public Book findBookInfo(String id) {

        String sql = "select * from t_book where user_id = ?";
        Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
        return book;

    }

image.png

6. JdbcTemplate操作数据库(查询返回集合)

1. 场景:查询图书列表分页…

2. JdbcTemplate方法实现查询返回集合

image.png

第一个参数:sql 语句
第二个参数:RowMapper,是接口,返回不同类型数据,使用这个接口里面实现类完成数据封装

    @Override
    public List<Book> findAllBook() {

        String sql = "select * from t_book";
        List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
        return bookList;

    }

image.png

总结
query:增、删、改
queryForObject:返回数量、返回对象
query:返回集合

7. JdbcTemplate操作数据库(批量操作)

1. 批量操纵:操作表里面多条记录

2. JdbcTemplate实现批量添加操作

    @Override
    public void batchAllBook(List<Object[]> batchArgs) {

        String sql = "insert into t_book values(?, ?, ?)";
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        System.out.println(ints);

    }

测试

    @Test
    public void testJdbcTemplateBatchAdd(){

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean1.xml");
        BookService bookService = applicationContext.getBean("bookService", BookService.class);

        List<Object[]> batchArgs = new ArrayList<>();
        Object[] o1 = {"4", "ddd", "d"};
        Object[] o2 = {"5", "eee", "e"};
        Object[] o3 = {"6", "fff", "f"};
        batchArgs.add(o1);
        batchArgs.add(o2);
        batchArgs.add(o3);
        bookService.batchAdd(batchArgs);

    }

image.png

3. JdbcTemplate实现批量修改操作

    @Override
    public void batchUpdateBook(List<Object[]> batchArgs) {

        String sql = "update t_book set username = ?, ustatus = ? where user_id = ?";
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        System.out.println(Arrays.toString(ints));

    }

测试

    @Test
    public void testJdbcTemplateBatchUpdate(){

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean1.xml");
        BookService bookService = applicationContext.getBean("bookService", BookService.class);

        List<Object[]> batchArgs = new ArrayList<>();
        Object[] o1 = {"ddd000", "d", "4"};
        Object[] o2 = {"eee000", "e", "5"};
        Object[] o3 = {"fff000", "f", "6"};
        batchArgs.add(o1);
        batchArgs.add(o2);
        batchArgs.add(o3);
        bookService.batchUpdate(batchArgs);

    }

image.png

4. JdbcTemplate实现批量删除操作

    @Override
    public void batchDeleteBook(List<Object[]> batchArgs) {

        String sql = "delete from t_book where user_id = ?";
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        System.out.println(ints);

    }

测试

    @Test
    public void testJdbcTemplateBatchDelete(){

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean1.xml");
        BookService bookService = applicationContext.getBean("bookService", BookService.class);

        List<Object[]> batchArgs = new ArrayList<>();
        Object[] o1 = {"4"};
        Object[] o2 = {"5"};
        Object[] o3 = {"6"};
        batchArgs.add(o1);
        batchArgs.add(o2);
        batchArgs.add(o3);
        bookService.batchDelete(batchArgs);

    }

image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。