【Spring5】JdbcTemplate
阿新 • • 發佈:2022-04-09
JdbcTemplate實現對資料庫增刪改查
步驟
- 匯入Jar包
mysql-connector-java-8.0.28.jar:mysql資料庫連線的相關依賴
spring-tx-5.2.6.RELEASE.jar:Spring對資料庫事務操作封裝的相關依賴
spring-jdbc-5.2.6.RELEASE.jar:Spring對資料庫連線操作封裝的相關依賴
spring-orm-5.2.6.RELEASE.jar:Spring整合其他框架如Mybatis、Template需要用到的依賴。
druid-1.1.9.jar:德魯伊連線池依賴
- 在Spring配置檔案中配置資料庫連線池
<context:property-placeholder location="JDBC.properties"></context:property-placeholder> <bean id="DruidDataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${p.driverClassName}"></property> <property name="url" value="${p.url}"></property> <property name="username" value="${p.username}"></property> <property name="password" value="${p.password}"></property> </bean>
- 配置JdbcTemplate物件,並注入DataSource
xml
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${p.driverClassName}"></property> <property name="url" value="${p.url}"></property> <property name="username" value="${p.username}"></property> <property name="password" value="${p.password}"></property> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean>
BookDaoImpl
@Repository
public class BookDaoImpl implements BookDao {
@Autowired
@Qualifier(value = "jdbcTemplate")
private JdbcTemplate jdbcTemplate;
@Override public int add(Book book) { String sql = "insert into book(book_name, book_author) values (?, ?)"; int result = jdbcTemplate.update(sql, book.getBookName(), book.getAuthor()); return result; }
- 建立service和dao類,在service注入Dao,然後在dao裡注入JdbcTemplate進行資料庫操作
@Service
public class BookService {
@Autowired
private BookDao bookDao;
public void add(Book book) {
bookDao.add(book);
}
public BookDao getBookDao() {
return bookDao;
}
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
BookDao
public interface BookDao {
int add(Book book);
}
- 測試
@Test
public void test() {
ApplicationContext context =
new ClassPathXmlApplicationContext("bean.xml");
BookService bookService = (BookService) context.getBean("bookService");
// System.out.println(bookService.bookDao);
Book book = new Book();
book.setBookName("黑貓");
book.setAuthor("愛·倫坡");
bookService.add(book);
}
修改和刪除
BookDaoImpl
@Repository
public class BookDaoImpl implements BookDao {
@Autowired
@Qualifier(value = "jdbcTemplate")
private JdbcTemplate jdbcTemplate;
@Override
public int add(Book book) {
String sql = "insert into book(book_name, book_author) values (?, ?)";
int result = jdbcTemplate.update(sql, book.getBookName(), book.getAuthor());
return result;
}
@Override
public int modify(int id, Book book) {
String sql = "update book set book_name=?, book_author=? where book_id=?";
int result = jdbcTemplate.update(sql, book.getBookName(), book.getAuthor(), id);
return result;
}
@Override
public int delete(int id) {
String sql = "delete from book where book_id=?";
int result = jdbcTemplate.update(sql, id);
return result;
}
@Override
public int findCount() {
String sql = "select count(*) from book";
int result = jdbcTemplate.queryForObject(sql, Integer.class);
return result;
}
@Override
public Book findOne(int id) {
String sql = "SELECT book_name bookName, book_author author FROM book WHERE book_id = ?";
Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
return book;
}
@Override
public List<Book> findAll() {
String sql = "select book_name bookName, book_author author from book";
List<Book> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
return list;
}
}
BookDao
public interface BookDao {
int add(Book book);
int modify(int id, Book book);
int delete(int id);
}
BookService
@Service
public class BookService {
@Autowired
private BookDao bookDao;
public void add(Book book) {
bookDao.add(book);
public void modifyBook(int id, Book book) {
bookDao.modify(id, book);
}
public void deleteBook(int id) {
bookDao.delete(id);
}
}
測試
@Test
public void test() {
ApplicationContext context =
new ClassPathXmlApplicationContext("bean.xml");
BookService bookService = (BookService) context.getBean("bookService");
// Book book = new Book();
// book.setBookName("白夜行");
// book.setAuthor("東野圭吾");
// bookService.add(book);
bookService.deleteBook(4);
}
@Test
public void test2() {
ApplicationContext context =
new ClassPathXmlApplicationContext("bean.xml");
BookService bookService = (BookService) context.getBean("bookService");
Book book = new Book();
book.setBookName("ABC謀殺案");
book.setAuthor("阿加莎·克里斯蒂");
bookService.modifyBook(2, book);
}
返回聚合函式的某個值:public T queryForObject(String sql, Class requiredType)
@Override
public int findCount() {
String sql = "select count(*) from book";
int result = jdbcTemplate.queryForObject(sql, Integer.class);
return result;
}
查詢返回某個物件:public T queryForObject(String sql, RowMapper rowMapper, @Nullable Object... args)
rowMapper是一個介面,new BeanPropertyRowMapper(Book.class)為其介面實現類
@Override
public Book findOne(int id) {
String sql = "SELECT book_name bookName, book_author author FROM book WHERE book_id = ?";
Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
return book;
}
這裡sql語句中對欄位加入了別名,防止資料庫欄位名與類名不一致,實際上方法實現了對屬性對映的封裝,使得能夠根據屬性名和值得到一個例項
返回集合:public List query(String sql, RowMapper rowMapper)
@Override
public List<Book> findAll() {
String sql = "select book_name bookName, book_author author from book";
List<Book> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
return list;
}
JdbcTemplate實現批量新增功能:
public int[] batchAdd(List<Object[]> batchArgs),Object陣列元素為包含多個欄位的一個記錄
BookDaoImpl
@Override
public int[] batchAdd(List<Object[]> batchArgs) {
String sql = "insert into book(book_name, book_author) values (?, ?)";
int[] is = jdbcTemplate.batchUpdate(sql, batchArgs);
return is;
}
測試
@Test
public void batchAddTest() {
List<Object[]> list = new ArrayList<>();
Object[] o1 = {"米澤穗信", "冰菓"};
Object[] o2 = {"有棲川有棲", "孤島之謎"};
Object[] o3 = {"島田莊司", "斜屋犯罪"};
list.add(o1);
list.add(o2);
list.add(o3);
ApplicationContext context =
new ClassPathXmlApplicationContext("bean.xml");
BookService bookService = context.getBean("bookService", BookService.class);
int[] is = bookService.batchAdd(list);
System.out.println(Arrays.toString(is));
}