手撕Spring5框架(八)操作JdbcTemplate

什么是JdbcTemplate?

Spring 框架对JDBC进行封装,使用JDBCTemplate方便实现对数据库的才做。

如何使用jdbcTemplate?

准备工作

  • 引用jar包  
 <!--jdbcTemplate相关依赖-->

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
        <!--mysql 数据库驱动-->
        <!-- Mysql驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
        </dependency>

        <!--数据库连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.14</version>
        </dependency>
  • 配置数据库连接池
<context:component-scan base-package="org.learn.spring5"></context:component-scan>
    <!--引入外部的配置文件-->
    <context:property-placeholder location="classpath:jdbc.properties"/>   
	<!--配置数据库连接-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <property name="url" value="${prop.url}"></property>
        <property name="username" value="${prop.userName}"></property>
        <property name="password" value="${prop.password}"></property>
        <property name="driverClassName" value="${prop.driverClass}"></property>
    </bean>
  • 配置jdbcTemplate对象,注入DataSource
<!--JdbcTemplate对象创建,注入dataSource对象-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!--注入dataSource对象-->
        <property name="dataSource" ref="dataSource"></property>
    </bean>
  • 创建jdbc.properties
prop.driverClass=com.mysql.cj.jdbc.Driver
prop.url=jdbc:mysql://127.0.0.1:3306/spring5-demo?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=CONVERT_TO_NULL
prop.userName=root
prop.password=123456
  • 创建service类,dao类,在dao类注入jdbcTemplate对象
package org.learn.spring5.service.impl;

import org.learn.spring5.dao.impl.UserDaoImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {
    //注入UserDao的对象
    @Autowired
    private UserDaoImpl userDao;

}
package org.learn.spring5.dao.impl;

import org.learn.spring5.service.impl.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;

public class UserDaoImpl implements UserDao{

    //注入JdbcTemplate對象
    @Autowired
    private JdbcTemplate jdbcTemplate;
}
  • 编写实体类User
package org.learn.spring5.entiy;

public class User {
    //id
    private Integer id;
    //用户名
    private String userName;
    //用户状态
    private Integer status;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }
}
  •  创建数据和表结构
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`  (
  `id` int(11) NOT NULL,
  `user_name` varchar(22) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `status` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

具体操作

  • JdbcTemplate操作数据库-添加功能

1)在UserDaoImpl类里添加add方法

2)调用JdbcTemplate对象的update方法

package org.learn.spring5.dao.impl;

import org.learn.spring5.entiy.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

@Component
public class UserDaoImpl implements UserDao{

    //注入JdbcTemplate對象
    @Autowired
    private JdbcTemplate jdbcTemplate;

    public void add(User user) {
        //1.創建sql語句
        String sql="insert into t_user values(?,?,?)";
        //2.調用方法实现
        Object[] args={user.getId(),user.getUserName(),user.getStatus()};
        int update = jdbcTemplate.update(sql, args);
        System.out.println(update);
    }
}

3)编写测试程序

import org.junit.Test;
import org.learn.spring5.entiy.User;
import org.learn.spring5.service.impl.UserService;
import org.learn.spring5.service.impl.UserServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestSpring5 {
    /**
     * 操作JdbcTemplate,添加操作
     */
    @Test 
    public void testAdd() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
        User user = new User();
        user.setId(1);
        user.setUserName("张三");
        user.setStatus(1);
        userService.addUser(user);

    }


}

程序返回结果1,标识数据添加成功!

  • JdbcTemplate操作数据库-修改功能
public int update(User user) {
        String sql = "update t_user set user_name =?,status=? where id =?";
        Object[] args = {user.getUserName(), user.getStatus(), user.getId()};
        int update = jdbcTemplate.update(sql, args);

        return update;
    }

编写测试程序

   //JdbcTemplate修改操作
    @Test
    public void testUpdate() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
        User user = new User();
        user.setId(1);
        user.setUserName("张四");
        user.setStatus(0);
        userService.update(user);
    }
  • JdbcTemplate操作数据库-查询功能

1)查询返回某一个值

 public int queryCount() {
        String sql = "select count(*) from t_user";
        Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
        return count;
    }

编写测试程序

//JdbcTemplate 查询操作,返回用户的数量
    @Test
    public void testQueryCount() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
        int count = userService.queryCount();
        System.out.println(count);
    }

2)查询返回对象

public User findOne(Integer id) {
        String sql = "select * from t_user where id =?";
        User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), id);
        return user;
    }

编写测试程序

 //JdbcTemplate 查询操作,返回对象根据id
    @Test
    public void testQueryById() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
        User user = userService.queryById(1);
        System.out.println(user);
    }

3)查询返回集合

//JdbcTemplate 查询操作,返回集合对象
    @Test
    public void testFindAll() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
        List<User> all = userService.findAll();
        System.out.println(all);
    }

编写测试程序

  //JdbcTemplate 查询操作,返回集合对象
    @Test
    public void testFindAll() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
        List<User> all = userService.findAll();
        System.out.println(all);
    }
  • JdbcTemplate操作数据库-删除功能
 public int del(Integer id) {
        String sql = "delete from t_user where id =?";
        int update = jdbcTemplate.update(sql, id);
        return update;
    }

编写测试程序

 //JdbcTemplate删除操作
    @Test
    public void testDel() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
        userService.del(1);
    }
  • JdbcTemplate操作数据库-批量添加
    public void batchAdd(List<Object[]> users) {
        String sql = "insert into t_user values(?,?,?)";
        int[] ints = jdbcTemplate.batchUpdate(sql, users);
        System.out.println(Arrays.asList(ints));

    }

编写测试程序

  //JdbcTemplate 批量添加操作
    @Test
    public void batchAdd() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
        List<Object[]> list = new ArrayList<Object[]>();
        Object[] o1 = {"4","name1",0};
        Object[] o2 = {"5","name2",0};
        Object[] o3 = {"6","name3",0};
        list.add(o1);
        list.add(o2);
        list.add(o3);
        userService.batchAdd(list);
    }
  • JdbcTemplate操作数据库-批量修改和删除
//批量修改操作
  public void batchUpdate(List<Object[]> users) {
        String sql = "update t_user set user_name =?,status=? where id =?";
        int[] ints = jdbcTemplate.batchUpdate(sql, users);
        System.out.println(Arrays.asList(ints).toString());

    }
//批量删除操作
    public void batchDel(List<Object[]> users) {
        String sql = "delete from t_user where id =?";
        int[] ints = jdbcTemplate.batchUpdate(sql, users);
        System.out.println(ints);
    }

编写测试程序

//JdbcTemplate 批量修改操作
    @Test
    public void batchUpdate() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
        List<Object[]> list = new ArrayList<Object[]>();
        Object[] o1 = {"namexiugai", 1, 4};
        Object[] o2 = {"name2xiugai", 1, 5};
        Object[] o3 = {"name3xiugai", 1, 6};
        list.add(o1);
        list.add(o2);
        list.add(o3);
        userService.batchUpdate(list);
    }

    //JdbcTemplate 批量删除操作
    @Test
    public void batchDel() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
        List<Object[]> list = new ArrayList<Object[]>();
        Object[] o1 = {4};
        Object[] o2 = {5};
        Object[] o3 = {6};
        list.add(o1);
        list.add(o2);
        list.add(o3);
        userService.batchDel(list);
    }

猜你喜欢

转载自blog.csdn.net/java_cxrs/article/details/108413476