JdbdTemplate操作数据库

    科技2023-10-15  98

    文章目录

    一、什么是JdbdTemplate二、准备工作三、代码实现四、批量操作

    一、什么是JdbdTemplate

    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中:&要用 &amp; 进行转义 <!-- 数据库连接池。 destroy-method="close"作用是当数据库连接不使用的时候,就把该连接重新放到数据池中,方便下次使用调用. xml中:&要用 &amp; 转义--> <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&amp; useUnicode=true&amp;characterEncoding=UTF-8&amp;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

    Processed: 0.016, SQL: 9