spring5之入门4篇(JdbcTemplate)

spring5之JdbcTemplate操作数据库

spring5学习目标:

spring5学习笔记
学习视频链接地址:https://www.bilibili.com/video/BV1Vf4y127N5p=26&spm_id_from=pageDriver


JdbcTemplate概念和准备:

1、什么是 JdbcTemplate
(1)Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作

2、准备工作
(1)引入相关 jar 包
在这里插入图片描述
(2)编写db.properties文件

db.driverClassName=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql:///user_db?serverTimezone=GMT%2B8
db.username=root
db.password=8888
initialSize=5
maxActive=10
maxWait=3000

(3)在 spring 配置文件中加载db.properties文件,配置数据库连接池 (并开启注解扫描)

<!--开启注解扫描-->
    <context:component-scan base-package="com.itheima.*"></context:component-scan>

<!--加载外部配置文件-->
    <context:property-placeholder location="classpath:db.properties"/>

<!-- 数据库连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <property name="url" value="${db.url}" />
        <property name="username" value="${db.username}" />
        <property name="password" value="${db.password}" />
        <property name="driverClassName" value="${db.driverClassName}" />
    </bean>

(4)配置 JdbcTemplate 对象,注入 DataSource

<!-- JdbcTemplate 对象 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!-- 注入 dataSource -->
        <property name="dataSource" ref="dataSource"></property>
    </bean>

(5)设计数据库表并创建数据库实体类在这里插入图片描述
实体类:

public class Books {
    private int userid;
    private String username;
    private String ustatus;
    
    public void setUserid(int userid) {
        this.userid = userid;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public void setUstatus(String ustatus) {
        this.ustatus = ustatus;
    }
    public int getUserid() {
        return userid;
    }
    public String getUsername() {
        return username;
    }
    public String getUstatus() {
        return ustatus;
    }

    @Override
    public String toString() {
        return "Book{" +
                "userid=" + userid +
                ", username='" + username + '\'' +
                ", ustatus='" + ustatus + '\'' +
                '}';
    }
}

(6)创建service类和dao类,实现service层调用dao层操作数据库

service层:

@Service
public class BookService {
   //注入BookDao属性
    @Autowired     
    private BookDao bookDao;
    public void add(Books books){
        bookDao.addbook(books);
    }
}

dao层:

public interface BookDao {
    public void addbook(Books books);
}

在BookDaoImpl 实现类中编写具体的逻辑代码操作数据库
调用 JdbcTemplate 对象里面 update 方法实现添加操作
update(String sql,Object… args)
⚫ 有两个参数
⚫ 第一个参数:sql 语句
⚫ 第二个参数:可变参数,设置 sql 语句值

@Component
public class BookDaoImpl implements BookDao {
    //注入JdbcTemplate
    @Autowired     
    private JdbcTemplate jdbcTemplate;   
    
    //往数据库添加一条数据的具体实现
    public void addbook(Books books){
        //1、创建sql语句
        String sql = "insert into t_book values(?,?,?)";
        //2、调用方法实现
        //int update = jdbcTemplate.update(sql, books.getUserid(),books.getUsername(), books.getUstatus());
        //同理可以将获取到的数据放到数组中,便于维护
        Object[] args = {books.getUserid(), books.getUsername(), books.getUstatus()};
        int update = jdbcTemplate.update(sql, args);
        System.out.println(update);
    }
}

(7)编写测试类

@Test
    public void addbook(){
        //1、加载spring配置文件
        ApplicationContext Context = new ClassPathXmlApplicationContext("jdbc.xml");
        //2、获取配置文件对象
        BookService bookService = Context.getBean("bookService", BookService.class);
        Books books = new Books();
        books.setUserid(2);
        books.setUsername("小白");
        books.setUstatus("小黑");
        bookService.add(books);
    }

测试结果:成功添加一条数据
在这里插入图片描述

JdbcTemplate修改和删除:

1、编写service

//修改
    public void update(Books books){
        bookDao.updatebook(books);
    }
    //删除
    public void delete(Books books){
        bookDao.deletebook(books);
    }

2、编写dao层
(1)添加修改和删除的方法到dao接口中

	void updatebook(Books books);
    void deletebook(Books books);

(2)在接口实现类中编写具体操作数据库的逻辑代码

//修改
    @Override
    public void updatebook(Books books) {
        //1、创建sql语句
        String sql = "update t_book set username=?,ustatus=? where userid=?";
        //2、调用方法实现
        Object[] args = {books.getUsername(), books.getUstatus(),books.getUserid()};
        int update = jdbcTemplate.update(sql, args);
        System.out.println(update);
    }

    //删除
    @Override
    public void deletebook(Books books) {
        //1、创建sql语句
        String sql = "delete from t_book where userid = ?";
        //2、调用方法实现
        Object[] args = {books.getUserid()};
        int update = jdbcTemplate.update(sql, args);
        System.out.println(update);
    }

3、测试

@Test
    public void updatebook(){
        //1、加载spring配置文件
        ApplicationContext Context = new ClassPathXmlApplicationContext("jdbc.xml");
        //2、获取配置文件对象
        BookService bookService = Context.getBean("bookService", BookService.class);
        Books books = new Books();
        books.setUserid(3);
        books.setUsername("小红");
        books.setUstatus("小明");
        bookService.update(books);
    }

    @Test
    public void deletebook(){
        //1、加载spring配置文件
        ApplicationContext Context = new ClassPathXmlApplicationContext("jdbc.xml");
        //2、获取配置文件对象
        BookService bookService = Context.getBean("bookService", BookService.class);
        Books books = new Books();
        books.setUserid(3);
        bookService.delete(books);
    }

JdbcTemplate查询

1、查询表里面有多少条记录,返回记录的条数
(1)使用 JdbcTemplate的方法查询并返回数据库记录的条数
(2) queryForObject(String sql,Class requiredType)
⚫ 有两个参数
⚫ 第一个参数:sql 语句
⚫ 第二个参数:返回类型 Class

swrvice层:
//查询数据库表记录条数
    public int count(){
        return bookDao.countbook();
    }


dao接口:
int countbook();

dao实现类:
@Override
    public int countbook() {
        //1、创建sql语句
        String sql = "select count(*) from t_book";
        //2、调用方法实现
        Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
        return count;
    }


测试:
   @Override
    public int countbook() {
        //1、创建sql语句
        String sql = "select count(*) from t_book";
        //2、调用方法实现
        Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
        return count;
    }

2、JdbcTemplate 实现查询返回对象
(1)queryForObject(String sql,RowMapper rowMapper, Object… args)
⚫ 有三个参数
⚫ 第一个参数:sql 语句
⚫ 第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成 数据封装
⚫ 第三个参数:sql 语句值

service层:
//根据id查询对象
    public Books findone(String id){
        return bookDao.findonebook(id);
    }
    

dao接口:
Books findonebook(String id);


dao实现类:
 @Override
    public Books findonebook(String id) {
        //1、创建sql语句
        String sql = "select * from t_book where userid = ?";
        //2、调用方法实现
        Books books = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Books>(Books.class), id);
        return books;
    }


测试:
@Test
    public void findonebook(){
        //1、加载spring配置文件
        ApplicationContext Context = new ClassPathXmlApplicationContext("jdbc.xml");
        //2、获取配置文件对象
        BookService bookService = Context.getBean("bookService", BookService.class);
        Books findone = bookService.findone("1");
        System.out.println(findone);
    }

3、调用 JdbcTemplate 方法实现查询返回集合
(1)query(String sql,RowMapper rowMapper, Object… args)
⚫ 有三个参数
⚫ 第一个参数:sql 语句
⚫ 第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成 数据封装
⚫ 第三个参数:sql 语句

service层:
//查询数据库list集合
    public List<Books> findall(){
        return bookDao.findallbook();
    }


dao接口:
List<Books> findallbook();


dao实现类:
 @Override
    public List<Books> findallbook() {
        //1、创建sql语句
        String sql = "select * from t_book";
        //2、调用方法实现
        List<Books> booksList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Books>(Books.class));
        return booksList;
    }


测试:
@Test
    public void findallbook(){
        //1、加载spring配置文件
        ApplicationContext Context = new ClassPathXmlApplicationContext("jdbc.xml");
        //2、获取配置文件对象
        BookService bookService = Context.getBean("bookService", BookService.class);
        List<Books> findall = bookService.findall();
        System.out.println(findall);
    }

JdbcTemplate批量操作

1、JdbcTemplate 实现批量添加操作
batchUpdate(String sql,List<Object[]> batchArgs)
⚫ 有两个参数
⚫ 第一个参数:sql 语句
⚫ 第二个参数:List 集合,添加多条记录数据

service层:
 //批量添加
    public void batchAdd(List<Object[]> batchArgs){
        bookDao.batchAddbook(batchArgs);
    }


dao接口:
void batchAddbook(List<Object[]> batchArgs);


dao实现类:
@Override
    public void batchAddbook(List<Object[]> batchArgs) {
        String sql = "insert into t_book values(?,?,?)";
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        System.out.println(Arrays.toString(ints));
    }


测试:
@Test
    public void batchAddbook(){
        //1、加载spring配置文件
        ApplicationContext Context = new ClassPathXmlApplicationContext("jdbc.xml");
        //2、获取配置文件对象
        BookService bookService = Context.getBean("bookService", BookService.class);
        List<Object[]> batchArgs = new ArrayList<>();
        Object[] o1 = {"3","a","aa"};
        Object[] o2 = {"4","b","bb"};
        Object[] o3 = {"5","c","cc"};
        batchArgs.add(o1);
        batchArgs.add(o2);
        batchArgs.add(o3);
        bookService.batchAdd(batchArgs);

2、JdbcTemplate 实现批量修改操作

service层:
//批量修改
    public void batchUpdate(List<Object[]> batchArgs){
        bookDao.batchUpdatebook(batchArgs);
    }


dao接口:
void batchUpdatebook(List<Object[]> batchArgs);


dao实现类:
@Override
    public void batchUpdatebook(List<Object[]> batchArgs) {
        String sql = "update t_book set username=?,ustatus=? where userid=?";
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        System.out.println(Arrays.toString(ints));
    }


测试:
@Test
    public void batchUpdatebook() {
        //1、加载spring配置文件
        ApplicationContext Context = new ClassPathXmlApplicationContext("jdbc.xml");
        //2、获取配置文件对象
        BookService bookService = Context.getBean("bookService", BookService.class);
        List<Object[]> batchArgs = new ArrayList<>();
        Object[] o1 = {"java0909", "a3", "3"};
        Object[] o2 = {"c++1010", "b4", "4"};
        Object[] o3 = {"MySQL1111", "c5", "5"};
        batchArgs.add(o1);
        batchArgs.add(o2);
        batchArgs.add(o3); // 调用方法实现批量修改
        bookService.batchUpdate(batchArgs);
    }

3、同理使用JdbcTemplate 实现批量删除操作


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值