Spring5学习笔记(十一)—— JdbcTemplate

本文介绍了如何使用Spring的JdbcTemplate进行数据库CRUD操作,包括添加、更新、删除和查询,以及批量操作的示例。涵盖了从配置DataSource到编写DAO和Service的实战步骤,并通过测试类展示了每个操作的实现与调用。
摘要由CSDN通过智能技术生成

6.1、JdbcTemplate概述

1、什么是JdbcTemplate

  • Spring框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库操作

2、准备工作

(1)引入相关jar

在这里插入图片描述

(2)在Spring配置文件中配置数据库

<!-- 数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
      destroy-method="close">
    <property name="url" value="jdbc:mysql:///user_db" />
    <property name="username" value="root" />
    <property name="password" value="root" />
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
</bean>

(3)配置JdbcTemplate对象,注入DataSource

<!--JdbcTemplate对象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <!--注入dataSource-->
    <property name="dataSource" ref="dataSource"></property>
</bean>

(4)创建service类,创建DAO类,在DAO注入JdbcTemplate对象

  • 配置文件
<!-- 开启组件扫描 -->
<context:component-scan base-package="com.ssm"></context:component-scan>
  • DAO

UserDAOImpl.java

@Repository
public class UserDAOImpl implements UserDAO{
    //注入JdbcTemplate对象
    @Autowired
    private JdbcTemplate jdbcTemplate;
}
  • Service

UserService.java

@Service
public class UserService {
    //注入DAO
    @Autowired
    private UserDAO userDAO;
}

6.2、JdbcTemplate操作数据库——CRUD

6.2.1、添加操作

1、对于数据库创建实体类

public class User {
    private String userId;
    private String uname;
    private String ustatus;

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getUstatus() {
        return ustatus;
    }

    public void setUstatus(String ustatus) {
        this.ustatus = ustatus;
    }
}

2、编写serviceDAO

(1)在DAO进行数据库添加操作

(2)调用JdbcTemplate对象里面update方法实现添加操作

在这里插入图片描述

  • 有两个参数
    • 第一个参数:sql语句
    • 第二个参数:可变参数,设置sql语句值

UserDAOImpl.java

@Repository
public class UserDAOImpl implements UserDAO {
    //注入JdbcTemplate对象
    @Autowired
    private JdbcTemplate jdbcTemplate;

    //添加的方法
    @Override
    public void add(User user) {
        //1、创建sql语句
        String sql = "insert into t_user values(?,?,?)";
        //2、调用方法实现
        Object[] args = {user.getUserId(), user.getUname(), user.getUstatus()};
        int update = jdbcTemplate.update(sql, args);
        System.out.println(update);
    }
}

UserService.java

@Service
public class UserService {
    //注入DAO
    @Autowired
    private UserDAO userDAO;

    //添加的方法
    public void addUser(User user) {
        userDAO.add(user);
    }
}

3、测试类

@Test
public void testAdd() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
    UserService userService = context.getBean("userService", UserService.class);
    User user = new User();
    user.setUserId("1");
    user.setUname("王俊凯");
    user.setUstatus("0");
    userService.addUser(user);
}

6.2.2、修改操作

UserDAOImpl.java

@Override
public void updateUser(User user) {
    //1、创建sql语句
    String sql = "update t_user set username = ?, ustatus = ? where userId = ?";
    //2、调用方法实现
    Object[] args = {user.getUname(), user.getUstatus(),user.getUserId()};
    int update = jdbcTemplate.update(sql, args);
    System.out.println(update);
}

UserService.java

//修改的方法
public void update(User user) {
    userDAO.updateUser(user);
}

测试代码:

@Test
public void testUpdate() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
    UserService userService = context.getBean("userService", UserService.class);
    User user = new User();
    user.setUserId("1");
    user.setUname("javaweb");
    user.setUstatus("1");
    userService.update(user);
}

6.2.3、删除操作

UserDAOImpl.java

@Override
public void delete(String id) {
    //1、创建sql语句
    String sql = "delete from t_user where userId = ?";
    //2、调用方法实现
    int update = jdbcTemplate.update(sql, id);
    System.out.println(update);
}

UserService.java

//删除的方法
public void delete(String id) {
    userDAO.delete(id);
}

测试代码:

@Test
public void testDelete() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
    UserService userService = context.getBean("userService", UserService.class);
    userService.delete("1");
}

6.2.4、查询操作

6.2.4.1、查询返回某个值

1、查询表里面有多少条记录,返回是某个值

2、使用JdbcTemplate实现查询返回某个值代码

在这里插入图片描述

  • 有两个参数
    • 第一个参数:sql语句
    • 第二个参数:返回类型Class
@Override
public int selectCount() {
    String sql = "select count(*) from t_user";
    Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
    return count;
}

3、测试代码

@Test
public void testCount() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
    UserService userService = context.getBean("userService", UserService.class);
    //查询返回某个值
    int count = userService.findCount();
    System.out.println("count = "+count);
}
6.2.4.2、查询返回对象

1、场景:查询客户详情

2、JdbcTemplate实现查询返回对象

在这里插入图片描述

  • 有三个参数
    • 第一个参数:sql语句
    • 第二个参数:RowMapper,是接口,返回不同类型数据,使用这个接口里面实现类完成数据封装
    • 第三个参数:可变参数,sql语句值
@Override
public User findUserInfo(String id) {
    String sql = "select * from t_user where userId = ?";
    //调用方法
    User user = jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),id);
    return user;
}

3、测试代码

@Test
public void testUser() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
    UserService userService = context.getBean("userService", UserService.class);
    //查询返回某个对象
    User user = userService.findOne("2");
    System.out.println(user);
}
6.2.4.3、查询返回集合

1、场景:查询客户列表分页…

2、调用JdbcTemplate方法实现查询返回集合

在这里插入图片描述

  • 有三个参数
    • 第一个参数:sql语句
    • 第二个参数:RowMapper,是接口,返回不同类型数据,使用这个接口里面实现类完成数据封装
    • 第三个参数:可变参数,sql语句值
@Override
public List<User> findAll() {
    String sql = "select * from t_user";
    //调用方法
    List<User> userList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class));
    return userList;
}

3、代码测试

@Test
public void testUserList() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
    UserService userService = context.getBean("userService", UserService.class);
    List<User> users = userService.findAll();
    System.out.println(users);
}

6.3、JdbcTemplate操作数据库——批量操作

  • 批量操作:操作表里面的多条记录

6.3.1、批量添加

1、调用JdbcTemplate方法实现批量添加操作

在这里插入图片描述

  • 有两个参数
    • 第一个参数:sql语句
    • 第二个参数:List集合,添加多条记录数据
@Override
public void batchAddUser(List<Object[]> batchArgs) {
    String sql = "insert into t_user values(?,?,?)";
    int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
    System.out.println(Arrays.toString(ints));
}

2、测试代码

@Test
public void testBatchAddUser() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
    UserService userService = context.getBean("userService", UserService.class);
    List<Object[]> batchArgs = new ArrayList<>();
    Object[] o1 = {"4","Java","0"};
    Object[] o2 = {"5","Php","2"};
    Object[] o3 = {"6","Python","1"};
    batchArgs.add(o1);
    batchArgs.add(o2);
    batchArgs.add(o3);
    //调用批量添加操作
    userService.batchAdd(batchArgs);
}

6.3.2、批量修改

1、调用JdbcTemplate方法实现批量修改操作

@Override
public void batchUpdateUser(List<Object[]> batchArgs) {
    String sql = "update t_user set username = ?, ustatus = ? where userId = ?";
    int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
    System.out.println(Arrays.toString(ints));
}

2、测试代码

@Test
public void testBatchUpdateUser() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
    UserService userService = context.getBean("userService", UserService.class);
    List<Object[]> batchArgs = new ArrayList<>();
    Object[] o1 = {"Java","1","4"};
    Object[] o2 = {"Php","1","5"};
    Object[] o3 = {"Python","2","6"};
    batchArgs.add(o1);
    batchArgs.add(o2);
    batchArgs.add(o3);
    //调用批量修改操作
    userService.batchUpdate(batchArgs);
}

6.3.3、批量删除

1、调用JdbcTemplate方法实现批量删除操作

@Override
public void batchDeleteUser(List<Object[]> batchArgs) {
    String sql = "delete from t_user where userId = ?";
    int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
    System.out.println(Arrays.toString(ints));
}

2、代码测试

@Test
public void testBatchDeleteUser() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
    UserService userService = context.getBean("userService", UserService.class);
    List<Object[]> batchArgs = new ArrayList<>();
    Object[] o1 = {"4"};
    Object[] o2 = {"2"};
    batchArgs.add(o1);
    batchArgs.add(o2);
    //调用批量删除操作
    userService.batchDelete(batchArgs);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值