jdbctemplate
Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们通常说的JDBC是面向关系型数据库的。
jdbc是sun公司为各个数据库厂商提供数据库与java脚本连接的接口,其中的数据库和java的实现由数据库厂商来实现,我们直接使用就好。
在我们使用jdbc的时候,仍然有许多的麻烦的地方,例如必须自己来管理数据库资源如:获取PreparedStatement,设置SQL语句参数忘记关闭连接等,所以spring框架为我们封装了jdbc——jdbctemplate。
JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。JdbcTemplate是Spring的一部分。JdbcTemplate处理了资源的建立和释放。他帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果。
1 准备工作
1.1导入包
首先我们需要准备orm包(非必要,主要功能是连接其他的拓展包如mybatis等)、mysql-connection(连接数据库的包)、druid(数据库连接池)、spring-jdbc(spring帮助整合的jdbc包)、spring-tx(处理事务的包)的jar包
1.2配置文件
配置连接池,通过druid和mysql-connection来创建连接数据库的容器并注入信息
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="password" value="wjzkx123"></property>
<property name="username" value="root"></property>
<property name="url" value="jdbc:mysql://localhost:3306/work"></property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
</bean>
1.3配置JdbcTemplate对象
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
1.4创建用户类和配置文件
创建BookDao接口
package com.example.spring5_demo4.dao;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
@Resource
public interface BookDao {
}
创建BookDaoImpl类实现BookDao接口
package com.example.spring5_demo4.dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class BookDaoImpl implements BookDao{
@Autowired
public JdbcTemplate jdbcTemplate;
}
创建BookService
package com.example.spring5_demo4.service;
import com.example.spring5_demo4.dao.BookDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookService {
//注入dao
@Autowired
private BookDao bookDao;
}
1.7对xml配置进行注解扫描
<context:component-scan base-package="com.example"></context:component-scan>
1.8创建数据库表
DROP TABLE IF EXISTS `t_book`;
CREATE TABLE `t_book` (
`book_id` bigint(20) NOT NULL AUTO_INCREMENT,
`bookname` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`bstatus` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`book_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 123458 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
2.通过jdbc对数据进行操作
2.1增加
2.1.1单个增加
在BookDao中添加add()方法
public void add(Book book);
在BookDaoImpl中添加add()方法的实现类
@Override
public void add(Book book) {
String sql = "insert into t_book values(?,?,?)";
Object[] args = {book.getBookId(),book.getBookname(),book.getBstatus()};
int update = jdbcTemplate.update(sql,args);
System.out.println("插入成功");
System.out.println(update);
}
创建jdbcTemplate来调用spring给我们封装好的update函数
BookService中创建调用BookDao的方法
public void addBook(Book book){
bookDao.add(book);
}
创建test类,并写入操作来测试是否成功
@Test
public void testJdbc(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
BookService bookService = context.getBean("bookService",BookService.class);
Book book = new Book();
book.setBookId("123456");
book.setBookname("java");
book.setBstatus("a");
bookService.addBook(book);
}
2.1.2批量添加
在BookDao中创建batchAddBook方法
void batchAddBook(List<Object[]> batchArgs);
在BookService中创建batchadd
public void batchadd(List <Object[]> batchArgs){
return bookDao.batchAddBook(batchArgs);
}
在BookDaoImpl中创建实现方法
@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));
}
在测试类中写测试代码
@Test
public void testJdbc7(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
BookService bookService = context.getBean("bookService",BookService.class);
List<Object[]> batchArags = new ArrayList<>();
Object[] o1 = {"114514","野兽","123"};
Object[] o2 = {"1919810","恶臭","asfd"};
Object[] o3 = {"22222","奥里给","afff"};
batchArags.add(o1);
batchArags.add(o2);
batchArags.add(o3);
bookService.batchadd(batchArags);
}
2.2删除
2.2.1单个删除
在BookDao中添加delete方法
public void delete(String id);
在BookDaoImpl中添加delete()方法的实现类
@Override
public void delete(String id) {
String sql = "delete from t_book where book_id = ?";
Object[] args = {id};
int update = jdbcTemplate.update(sql,args);
System.out.println("删除成功");
System.out.println(update);
}
创建jdbcTemplate来调用spring给我们封装好的update函数
在BookService中添加方法
public void deleteBook(String id){
bookDao.deleteBook(id);
}
在test类里面添加方法
@Test
public void testJdbc(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
BookService bookService = context.getBean("bookService",BookService.class);
String id = "4";
bookService.deleteBook(id);
}
2.2.2删除多个
在BookDao中创建删除多个的方法
void batchdeletebook(List<Object[]> batchArgs);
在BookService中添加
public void batchdeleteBook(List<Object[]> batchArgs){
bookDao.batchdeletebook(batchArgs);
}
在BookDaoImpl中添加实现类
@Override
public void batchdeletebook(List<Object[]> batchArgs) {
String sql = "delete from t_book where book_id = ?";
int[] ints = jdbcTemplate.batchUpdate(sql,batchArgs);
System.out.println(ints);
}
创建测试类
@Test
public void testJdbc9(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
BookService bookService = context.getBean("bookService",BookService.class);
List<Object[]> batchArags = new ArrayList<>();
Object[] o1 = {"114514"};
Object[] o2 = {"1919810"};
Object[] o3 = {"22222"};
batchArags.add(o1);
batchArags.add(o2);
batchArags.add(o3);
bookService.batchdeleteBook(batchArags);
}
2.3查找
2.3.1查找数据库数据量
在BookDao中创建方法
public int selectCount();
在BookService中创建findCount方法
public int findCount(){
return bookDao.selectCount();
}
在BookDaoImpl中创建select的实现类
@Override
public int selectCount() {
String sql = "select count(*) from t_book";
Integer count = (Integer) jdbcTemplate.queryForObject(sql, Integer.class);
return count;
}
创建测试类
@Test
public void testJdbc4(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
BookService bookService = context.getBean("bookService",BookService.class);
int i = bookService.findCount();
System.out.println(i);
}
2.3.2查找单个数据
在BookDao中创建方法
public Book findBookInfo(String id);
在BookService中创建findCount方法
public Book findBookInfo(String id){
return bookDao.findBookInfo(id);
}
在BookDaoImpl中创建select的实现类
@Override
public Book findBookInfo(String id) {
String sql = "select * from t_book where book_id=?";
Book book = jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<Book>(Book.class),id);//rowmapper帮我们封装,是个接口,返回不同数据类型,使用这个接口里面实现类完成数据封装装
return book;
}
创建测试类
@Test
public void testJdbc5(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
BookService bookService = context.getBean("bookService",BookService.class);
Book book = bookService.findBookInfo("1234");
System.out.println(book.toString());
}
2.3.3查找所有数据(List)
在BookDao中创建方法
public List<Book> findALLbook();
在BookService中创建findCount方法
public List<Book> findAll(){
return bookDao.findALLbook();
}
在BookDaoImpl中创建select的实现类
@Override
public List<Book> findALLbook() {
String sql = "select * from t_book";
List<Book> books = jdbcTemplate.query(sql,new BeanPropertyRowMapper<Book>(Book.class));
return books;
}
创建测试类
@Test
public void testJdbc6(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
BookService bookService = context.getBean("bookService",BookService.class);
List<Book> all = bookService.findAll();
System.out.println(all);
}
2.4修改
2.4.1 单个修改
在BookDao中添加delete方法
public void update(String id);
在BookDaoImpl中添加delete()方法的实现类
@Override
public void update(String id) {
String sql = "update t_book set bookname=?,bstatus=? where book_id=?";
Object[] args = {book.getBookname(),book.getBstatus(),book.getBookId()};
int update = jdbcTemplate.update(sql,args);
System.out.println(update);
}
创建jdbcTemplate来调用spring给我们封装好的update函数
在BookService中添加方法
public void updateBook(String id){
bookDao.update(id);
}
在test类里面添加方法
@Test
public void testJdbc(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
BookService bookService = context.getBean("bookService",BookService.class);
Book book = new Book();
book.setBookId("123456");
book.setBookname("javaee");
book.setBstatus("abcdef");
bookService.updateBook(book);
}
2.4.2批量修改
在BookDao中添加方法
void batchUpdatebook(List<Object[]> batchArgs);
在BookService中添加方法
public void batchUpdateBook(List<Object[]> batchArgs){
bookDao.batchUpdatebook(batchArgs);
}
在BookDaoImpl中添加实现方法
@Override
public void batchUpdatebook(List<Object[]> batchArgs) {
String sql = "update t_book set bookname=?,bstatus=? where book_id=?";
int[] ints = jdbcTemplate.batchUpdate(sql,batchArgs);
System.out.println(ints);
}
测试类中添加
@Test
public void testJdbc8(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
BookService bookService = context.getBean("bookService",BookService.class);
List<Object[]> batchArags = new ArrayList<>();
Object[] o1 = {"野","123d","114514"};
Object[] o2 = {"恶","assfd","1919810"};
Object[] o3 = {"奥里","afsff","22222"};
batchArags.add(o1);
batchArags.add(o2);
batchArags.add(o3);
bookService.batchUpdateBook(batchArags);
}