Spring 学习笔记(四)

学习内容来自 B站尚硅谷视频

JDBC template

概念

Spring 框架对 JDBC 进行封装,使用 JDBC template 可以方便对数据库进行操作

准备工作

  1. 引入 jar 包
    在这里插入图片描述

  2. 在 Spring 配置文件中配置数据库连接池

<!--    配置连接池-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <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"/>
    </bean>
  1. 创建 service 类 和 dao 类,在 dao 中注入 jdbcTemplate 对象

(1)开启组件扫描

    <context:component-scan base-package="com.sict.spring5"/>

(2)Service 类

@Service
public class BookService {

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

(3)Dao 类

@Repository
public class BookDaoImpl implements BookDao {

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

JdbcTemplate 操作数据库

添加

准备

(1)首先,准备好数据库和对应表
在这里插入图片描述
在这里插入图片描述

(2)创建表对应的实体类

public class Book{

    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;
    }
}

编写 service 和 dao

  1. 在 dao 中进行数据库添加操作
public interface BookDao {

    // 添加数据
    void add(Book book);
}

  1. 调用 jdbcTemplate 对象的 update 方法实现添加操作
@Override
    public void add(Book book) {

        String sql = "insert into t_book values(?, ?, ?)";
        // 调用 jdbcTemplate 对象里面的 update 方法实现添加操作
        /**
         *  int update(String var1, @Nullable Object... var2)
         *  var1 是 sql 语句
         *  var2 是可变参数,用来在设置 sql 语句中的变量值
         */
        Object[] args = new Object[]{book.getUserId(), book.getUsername(), book.getUstatus()};
        int update = jdbcTemplate.update(sql, args);
        System.out.println(update);
    }
  1. 编写测试类
public void testJdbcTemplate() {
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean1.xml");

        BookService bookService = context.getBean("bookService", BookService.class);

        Book book = new Book();
        book.setUserId("1");
        book.setUsername("jerry");
        book.setUstatus("good");

        bookService.addBook(book);
    }

修改和删除

  1. dao 类中添加方法
public interface BookDao {

    // 添加数据
    void add(Book book);

    // 修改数据
    void update(Book book);

    // 删除数据
    void delete(Book book);
}
  1. service 类中添加方法
public class BookService {

    // 注入 dao
    @Autowired
    private BookDao bookDao;

    // 添加数据
    public void addBook(Book book) {
        bookDao.add(book);
    }

    // 修改数据
    public void updateBook(Book book) {
        bookDao.update(book);
    }

    // 删除
    public void deleteBook(Book book) {
        bookDao.delete(book);
    }
}
  1. dao 实现类中实现方法
@Override
    public void update(Book book) {
        String sql = "update t_book set username=?, ustatus=? where user_id=?";
        Object[] args = new Object[]{book.getUsername(), book.getUstatus(), book.getUserId()};

        int update = jdbcTemplate.update(sql, args);
        System.out.println(update);
    }

    @Override
    public void delete(Book book) {
        String sql = "delete from t_book where user_id=?";
        Object[] args = new Object[]{book.getUserId()};

        int update = jdbcTemplate.update(sql, args);
        System.out.println(update);
    }
  1. 编写测试类
public void testJdbcTemplate() {
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean1.xml");

        BookService bookService = context.getBean("bookService", BookService.class);

        // 添加
        Book book = new Book();
        book.setUserId("2");
        book.setUsername("jerryDog");
        book.setUstatus("better");
        bookService.addBook(book);

        // 修改
        Book book1 = new Book();
        book1.setUserId("2");
        book1.setUsername("jerrydog");
        book1.setUstatus("sleep");
        bookService.updateBook(book1);

        // 删除
        Book book2 = new Book();
        book2.setUserId("1");
        bookService.deleteBook(book2);

    }

查询

查询返回某个值

  1. dao 接口添加方法
 // 查询记录数
    int selectCount();
  1. service 类添加方法
// 查询记录数
    public int findCount() {
        return bookDao.selectCount();
    }
  1. dao 实现类实现方法
@Override
    public int selectCount() {
        String sql = "select count(*) from t_book";

        /**
         *  queryForObject(String var1, Class<T> var2)
         *  var1 表示 sql 语句
         *  var2 表示返回类型对应的 class
         */
        int count = jdbcTemplate.queryForObject(sql, Integer.class);
        return count;
    }
  1. 编写测试类
public void testBookQuery() {

        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean1.xml");

        BookService bookService = context.getBean("bookService", BookService.class);

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

查询返回对象

  1. dao 接口添加方法
// 查询返回对象
    Book findBookInfo(String id);
  1. service 类添加方法
// 查询返回对象
    public Book findOne(String id) {
        return bookDao.findBookInfo(id);
    }
  1. dao 实现类实现方法
@Override
    public Book findBookInfo(String id) {
        String sql = "select * from t_book where user_id=?";

        /**
         * queryForObject(String var1, RowMapper<T> var2, @Nullable Object... var3)
         * var1 是 sql 语句
         * var2 是 RowMapper 接口对应实现类(该实现类会自动完成数据封装)的对象,用来返回给定类型的对象
         * var3 是 sql 语句中的变量
         */
        Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Book.class), id);
        return book;
    }
  1. 编写测试类
public void testBookQueryObject() {

        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean1.xml");

        BookService bookService = context.getBean("bookService", BookService.class);

        Book one = bookService.findOne("2");
        System.out.println(one);
    }

查询返回集合

  1. dao 接口添加方法
// 查询返回对象
    List<Book> findAllBook();
  1. service 类添加方法
// 查询所有对象
    public List<Book> findAll() {
        return bookDao.findAllBook();
    }
  1. dao 实现类实现方法
@Override
    public List<Book> findAllBook() {
        String sql = "select * from t_book";

        /**
         * query(String var1, RowMapper<T> var2, @Nullable Object... var3)
         * var1 是 sql 语句
         * var2 是 RowMapper 接口对应实现类(该实现类会自动完成数据封装)的对象,用来返回给定类型的对象
         * var3 是 sql 语句中的变量
         */
        List<Book> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Book.class));
        return list;
    }
  1. 编写测试类
public void testBookQueryList() {

        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean1.xml");

        BookService bookService = context.getBean("bookService", BookService.class);

        List<Book> all = bookService.findAll();
        all.forEach(System.out::println);
    }

批量添加操作

  1. dao 接口添加方法
// 批量添加
    void batchAddBook(List<Object[]> batchArgs);
  1. service 类添加方法
// 批量添加
    public void batchAdd(List<Object[]> batchArgs) {
        bookDao.batchAddBook(batchArgs);
    }
  1. dao 实现类实现方法
@Override
    public void batchAddBook(List<Object[]> batchArgs) {
        String sql = "insert into t_book values(?, ?, ?)";

        /**
         * batchUpdate(String sql, List<Object[]> batchArgs)
         * 批量执行 sql 语句,自动调用对应参数
         */
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        System.out.println(Arrays.toString(ints));
    }
  1. 编写测试类
public void testBookBatchAdd() {

        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean1.xml");

        BookService bookService = context.getBean("bookService", BookService.class);

        List<Object[]> list = new ArrayList<>();
        Object[] o1 = {"3", "bili", "bad"};
        Object[] o2 = {"4", "fury", "fun"};
        Object[] o3 = {"5", "jack", "funny"};
        Object[] o4 = {"6", "happyman", "happy"};
        list.add(o1);
        list.add(o2);
        list.add(o3);
        list.add(o4);
        bookService.batchAdd(list);
    }

批量修改和删除

  1. dao 接口添加方法

    // 批量修改
    void batchUpdateBook(List<Object[]> batchArgs);

    // 批量删除
    void batchDeleteBook(List<Object[]> batchArgs);
  1. service 类添加方法
    // 批量修改
    public void batchUpdate(List<Object[]> batchArgs) {
        bookDao.batchUpdateBook(batchArgs);
    }

    // 批量删除
    public void batchDelete(List<Object[]> batchArgs) {
        bookDao.batchDeleteBook(batchArgs);
    }
  1. dao 实现类实现方法
@Override
    public void batchUpdateBook(List<Object[]> batchArgs) {
        String sql = "update t_book set username=?, ustatus=? where user_id=?";

        /**
         * batchUpdate(String sql, List<Object[]> batchArgs)
         * 批量执行 sql 语句,自动调用对应参数
         */
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        System.out.println(Arrays.toString(ints));
    }

    @Override
    public void batchDeleteBook(List<Object[]> batchArgs) {
        String sql = "delete from t_book where user_id=?";

        /**
         * batchUpdate(String sql, List<Object[]> batchArgs)
         * 批量执行 sql 语句,自动调用对应参数
         */
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        System.out.println(Arrays.toString(ints));
    }
  1. 编写测试类
public void testBookBatchUpdate() {

        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean1.xml");

        BookService bookService = context.getBean("bookService", BookService.class);

        List<Object[]> list = new ArrayList<>();
        Object[] o1 = {"bili", "bad_edited", "3"};
        Object[] o2 = {"fury", "fun_edited", "4"};
        Object[] o3 = {"jack", "funny_edited", "5"};
        list.add(o1);
        list.add(o2);
        list.add(o3);
        bookService.batchUpdate(list);
    }

    public void testBookBatchDelete() {

        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean1.xml");

        BookService bookService = context.getBean("bookService", BookService.class);

        List<Object[]> list = new ArrayList<>();
        Object[] o1 = {"3"};
        Object[] o3 = {"5"};
        list.add(o1);
        list.add(o3);
        bookService.batchDelete(list);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三更鬼

谢谢老板!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值