Spring框架对JDBC进行封装,使用JdbdTemplate方便实现对数据库操作
1、导入依赖
druid :德鲁伊连接池
mysql-connector-java
spring-jdbc
spring-tx: spring事务
spring-orm :整合Template或者mybatis要用
创建一个maven项目后,可以直接把下边的依赖坐标,复制到pom文件中
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.7.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.20</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.2.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>4.3.0.RELEASE</version> </dependency> </dependencies>2、在spring配置文件中配置数据库连接池
destroy-method="close"作用是当数据库连接不使用的时候,就把该连接重新放到数据池中,方便下次使用调用。xml中:&要用 & 进行转义 <!-- 数据库连接池。 destroy-method="close"作用是当数据库连接不使用的时候,就把该连接重新放到数据池中,方便下次使用调用. xml中:&要用 & 转义--> <bean id="dataSourceDefault" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/数据库名字?userSSL=true& useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean>3、在配置文件中,配置JdbcTemplate对象,注入dataSourceDefault
<!--JdbcTemplate对象--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <!--注入dataSourceDefault--> <property name="dataSource" ref="dataSourceDefault"></property> </bean>1、创建service类,创建dao类,在dao注入jdbcTemplate对象
配置文件 <!-- 开启组件扫描--> <context:component-scan base-package="com.lu"></context:component-scan> BookService类 @Service public class BookService { //注入dao @Autowired private BookDao bookDao; }BookDao类
@Repository public interface BookDao { }BookDaoImpl类
@Repository public class BookDaoImpl implements BookDao{ //注入JdbcTemplate @Autowired private JdbcTemplate jdbcTemplate; }2、JdbcTemplate操作数据库(添加)
(1)创建数据库和book表
create database spring-crud; use spring-crud; CREATE TABLE `book` ( `book_id` int(20) NOT NULL, `book_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `bstatus` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, PRIMARY KEY (`book_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;(2)创建数据库对应的实体类
public class Book { private int book_id; private String book_name; private String bstatus; //get和set方法生成一下 }3、编写service和dao
(1)在dao中进行数据库添加操作
(2)调用JdbcTemplate对象里面的update方法实现添加操作
第一个参数:sql语句
第二个参数:可变参数,设置sql语句值
@Repository public class BookDaoImpl implements BookDao{ //注入JdbcTemplate @Autowired private JdbcTemplate jdbcTemplate; @Override public void add(Book book) { //1、创建sql语句 String sql = "insert into book values(?,?,?)"; //调用方法实现 //可变参数可以一个一个写上,如下 //jdbcTemplate.update(sql,book.getBook_id(),book.getBook_name(),book.getBstatus()); //也可以这样写 Object []args = {book.getBook_id(),book.getBook_name(),book.getBstatus()}; int update = jdbcTemplate.update(sql,args); System.out.println("插入结果:"+update); } }4、测试类及结果图
测试类
public class TestBook { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("application.xml"); BookService bookService = context.getBean("bookService",BookService.class); Book book = new Book(); book.setBook_id(2); book.setBook_name("java"); book.setBstatus("2存在"); bookService.bookAdd(book); } }结果图
5、更新和删除
在BookService类中添加方法,方法里面是调用bookDao中的方法;在BookDao接口中添加接口;在BookDaoImpl类中实现接口中的方法。
@Override public void updateBook(Book book) { String sql = "update book set book_name=?,bstatus=? where book_id=?"; Object []args = {book.getBook_name(),book.getBstatus(),book.getBook_id()}; int update = jdbcTemplate.update(sql,args); System.out.println("更新结果:"+update); } @Override public void deleteBook(int id) { String sql = "delete from book where book_id = ?"; int update = jdbcTemplate.update(sql,id); System.out.println("删除结果结果:"+update); }6、查询操作
(1)查询返回某个值
场景:查询表里面有多少条记录,返回一个值。
使用JdbcTemplate的queryForObject方法,如下图。
有两个参数:
第一个参数:sql语句
第二个参数:返回类型的Class
BookDaoImpl类
//查询表中记录数 @Override public int selectCount() { String sql = "select count(*) from book"; Integer count = jdbcTemplate.queryForObject(sql, Integer.class); return count; }(2)查询返回对象
场景:查询图书信息
使用JdbcTemplate的queryForObject方法,如下图。
有三个参数
第一个参数:sql语句。就是定义的sql。
第二个参数:RowMapper。是接口,返回不同类型数据,使用这个接口里面实现类完成数据封装。
第三个参数:sql语句值。就是问号中的值。
BookDaoImpl类
@Override public Book findBookInfo(int id) { String sql = "select * from book where book_id=?"; Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id); return book; }(3)查询返回集合
场景:查询图书列表分页
使用JdbcTemplate的queryForObject方法,
有两个参数
第一个参数:sql语句。就是定义的sql。
第二个参数:RowMapper。是接口,返回不同类型数据,使用这个接口里面实现类完成数据封装。
//要导入util包下的list @Override public List<Book> findAllBook() { String sql = "select * from book"; List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class)); return bookList; }批量操作:操作表里面的多条记录
1、批量添加
JdbcTemplate的batchUpdate方法
有两个参数
第一个参数: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)); }测试类:
List<Object[]> batchArgs = new ArrayList<>(); Object [] o1 = {2,"c","a"}; Object [] o2 = {3,"mysql","b"}; Object [] o3 = {4,"c++","c"}; batchArgs.add(o1); batchArgs.add(o2); batchArgs.add(o3); bookService.batchAdd(batchArgs);2、批量修改
JdbcTemplate实现批量添加操作:
@Override public void batchUpdateBook(List<Object[]> batchArgs) { String sql = "update book set book_name=?,bstatus=? where book_id=?"; int [] ints = jdbcTemplate.batchUpdate(sql,batchArgs); System.out.println(Arrays.toString(ints)); }测试类:
List<Object[]> batchArgs = new ArrayList<>(); Object [] o1 = {"c-up","a",2}; Object [] o2 = {"mysql-up","b",3}; Object [] o3 = {"c++-up","c",4}; batchArgs.add(o1); batchArgs.add(o2); batchArgs.add(o3); bookService.batchUpdate(batchArgs);3、批量删除
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)); }测试类:
List<Object[]> batchArgs = new ArrayList<>(); Object [] o1 = {2}; Object [] o2 = {3}; Object [] o3 = {4}; batchArgs.add(o1); batchArgs.add(o2); batchArgs.add(o3); bookService.batchDelete(batchArgs);练习代码: 链接:https://pan.baidu.com/s/12OUZajY40C25yhE5TbrOcQ 提取码:wces