JdbcTemplate详解

一、JdbcTemplate(概念和准备)

1 、什么是 JdbcTemplate(Template译为模板)
1 Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作
 
2 、准备工作
1 )引入相关 jar

2 )在 spring 配置文件配置数据库连接池
com.alibaba.druid.pool.DruidDataSource和com.mysql.jdbc.Driver 都是引入的jar包内的类,不需要自己创建
3 )配置 JdbcTemplate 对象,注入 DataSource(即数据库、数据源)
 
  • JdbcTemplate是jar包里的类,不是自己创建的。
  • JdbcTemplate中有个属性叫:dataSource,源码中已经为其设置了set方法,所以用的是set方法注入属性
  • JdbcTemplate的属性dataSource注入的正是上面数据库连接池对象,等于说把JdbcTemplate对象和数据库连接起来了
     
 
(4 )使用注解来创建对象和注入属性,所以需要开启组件扫描
 

完整的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"
       xmlns:aop="http://www.springframework.org/schema/aop"
       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
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!-- 数据库连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
          destroy-method="close">
        <property name="url" value="jdbc:mysql:///user_db" /><!--对应SQLyog里的数据库-->
        <property name="username" value="root" />            <!-- 用户名 -->
        <property name="password" value="4.233928" />        <!-- 密码 -->
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    </bean>

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

    <!-- 组件扫描 -->
    <context:component-scan base-package="JDBC"></context:component-scan>

</beans>

 

 

二、JdbcTemplate 操作数据库(添加)

需求:在表Book中添加一行数据(下图是已经添加完的)

1、对应数据库创建实体类(三个属性对应表Book的三个参数)

package JDBC;

public class Book {

    private String userid;
    private String username;
    private String ustatus;

    public String getUserid() {
        return userid;
    }

    public String getUsername() {
        return username;
    }

    public String getUstatus() {
        return ustatus;
    }

    public void setUserid(String userid) {
        this.userid = userid;
    }

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

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

2、接口BookDao,定义增删查改方法

package JDBC;

public interface BookDao {
    //添加(增)
    public void add(Book book);
}

3、接口BookDao的实现类:BookDaoImp

 

  • 重写add(Book book)方法,向数据库的表中添加数据
  • JdbcTemplate是jar包org.springframework.jdbc.core中的,添加注解@Autowired后,已经自动注入到JdbcTemplate jdbcTemplate中了。

package JDBC;

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

@Repository
public class BookDaoImp implements BookDao{

    //按类型、自动注入了JdbcTemplate对象(jdbcTemplate即已经是有实体的对象了)
    //JdbcTemplate对象对象里有增删查改的方法,用来操作数据库
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void add(Book book) {

        //创建添加的sql语句
        String addsql = "insert into Book values(?,?,?)";
        //调用jdbcTemplate.update实现添加,book.getUserid()、book.getUsername()、book.getUstatus()对应values(?,?,?)里的三个问号
        Object[] args = {book.getUserid(), book.getUsername(), book.getUstatus()};
        int update = jdbcTemplate.update(addsql,args);
        //返回值update代表添加了几行
        System.out.println(update);//1
    }
}

 

 

4、BookService类4、BookService类5

package JDBC;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class BookService {
    
    //BookDaoImp类上添加了注解@Repository,即已经生成了他的对象
    //按类型、自动注入了BookDaoImp的对象
    @Autowired
    private BookDao bookDao;

    public void addBook(Book book){
        bookDao.add(book);
    }
}

5、测试 :获取BookService类的对象bookService,调用addBook(book)。

package JDBC;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class JDBCTest {

    @Test
    public void test(){

        ApplicationContext context = new ClassPathXmlApplicationContext("bean7.xml");
        BookService bookService = context.getBean("bookService", BookService.class);

        Book book = new Book();
        book.setUserid("1");
        book.setUsername("java");
        book.setUstatus("active");

        bookService.addBook(book);

    }
}

 

——一般这些是从网页上获得的,这里我们手动输入

 

最终效果:

三、JdbcTemplate 操作数据库(删、改)——只需修改以下几个文件

package JDBC;

public interface BookDao {
    //添加(增)
    public void add(Book book);


    //修改
    public void update(Book book);

    //删除(根据id删除)
    public void delete(String id);
    
}
package JDBC;

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

@Repository
public class BookDaoImp implements BookDao{

    //按类型、自动注入了JdbcTemplate对象
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void add(Book book) {

        //创建添加的sql语句
        String addsql = "insert into Book values(?,?,?)";
        //调用jdbcTemplate.update实现添加,book.getUserid()、book.getUsername()、book.getUstatus()对应values(?,?,?)里的三个问号
        Object[] args = {book.getUserid(), book.getUsername(), book.getUstatus()};
        int update = jdbcTemplate.update(addsql,args);
        //返回值update代表添加了几行
        System.out.println(update);
    }

    @Override
    public void update(Book book) {
        //根据id修改username ustatus
        String updatesql = "update Book set username=?,ustatus=?where user_id=?";
        Object[] args = {book.getUsername(), book.getUstatus(),book.getUserid(),};//注意参数顺序
        int update = jdbcTemplate.update(updatesql,args);
    }

    @Override
    public void delete(String id) {
        //根据user_id删除
        String deletesql = "delete from Book where user_id=?";
        int update = jdbcTemplate.update(deletesql,id);
    }
}
package JDBC;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class BookService {

    //按类型、自动注入了BookDaoImp的对象
    @Autowired
    private BookDao bookDao;

    public void addBook(Book book){
        bookDao.add(book);
    }


    public void update(Book book){
        bookDao.update(book);
    }

    public void delete(String id){
        bookDao.delete(id);
    }

}

 

四、JdbcTemplate 查询操作

1、查询返回的是某个值

2、查询返回的是某个对象

3、查询返回的是某个集合

五、批量操作

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 
 
  • 42
    点赞
  • 258
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值