首先进行xml文件的配置,包括开启组件扫描,配置数据库连接池和创建jdbcTemplate对象;
<?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">
<!--组件扫描-->
<context:component-scan base-package="com.atguigu"></context:component-scan>
<!-- 数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close">
<property name="url" value="jdbc:mysql:///user_db" />
<property name="username" value="root" />
<property name="password" value="root" />
<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>
</beans>
其中@Autowired属于Spring内置的注解,默认的注入方式为byType(根据类型进行匹配),也就是说会优先根据接口类型去匹配并注入Bean(接口的实现类);但是,当一个接口存在多个类的话,byType这种方式就无法正常注入对象了,因为这个时候Spring会同时找到满足条件的选择,默认情况下它不知道自己选择哪一个。这种情况下,注入方式就会变为byName(根据名称进行匹配),这个名称通常就是类名(首字母小写)。
接下来是类BookService、接口BookDao和实现类BookDaoImpl:
BookService:
package com.atguigu.service;
import com.atguigu.dao.BookDao;
import com.atguigu.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class BookService {
//注入dao
@Autowired
private BookDao bookDao;
//添加的方法
public void addBook(Book book){
bookDao.add(book);
}
//修改的方法
public void updateBook(Book book){
bookDao.updateBook(book);
}
//删除方法
public void delete(Book book){
bookDao.delete(book);
}
//查询表的记录数
public int findCount(){
return bookDao.selectCount();
}
//查询返回对象
public Book fondOne(String id){
return bookDao.findBookInfo(id);
}
//查询返回集合
public List<Book> findAll(){
return bookDao.findAllBook();
}
//批量添加
public void batchAdd(List<Object[]> batchArgs){
bookDao.batchAddBook(batchArgs);
}
//批量修改
public void batchUpdateBook(List<Object[]> batchArgs){
bookDao.batchUpdateBook(batchArgs);
}
//批量删除
public void batchDelete(List<Object[]> batchArgs){
bookDao.batchDelete(batchArgs);
}
}
BookDao:
package com.atguigu.dao;
import com.atguigu.entity.Book;
import java.util.List;
public interface BookDao {
//添加方法
void add(Book book);
//修改方法
void updateBook(Book book);
//删除方法
void delete(Book book);
//查询表的记录数
int selectCount();
//查询返回对象
Book findBookInfo(String id);
//查询返回集合
List<Book> findAllBook();
//批量添加
void batchAddBook(List<Object[]> batchArgs);
//批量修改
void batchUpdateBook(List<Object[]> batchArgs);
//批量删除
void batchDelete(List<Object[]> batchArgs);
}
BookDaoImpl:
package com.atguigu.dao;
import com.atguigu.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.Arrays;
import java.util.List;
@Repository
public class BookDaoImpl implements BookDao{
//注入JdbcTemplate
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void add(Book book) {
//1.创建sql语句
String sql = "insert into t_book values(?,?,?)";
//2.调用方法实现
Object[] args = {book.getUserId(), book.getUsername(), book.getUstatus()};
int update = jdbcTemplate.update(sql, args);
System.out.println(update);
}
@Override
public void updateBook(Book book) {
String sql = "update t_book set username=?,ustatus=? where user_id=?";
Object[] args = {book.getUsername(),book.getUstatus(),book.getUserId()};
int update = jdbcTemplate.update(sql, args);
System.out.println(update);
}
@Override
public void delete(Book book) {
String sql = "delete from t_book where user_id=?";
int update = jdbcTemplate.update(sql, book.getUserId());
System.out.println(update);
}
@Override
public int selectCount() {
String sql = "select COUNT(*) FROM t_book";
return jdbcTemplate.queryForObject(sql,Integer.class);
}
@Override
public Book findBookInfo(String id) {
String sql = "select * from t_book where user_id=?";
Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
return book;
}
@Override
public List<Book> findAllBook() {
String sql = "select * from t_book";
List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
return bookList;
}
@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));
}
@Override
public void batchUpdateBook(List<Object[]> batchArgs) {
String sql = "update t_book set username=?,ustatus=? where user_id=?";
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(Arrays.toString(ints));
}
@Override
public void batchDelete(List<Object[]> batchArgs) {
String sql = "delete from t_book where user_id = ?";
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(Arrays.toString(ints));
}
}
最后进行测试:
package com.atguigu.test;
import com.atguigu.entity.Book;
import com.atguigu.service.BookService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.ArrayList;
import java.util.List;
public class TestBook {
@Test
public void testJdbcTemplate(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
BookService bookService = context.getBean("bookService", BookService.class);
//添加
// Book book = new Book();
// book.setUserId("1");
// book.setUsername("java");
// book.setUstatus("a");
// bookService.addBook(book);
//
// Book book2 = new Book();
// book2.setUserId("2");
// book2.setUsername("pathon");
// book2.setUstatus("b");
// bookService.addBook(book2);
//修改
// Book book = new Book();
// book.setUserId("1");
// book.setUsername("javaupup");
// book.setUstatus("atguigu");
// bookService.updateBook(book);
//删除
// Book book = new Book();
// book.setUserId("1");
// bookService.delete(book);
// System.out.println(bookService.findCount());
//查询返回对象
// Book book = bookService.fondOne("1");
// System.out.println(book.toString());
//查询返回集合
List<Book> bookList = bookService.findAll();
for (Book item : bookList){
System.out.println(item);
}
//批量添加
// List<Object[]> batchArgs = new ArrayList<>();
// Object[] o1 = {"3","spring","study"};
// Object[] o2 = {"4","springMVC","willStudy"};
// Object[] o3 = {"5","myBatis","willStudy"};
// batchArgs.add(o1);
// batchArgs.add(o2);
// batchArgs.add(o3);
// bookService.batchAdd(batchArgs);
//批量修改
// List<Object[]> batchArgs = new ArrayList<>();
// Object[] o1 = {"spring++","study++","3"};
// Object[] o2 = {"springMVC++","willStudy","4"};
// Object[] o3 = {"myBatis++","willStudy++","5"};
// batchArgs.add(o1);
// batchArgs.add(o2);
// batchArgs.add(o3);
// bookService.batchUpdateBook(batchArgs);
//批量删除
// List<Object[]> batchArgs = new ArrayList<>();
// Object[] o1 = {"1"};
// Object[] o2 = {"3"};
// Object[] o3 = {"5"};
// batchArgs.add(o1);
// batchArgs.add(o2);
// batchArgs.add(o3);
// bookService.batchDelete(batchArgs);
}
}