JDBCTemplat
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBCTemplat相关的知识,希望对你有一定的参考价值。
1、JdbcTemplate介绍
为了使 JDBC 更加易于使用,Spring 在 JDBCAPI 上定义了一个抽象层, 以此建立一个JDBC存取框架,Spring Boot Spring Data-JPA。
作为 SpringJDBC 框架的核心, JDBC 模板的设计目的是为不同类型的JDBC操作提供模板方法. 每个模板方法都能控制整个过程,并允许覆盖过程中的特定任务。
通过这种方式,可以在尽可能保留灵活性的情况下,将数据库存取的工作量降到最低。
2、JdbcTemplate方法介绍
JdbcTemplate主要提供以下五类方法:
1、execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
Execute、executeQuery、executeUpdate
2、update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句 SQL SERVCER(GO SQL语句 GO) ;
3、query方法及queryForXXX方法:用于执行查询相关语句;
4、call方法:用于执行存储过程、函数相关语句。
一.配置式:
首先DAO层(以图书为例):
package com.jdbc.dao;
import com.jdbc.entity.Book;
import java.util.List;
public interface IBookDao {
//查询所有图书信息
public List<Book> getBook();
}
package com.jdbc.dao.impl;
import com.jdbc.dao.IBookDao;
import com.jdbc.entity.Book;
import com.jdbc.entity.User;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
import java.util.List;
@Repository
public class IBookDaoImpl implements IBookDao {
@Override
public List<Book> getBook() {
JdbcTemplate template = this.getJdbcTemplate();
String sql="select * from book";
List<Book> list = template.query(sql, new RowMapper<Book>() {
@Override
public Book mapRow(ResultSet rs, int rowNum) throws SQLException {
Book book = new Book();
book.setBid(rs.getString("bid"));
book.setBname(rs.getString("bname"));
book.setBauthor(rs.getString("bauthor"));
book.setBprice(rs.getDouble("bprice"));
return book;
}
});
return list;
}
Service层(同dao层方法一样):
package com.jdbc.service;
import com.jdbc.entity.Book;
import com.jdbc.entity.User;
import java.util.List;
public interface IBookService {
public List<Book> getBook();
}
package com.jdbc.service.impl;
import com.jdbc.dao.IBookDao;
import com.jdbc.dao.impl.IBookDaoImpl;
import com.jdbc.entity.Book;
import com.jdbc.service.IBookService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service("bookService")
public class IBookServiceImpl implements IBookService {
@Resource
private IBookDao bookDao;
@Override
public List<Book> getBook() {
return bookDao.getBook();
}
public IBookDao getBookDao() {
return bookDao;
}
public void setBookDao(IBookDao bookDao) {
this.bookDao = bookDao;
}
}
然后测试:
import com.jdbc.entity.Book;
import com.jdbc.entity.User;
import com.jdbc.service.IBookService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class IBookJdbcTemplateTest {
/**
*
* 查询所有图书
*
*/
@Test
public void bookTest(){
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext_jdbcTemplate.xml");
IBookService bookService=(IBookService) ctx.getBean("bookService");
List<Book> book = bookService.getBook();
for (Book items:book){
System.out.println("书籍编号:"+items.getBid());
System.out.println(" 名称:"+items.getBname());
System.out.println(" 作者:"+items.getBauthor());
System.out.println(" 价格:"+items.getBprice());
System.out.println("================");
}
}
二.注解
以用户为例(我这里用的依旧是Book的接口和类):
DAO层(增删改查都在里边):
package com.jdbc.dao;
import com.jdbc.entity.Book;
import com.jdbc.entity.User;
import java.util.List;
public interface IBookDao {
//查询所有图书信息
public List<Book> getBook();
//查询所有用户 public List<User> getAllUser(); //添加用户 public int addUser(User user); //删除用户 public int deleteUser(int id); //修改用户 public int setUser(String name,int id); }
package com.jdbc.dao.impl;
import com.jdbc.dao.IBookDao;
import com.jdbc.entity.Book;
import com.jdbc.entity.User;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
import java.util.List;
@Repository
public class IBookDaoImpl implements IBookDao {
@Resource
private JdbcTemplate jdbcTemplate;
@Override
public List<Book> getBook() {
//JdbcTemplate template = this.getJdbcTemplate();
String sql="select * from book";
/*List<Book> list = template.query(sql, new RowMapper<Book>() {
@Override
public Book mapRow(ResultSet rs, int rowNum) throws SQLException {
Book book = new Book();
book.setBid(rs.getString("bid"));
book.setBname(rs.getString("bname"));
book.setBauthor(rs.getString("bauthor"));
book.setBprice(rs.getDouble("bprice"));
return book;
}
});*/
RowMapper<Book> rmapp=new BeanPropertyRowMapper<>(Book.class);
List<Book> list = jdbcTemplate.query(sql, rmapp);
return list;
}
@Override
public List<User> getAllUser() {
String sql="select * from user";
RowMapper<User> umapper=new BeanPropertyRowMapper<>(User.class);
List<User>list = jdbcTemplate.query(sql, umapper);
return list;
}
@Override
public int addUser(User user) {
String sql="insert into user (uid,uname,upwd) values(?,?,?)";
Object [] obj={user.getUid(),user.getUname(),user.getUpwd()};
int count = jdbcTemplate.update(sql,obj);
return count;
}
@Override
public int deleteUser(int id) {
String sql="delete from user where uid=?";
int count = jdbcTemplate.update(sql, id);
return count;
}
@Override
public int setUser(String name,int id) {
String sql="UPDATE `user` SET uname=? WHERE uid=?";
int count = jdbcTemplate.update(sql, name, id);
return count;
}
}
Service层和前边一样这里就不拿出来了
然后是测试类:
import com.jdbc.entity.Book;
import com.jdbc.entity.User;
import com.jdbc.service.IBookService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class IBookJdbcTemplateTest {
/**
*
* 查询所有图书
*
*/
@Test
public void bookTest(){
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext_jdbcTemplate.xml");
IBookService bookService=(IBookService) ctx.getBean("bookService");
List<Book> book = bookService.getBook();
for (Book items:book){
System.out.println("书籍编号:"+items.getBid());
System.out.println(" 名称:"+items.getBname());
System.out.println(" 作者:"+items.getBauthor());
System.out.println(" 价格:"+items.getBprice());
System.out.println("================");
}
}
/**
*
* 查询所有用户
*/
@Test
public void UTest(){
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext_jdbcTemplate.xml");
IBookService bookService=(IBookService) ctx.getBean("bookService");
List<User> list=bookService.getAllUser();
for (User us:list){
System.out.println(us.getUname());
}
}
/**
*
* 添加用户
*/
@Test
public void addTest(){
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext_jdbcTemplate.xml");
IBookService bookService=(IBookService) ctx.getBean("bookService");
User us=new User();
us.setUid(4);
us.setUname("hehe");
us.setUpwd("8888");
int count = bookService.addUser(us);
System.out.println("成功!共"+count+"行受影响!");
}
/**
*
* 删除用户
*/
@Test
public void deleteTest(){
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext_jdbcTemplate.xml");
IBookService bookService=(IBookService) ctx.getBean("bookService");
int count = bookService.deleteUser(3);
System.out.println("删除成功! 共"+count+"行受影响!");
}
/**
*
* 修改用户
*/
@Test
public void updateUserTest(){
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext_jdbcTemplate.xml");
IBookService bookService=(IBookService) ctx.getBean("bookService");
int count = bookService.setUser("dyuy", 2);
System.out.println("修改成功! 共"+count+"行受影响!");
}
}
执行结果就不再写出来了!
以上是关于JDBCTemplat的主要内容,如果未能解决你的问题,请参考以下文章