栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring5笔记5之使用JdbcTemplate操作数据库

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring5笔记5之使用JdbcTemplate操作数据库

前言:这一部分有点无聊,查询、修改、删除数据的操作都是一样调用同一个方法,自己敲代码的时候感觉都是一直重复做一件事,都不用思考,真“码农”,感觉这一部分都可以不用实操,知道大概原理就行了。而且感觉好麻烦,还是用Mybatis和MybatisPlus好啊。

五、JdbcTemplate 5.1 概述和准备工作 5.1.1 概述

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

5.2.2 准备工作 1.引入jar包


    com.alibaba
    druid
    1.2.8


    mysql
    mysql-connector-java
    8.0.27


    org.springframework
    spring-jdbc
    5.3.16


    org.springframework
    spring-orm
    5.3.16


    org.springframework
    spring-tx
    5.3.16

2.在Spring配置文件中配置数据库连接池

    
    
    
    

3.配置JdbcTemplate对象,注入DataSource

    
    
    

4.创建 service 类,dao 类,在 dao 注入 jdbcTemplate 对象 ①配置开启组件扫描

②创建Service和Dao

使用注解方式创建Service对象和Dao对象

@Service
public class UserService {
    //注入dao
    @Autowired
    private UserDao userDao;
}
public interface UserDao {
    public void add(User user);
}

@Repository
public class UserDaoImpl implements UserDao {
    //注入JdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;
}
5.2 JdbcTemplate操作数据库 5.2.1 添加操作 1.创建实体类
//根据数据库表结构创建对应实体类
public class User {
    private Integer id;
    private String username;
    private String password;
    private String 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 String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + ''' +
                ", password='" + password + ''' +
                ", status='" + status + ''' +
                '}';
    }
}
2.编写service和dao层添加用户的操作
@Service
public class UserService {
    //注入dao
    @Autowired
    private UserDao userDao;

    public void addUser(User user){
        userDao.add(user);
    }
}
@Repository
public class UserDaoImpl implements UserDao {
    //注入jdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void add(User user) {
        //创建sql语句
        String sql = "insert into t_user values (?,?,?,?)";
        //调用方法实现
        Object[] args = {user.getId(),user.getUsername(),user.getPassword(),user.getStatus()};
        int update = jdbcTemplate.update(sql, args);
        System.out.println(update);
    }
}
3.测试
@Test
    public void testJdbcTemplate() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        UserService userService = context.getBean("userService", UserService.class);
        User user = new User();
        user.setId(1);
        user.setUsername("admin");
        user.setPassword("12345");
        user.setStatus("1");
        userService.addUser(user);
    }
//执行测试后可以发现数据库中被添加了一条新数据
5.2.2 修改删除操作

修改和删除操作基本均和添加操作一样

//在UserService中添加方法
public void updateUser(User user){
    userDao.update(user);
}

public void deleteUser(Integer id){
    userDao.delete(id);
}

//在UserDao中添加方法
@Override
public void update(User user) {
    //创建sql语句
    String sql = "update t_user set username=?,status=? where id=?";
    //调用方法实现
    Object[] args = {user.getUsername(), user.getStatus(), user.getId()};
    int update = jdbcTemplate.update(sql, args);
    System.out.println(update);
}
@Override
public void delete(Integer id) {
    //创建sql语句
    String sql = "delete from t_user where id=?";
    //调用方法实现
    int update = jdbcTemplate.update(sql, id);
    System.out.println(update);
}

测试代码

@Test
public void testJdbcTemplate1() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    UserService userService = context.getBean("userService", UserService.class);
    User user = new User();
    user.setId(1);
    user.setUsername("admin1");
    user.setPassword("12345");
    user.setStatus("2");
    userService.updateUser(user);
}

@Test
public void testJdbcTemplate2() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    UserService userService = context.getBean("userService", UserService.class);
    userService.deleteUser(1);
}
5.2.3 查询操作 1.查询返回某个值

使用 JdbcTemplate 实现查询返回某个值代码queryForObject(String sql,Class requiredType)

第一个参数:sql 语句第二个参数:返回值类型 Class

//Service层添加方法
public int selectCount(){
    return userDao.selectCount();
}
//Dao层添加方法
@Override
public Integer selectCount() {
    String sql = "select count(*) from t_user";
    return jdbcTemplate.queryForObject(sql, Integer.class);
}
@Test
public void testJdbcTemplate3() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    UserService userService = context.getBean("userService", UserService.class);
    System.out.println(userService.selectCount());//3
}
2.查询返回对象

使用JdbcTemplate方法实现查询返回集合queryForObject(String sql,RowMapper rowMapper,Object... args)

第一个参数:sql 语句第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口的实现类完成数据封装第三个参数:sql 语句值

//Service层添加方法
public User selectUser(Integer id){
    return userDao.selectUser(id);
}
//Dao层添加方法
@Override
public User selectUser(Integer id) {
    String sql = "select * from t_user where id = ?";
    return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper(User.class), id);
}
@Test
public void testJdbcTemplate4() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    UserService userService = context.getBean("userService", UserService.class);
    System.out.println(userService.selectUser(2));//User{id=2, username='admin1', password='12345', status='2'}
}
3.查询返回列表

调用 JdbcTemplate 方法实现查询返回集合query(String sql,RowMapper rowMapper,Object... args)

第一个参数:sql 语句第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口的实现类完成数据封装第三个参数:sql 语句值(可选)

//Service层添加方法
public List selectAllUser(){
    return userDao.selectAllUser();
}
//Dao层添加方法
@Override
public List selectAllUser() {
    String sql = "select * from t_user";
    return jdbcTemplate.query(sql, new BeanPropertyRowMapper(User.class));
}
@Test
public void testJdbcTemplate5() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    UserService userService = context.getBean("userService", UserService.class);
    System.out.println(userService.selectAllUser());
    //[User{id=1, username='admin', password='12345', status='1'}, 
    //User{id=2, username='admin1', password='12345', status='2'}, 
    //User{id=3, username='admin2', password='12345', status='3'}]
}
5.3 JdbcTemplate批量操作

其实添加、修改、删除的操作都一样,都是调用batchUpdate(String sql,List batchArgs)方法,只是sql语句不一样…该方法返回的是一个int类型数组,保存的是添加每条数据的成功与否,成功则元素均为1

5.3.1 批量添加操作

使用JdbcTemplate中的batchUpdate(String sql,List batchArgs)实现批量添加操作

第一个参数:sql 语句第二个参数:List 集合,添加多条记录数据

//Service层添加方法
public void batchAdd(List batchArgs){
    userDao.batchInsert(batchArgs);
}
//Dao层添加方法
@Override
public void batchInsert(List batchArgs) {
    String sql = "insert into t_user (username,password,status) values (?,?,?)";
    int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
}
//测试
@Test
public void testJdbcTemplate6() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    UserService userService = context.getBean("userService", UserService.class);
    List list = new ArrayList<>();
    Object[] o1 = {"admin3","12345","4"};
    Object[] o2 = {"admin4","12345","5"};
    Object[] o3 = {"admin5","12345","6"};
    list.add(o1);
    list.add(o2);
    list.add(o3);
    userService.batchAdd(list);
}
5.3.2 批量修改操作

使用JdbcTemplate中的batchUpdate(String sql,List batchArgs)实现批量修改操作

第一个参数:sql 语句第二个参数:List 集合,修改多条记录数据

//Service层添加方法
public void batchUpdate(List batchArgs){
    userDao.batchUpdate(batchArgs);
}
//Dao层添加方法
@Override
public void batchUpdate(List batchArgs) {
    String sql = "update t_user set username=?,password=?,status=? where id=?";
    int[] update = jdbcTemplate.batchUpdate(sql, batchArgs);
}
//测试
@Test
public void testJdbcTemplate7() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    UserService userService = context.getBean("userService", UserService.class);
    List list = new ArrayList<>();
    Object[] o1 = {"admin3+","123456","4+","4"};
    Object[] o2 = {"admin4+","123456","5+","5"};
    Object[] o3 = {"admin5+","123456","6+","6"};
    list.add(o1);
    list.add(o2);
    list.add(o3);
    userService.batchUpdate(list);
}
5.3.3 批量删除操作

使用JdbcTemplate中的batchUpdate(String sql,List batchArgs)实现批量删除操作

第一个参数:sql 语句第二个参数:List 集合,删除多条记录数据

//Service层添加方法
public void batchDelete(List batchArgs){
    userDao.batchDelete(batchArgs);
}
//Dao层添加方法
@Override
public void batchDelete(List batchArgs) {
    String sql = "delete from t_user where id=?";
    int[] delete = jdbcTemplate.batchUpdate(sql, batchArgs);
}
//测试
@Test
public void testJdbcTemplate8() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    UserService userService = context.getBean("userService", UserService.class);
    List list = new ArrayList<>();
    Object[] o1 = {4};
    Object[] o2 = {5};
    list.add(o1);
    list.add(o2);
    userService.batchDelete(list);
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/755212.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号