什么是JdbcTemplate
Spring框架对JDBC进行封装,我们使用JdbcTemplate可以方便实现对数据库的增删改查操作。
JdbcTemplate使用的准备工作
(1)引入相关jar包
(2)在spring配置文件中配置数据库连接池
<!--数据库连接池-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="url" value="jdbc:mysql://localhost:3306/book_db?useSSL=false&serverTimezone=UTC"/>
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
(3)配置JdbcTemplate对象,注入DataSource
<!--创建JdbcTemplate对象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--注入dataSource-->
<property name="dataSource" ref="dataSource"></property>
</bean>
(4)创建一个service类、dao类,在dao类当中注入jdbcTemplate对象
<!--组件扫描-->
<context:component-scan base-package="dao"></context:component-scan>
<context:component-scan base-package="service"></context:component-scan>
@Service
public class BookService {
//注入dao
@Autowired
private BookDao bookDao;
}
public interface BookDao {
}
@Repository
public class BookDaoImpl implements BookDao{
//注入JdbcTemplate
@Autowired
private JdbcTemplate jdbcTemplate;
}
JdbcTemplate操作数据库
添加操作
1.对应数据库创建实体类(一个表对应一个实体类)
public class Book {
private int book_id;
private String book_name;
public int getBook_id() {
return book_id;
}
public String getBook_name() {
return book_name;
}
public void setBook_id(int book_id) {
this.book_id = book_id;
}
public void setBook_name(String book_name) {
this.book_name = book_name;
}
}
2.编写service和dao
(1)在dao类当中进行数据库添加操作
(2)调用JdbcTemplate对象里面update方法实现添加操作
Tips:第一个参数:sql语句
第二个参数:可变参数,设置sql语句当中的值
@Repository
public class BookDaoImpl implements BookDao{
//注入JdbcTemplate
@Autowired
private JdbcTemplate jdbcTemplate;
//添加的实现方法
@Override
public void add(Book book) {
String sql = "insert into book values(?,?)";
Object[] args = {book.getBook_id(),book.getBook_name()};
//返回数据库中被影响的行数
int update = jdbcTemplate.update(sql, args);
System.out.println(update);
}
}
3.测试类测试效果
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("bean.xml");
BookService bookService = context.getBean("bookService", BookService.class);
Book book = new Book();
book.setBook_id(1);
book.setBook_name("java");
bookService.addBook(book);
}
删除操作
//删除的实现方法
@Override
public void delete(int id) {
String sql = "delete from book where book_id=?";
Object[] args = {id};
//返回数据库中被影响的行数
int update = jdbcTemplate.update(sql, args);
System.out.println(update);
}
修改操作
// 修改的实现方法
@Override
public void modify(Book book) {
String sql = "update book set book_name=? where book_id=?";
Object[] args = {book.getBook_name(),book.getBook_id()};
//返回数据库中被影响的行数
int update = jdbcTemplate.update(sql, args);
System.out.println(update);
}
查询操作
1.查询返回某个值
举例:查询表里有多少条记录,返回时某个具体的值
调用JdbcTemplate对象里面queryForObject方法实现添加操作
第一个参数:sql语句
第二个参数:返回类型 .class
//查询表中记录数的实现方法
@Override
public int query() {
String sql = "select count(*) from book";
Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
return count;
}
2.查询返回对象
JdbcTemplate实现查询返回对象,用的是下图当中的方法:
第一个参数:sql语句
第二个参数:RowMapper是一个接口,可返回不同数据类型,使用这个接口里面的实现类完成数据封装
第三个参数:可变参数,设置sql语句当中的值
@Override
public Book findBookInfo(int id) {
String sql = "select * from book where book_id=?";
//调用jdbcTemplate对象的方法
Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
return book;
}
防止获取空结果导致的异常,我们还可以这样修改一下代码:
@Override
public Book findBookInfo(int id) {
String sql = "select * from book where book_id=?";
//调用jdbcTemplate对象的方法
Book book = null;
try {
book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
}catch (EmptyResultDataAccessException e){
book = null;
}
return book;
}
3.查询返回集合
JdbcTemplate实现查询返回一个集合,用的是下图当中的方法:
第一个参数:sql语句
第二个参数:RowMapper是一个接口,可返回不同数据类型,使用这个接口里面的实现类完成数据封装
第三个参数:可变参数,设置sql语句当中的值
@Override
public List<Book> findAllBook() {
String sql = "select * from book";
List<Book> bookList = null;
bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
return bookList;
}
JdbcTemplate批量操作数据库
批量操作:操作数据库表里的多条记录
JdbcTemplate实现批量添加操作
第一个参数:sql语句
第二个参数:待添加的数据集合(List集合)
@Override
public void batchAddBook(List<Object[]> batchArgs) {
String sql = "insert into book values(?,?)";
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(Arrays.toString(ints));
}
JdbcTemplate实现批量修改操作
@Override
public void batchModifyBook(List<Object[]> batchArgs) {
String sql = "update book set book_name=? where book_id=?";
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(Arrays.toString(ints));
}
JdbcTemplate实现批量删除操作
@Override
public void batchDeleteBook(List<Object[]> batchArgs) {
String sql = "delete from book where book_id=?";
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(Arrays.toString(ints));
}