Spring 5(四)JdbcTemplate

简介: JdbcTemplate对jdbc进一步封装,在本文中你们会看到JdbcTemplate如何是代码简洁

四.JdbcTemplate

1.基本概念

  • 什么是JdbcTemplate?
  • Spring框架对]DBC进行封装,使用JdbcTemplate方便实现对数据库操作
  • 准备工作
  • 引入相关jar包
    网络异常,图片无法展示
    |

  • 在spring配置文件配置数据库连接池

<!-- 数据库连接池-->

<beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"

     destroy-method="close">

   <propertyname="url"value="jdbc:mysql:///db02?serverTimezone=UTC"/>

   <propertyname="username"value="root"/>

   <propertyname="password"value="123456"/>

   <propertyname="driverClassName"value="com.mysql.cj.jdbc.Driver"/>

</bean>

  • 配置JdbcTemplate对象,注入DataSource

<!--JdbcTemplate对象-->

<beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate">

   <!--注入dataSource-->

   <propertyname="dataSource"ref="dataSource"/>

</bean>

  • 创建service类,创建dao类,在dao注入jdbcTemplate对象
  • 配置文件

<!--组件扫描-->

<context:component-scanbase-package="com.gbx"/>

  • Service

@Service

publicclassBookService {

   //注入dao

   @Autowired

   privateBooKDaobooKDao;

}

  • Dao

@Repository

publicclassBookImplimplementsBooKDao{

   //注入JdbcTemplate

   @Autowired

   privateJdbcTemplatejdbcTemplate;

}

2.操作数据库

2.1添加
  • 对应数据库创建实体类

publicclassUser {

   privateStringuserId;

   privateStringusername;

   privateStringustatus;

   publicvoidsetUserId(StringuserId) {

       this.userId=userId;

   }

   publicvoidsetUsername(Stringusername) {

       this.username=username;

   }

   publicvoidsetUstatus(Stringustatus) {

       this.ustatus=ustatus;

   }

}

  • 编写service和dao
  • 在dao进行数据库添加操作
  • 调用JdbcTemplate对象里面update方法实现添加操作
    网络异常,图片无法展示
    |

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

@Repository

publicclassBookImplimplementsBooKDao{

   //注入JdbcTemplate

   @Autowired

   privateJdbcTemplatejdbcTemplate;

   //添加的方法

   @Override

   publicvoidadd(Bookbook) {

       //1 创建sql语句

       Stringsql="insert into t_book values (?,?,?)";

       //2 调用方法实现

       Object[] args= {book.getUserId(),book.getUsername(),book.getUstatus()};

       intupdate=jdbcTemplate.update(sql,args);

       System.out.println(update);

   }

}

  • 测试类

@Test

   publicvoidtestJdbcTemplate(){

       ApplicationContextcontext=

               newClassPathXmlApplicationContext("bean1.xml");

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

       Bookbook=newBook();

       book.setUserId("1");

       book.setUsername("三国");

       book.setUstatus("售罄");

       bookService.addBook(book);

   }

  • 网络异常,图片无法展示
    |
2.2修改和删除

Service 层

//修改的方法

publicvoidupdate(Bookbook){

   booKDao.updateBook(book);

}

//删除的方法

publicvoiddelete(Stringid){

   booKDao.deleteBook(id);

}

Dao 层

   voidupdateBook(Bookbook);

   voiddeleteBook(Stringid);

实现类

//修改

@Override

publicvoidupdateBook(Bookbook) {

   //1 创建sql语句

   Stringsql="update t_book set username=?,ustatus=?,where user_id=?";

   //2 调用方法实现

   Object[] args= {book.getUsername(),book.getUstatus(),book.getUserId()};

   intupdate=jdbcTemplate.update(sql,args);

   System.out.println(update);

}

//删除

@Override

publicvoiddeleteBook(Stringid) {

   //1 创建sql语句

   Stringsql="delete from t_book where user_id=?";

   //2 调用方法实现

   intupdate=jdbcTemplate.update(sql,id);

   System.out.println(update);

}

Test类

//修改

Bookbook=newBook();

book.setUserId("1");

book.setUsername("三国演义");

book.setUstatus("在售");

bookService.update(book);

//删除

bookService.delete("1");

2.3查询
2.3.1查询返回某个值
  • 查询表里面有多少条记录,返回是某个值
  • 使用JdbcTemplate实现查询返回某个值代码
    网络异常,图片无法展示
    |
  • 有两个参数
  • 第一个参数:sql语句
  • 第二个参数:返回类型Class

   //查询表记录

   @Override

   publicintselectCount() {

       Stringsql=  "select count(*) from t_book";

       Integercount=jdbcTemplate.queryForObject(sql, Integer.class);

       returncount;

   }

2.3.2查询返回对象
  • 场景:查询图书详情
  • JdbcTemplate实现
    网络异常,图片无法展示
    |
  • 有三个参数
  • 第一个参数:sql语句
  • 第二个参数:RowMapper,是接口,返回不同类型数据,使用这个接口里面实现类完成数据封装
  • 第三个参数:sql语句值

//查询返回对象

@Override

publicBookfindBookInfo(Stringid) {

   Stringsql="select * from t_book where userid=?";

   Bookbook=jdbcTemplate.queryForObject(sql, newBeanPropertyRowMapper<Book>(Book.class), id);

   returnbook;

}

2.3.3查询返回集合
  • 场景:查询图书列表分页...
  • 调用JdbcTemplate方法实现查询返回集合
    网络异常,图片无法展示
    |
  • 有三个参数
  • 第一个参数:sql语句
  • 第二个参数:RowMapper,是接口,返回不同类型数据,使用这个接口里面实现类完成数据封装
  • 第三个参数:sql语句值

   //查询返回集合

   @Override

   publicList<Book>findAllBook() {

       Stringsql="select * from t_book";

       List<Book>bookList=jdbcTemplate.query(sql, newBeanPropertyRowMapper<Book>(Book.class));

       returnbookList;

   }

2.4批量操作
2.4.1批量添加
  • 批量操作:操作表里面多条记录
  • ]dbcTemplate实现批量添加操作
    网络异常,图片无法展示
    |
  • 有两个参数
  • 第一个参数:sql语句
  • 第二个参数:List集合,添加多条记录数据

//批量添加

@Override

publicvoidbatchAddBook(List<Object[]>batchArgs) {

   Stringsql="insert into t_book values (?,?,?)";

   int[] ints=jdbcTemplate.batchUpdate(sql,batchArgs);

   System.out.println(Arrays.toString(ints));

}

Test类

       //批量添加

       List<Object[]>batchArgs=newArrayList<>();

       Object[]o1= {"3","java","a"};

       Object[]o2= {"2","py","b"};

       Object[]o3= {"4","C++","c"};

       batchArgs.add(o1);

       batchArgs.add(o2);

       batchArgs.add(o3);

       //调用批量参加

       bookService.batchAdd(batchArgs);

2.4.2批量修改

@Override

publicvoidbatchUpdateBook(List<Object[]>batchArgs) {

   Stringsql="update t_book set username=?,ustatus=?where user_id=?";

   int[] ints=jdbcTemplate.batchUpdate(sql, batchArgs);

   System.out.println(ints);

}

       //批量修改

       List<Object[]>batchArgs=newArrayList<>();

       Object[]o1= {"java","在售","4"};

       Object[]o2= {"py","售罄","9"};

       Object[]o3= {"C++","在售","6"};

       batchArgs.add(o1);

       batchArgs.add(o2);

       batchArgs.add(o3);

       bookService.batchUpdate(batchArgs);

2.4.3批量删除

@Override

publicvoidbatchDeleteBook(List<Object[]>batchArgs) {

   Stringsql="delete from t_book where user_id=?";

   int[] ints=jdbcTemplate.batchUpdate(sql, batchArgs);

   System.out.println(Arrays.toString(ints));

}

       //批量修改

       List<Object[]>batchArgs=newArrayList<>();

       Object[]o1= {"4"};

       Object[]o2= {"9"};

       Object[]o3= {"6"};

       batchArgs.add(o1);

       batchArgs.add(o2);

       batchArgs.add(o3);

       bookService.batchDelete(batchArgs);


目录
相关文章
|
2月前
|
Java Spring
使用JDBCTemplate实现与Spring结合,方法公用 ——测试(EmpDaoImplTest)
使用JDBCTemplate实现与Spring结合,方法公用 ——测试(EmpDaoImplTest)
9 0
|
5月前
|
XML Java 数据库
【Spring】通过JdbcTemplate实现CRUD操作
【Spring】通过JdbcTemplate实现CRUD操作
33 0
|
4月前
|
XML Java 关系型数据库
Spring6 JdbcTemplate和事务
Spring6 JdbcTemplate和事务
|
1月前
|
SQL Java 数据库连接
jpa、hibernate、spring-data-jpa、jdbcTemplate
jpa、hibernate、spring-data-jpa、jdbcTemplate
|
2月前
|
Java Spring
使用JDBCTemplate实现与Spring结合,方法公用 ——Emp实现类(EmpDaoImpl)
使用JDBCTemplate实现与Spring结合,方法公用 ——Emp实现类(EmpDaoImpl)
8 0
|
2月前
|
Java Spring
使用JDBCTemplate实现与Spring结合,方法公用 ——共用实现类(BaseImpl)
使用JDBCTemplate实现与Spring结合,方法公用 ——共用实现类(BaseImpl)
10 1
|
2月前
|
Java Spring
使用JDBCTemplate实现与Spring结合,方法公用 ——接口(BaseDao)
使用JDBCTemplate实现与Spring结合,方法公用 ——接口(BaseDao)
9 0
|
2月前
|
Java Spring
使用JDBCTemplate实现与Spring结合,方法公用
使用JDBCTemplate实现与Spring结合,方法公用
7 0
|
4月前
|
SQL Java 数据库连接
Spring 模板技术JdbcTemplate
Spring 模板技术JdbcTemplate
32 0
Spring 模板技术JdbcTemplate
|
4月前
|
Java 数据库连接 数据库
Spring之JdbcTemplate(带你一篇文章搞定JdbcTemplate)
Spring之JdbcTemplate(带你一篇文章搞定JdbcTemplate)