资讯专栏INFORMATION COLUMN

NamedParameterJdbcTemplate学习总结

yhaolpz / 3005人阅读

摘要:批量操作数据批量操作数据一共有两种方法批量添加方法一男男方法二男男批量修改方法一男男方法二男男批量删除同上

环境 版本信息

spring的版本为4.1.4(spring3我也用过,就配置信息略有不同,其用法还是一样的)

配置信息

需要在applicationContext.xml中配置以下信息


    

如果已经在文件中配置了jdbctemplate的话还可以使用以下方法配置


    

当然也可以使用最原始的方法(该方法也需要配置jdbctemplate)

NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);
持久化类

本文章中的所有案例都是根据以下类来试验的:

    public class User {
        private int id;
        private String userName;
        private String sex;
        private String password;
        private String address;
            //省略 set/get
    }
简单操作数据 查询 查询一条数据 传入参数是基本数据类型的map时
    public User selectUserById(String id) {
        String sql = "SELECT id,username,sex,password,address FROM user WHERE id = :id";
        Map paramMap = new HashMap();
        paramMap.put("id", id);
        RowMapper rm = BeanPropertyRowMapper.newInstance(User.class);
        User user = namedParameterJdbcTemplate.queryForObject(sql, paramMap, rm);
        return user;
    }
传入的参数是对象时
    public User queryByUser(User user) {
        String sql = "SELECT id,username,sex,password,address FROM user WHERE id = :id";
        SqlParameterSource ps = new BeanPropertySqlParameterSource(user);
        RowMapper rm = BeanPropertyRowMapper.newInstance(User.class);
        return namedParameterJdbcTemplate.queryForObject(sql, ps, rm);
    }
查询多条数据 普通查询
    public List selectUser() {
        String sql = "SELECT id,username,sex,password,address FROM user";
        Map paramMap = new HashMap();
        RowMapper rm = BeanPropertyRowMapper.newInstance(User.class);
        List userList = namedParameterJdbcTemplate.query(sql, rm);
        return userList;
    }
模糊查询
    public List selectUserLikeByName(String name) {
        //"%"空格:userName空格"%" 一定要有空格,不然会报错
        String sql = "SELECT id,username,sex,password,address FROM user WHERE username LIKE "%" :userName "%"";
        Map paramMap = new HashMap();
        paramMap.put("userName", name);
        RowMapper rm = BeanPropertyRowMapper.newInstance(User.class);
        List users = namedParameterJdbcTemplate.query(sql, paramMap, rm);
        return users;
    }
添加数据
    public void insertUser(User user) {
        String sql = "INSERT INTO user (username, sex, password, address) VALUES (:username,:sex,:password,:address)";
        Map paramMap = new HashMap();
        paramMap.put("username", user.getUserName());
        paramMap.put("sex", user.getSex());
        paramMap.put("password", user.getPassword());
        paramMap.put("address", user.getAddress());
        namedParameterJdbcTemplate.update(sql, paramMap);
    }
修改数据
    public void updateUser(User user) {
        String sql = "UPDATE user SET username = :userName,sex = :sex,password=:password,address=:address WHERE id = :id;";
        SqlParameterSource ps = new BeanPropertySqlParameterSource(user);
        namedParameterJdbcTemplate.update(sql, ps);
    }

可以与添加数据再进行对比,这样就能发现当占位符比较多的情况下传入对象时多么的方便

删除数据
    public void deleteUser(String id) {
        String sql = "DELETE FROM user WHERE id = :id";
        Map paramMap = new HashMap();
        paramMap.put("id", id);
        namedParameterJdbcTemplate.update(sql, paramMap);
    }

看到此处可以发现添加,修改,删除数据namedParameterJdbcTemplate提供的方法都是一样的,都是update方法。

批量操作数据

批量操作数据一共有两种方法

批量添加 方法一
    public void batchInsert() {
        User chen = new User("chen", "男", "123456789", "fuzhou");
        User alex = new User("alex", "男", "123456", "fuzhou");
        List userList = new ArrayList<>();
        userList.add(chen);
        userList.add(alex);
        List> batchValues = new ArrayList<>(userList.size());
        for (User user : userList) {
            batchValues.add(
                    new MapSqlParameterSource("username", user.getUserName())
                            .addValue("sex", user.getSex())
                            .addValue("password", user.getPassword())
                            .addValue("address", user.getAddress())
                            .getValues());
        }
        String sql = "INSERT INTO user (username, sex, password, address) VALUES (:username,:sex,:password,:address)";
        int[] updateCounts = namedParameterJdbcTemplate.batchUpdate(sql, batchValues.toArray(new Map[userList.size()]));
    }
方法二
    public void batchInsertUser() {
        User chen = new User("chen", "男", "123456789", "fuzhou");
        User alex = new User("alex", "男", "123456", "fuzhou");
        List userList = new ArrayList<>();
        userList.add(chen);
        userList.add(alex);
        String sql = "INSERT INTO user (username, sex, password, address) VALUES (:username,:sex,:password,:address)";
        SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(userList.toArray());
        int[] updateCounts = namedParameterJdbcTemplate.batchUpdate(sql, batch);
    }
批量修改 方法一
    public void batchUpdate() {
        User chen = new User(12,"chen", "男", "111111111", "fuzhou");
        User alex = new User(13,"alex", "男", "111111111", "fuzhou");
        List userList = new ArrayList<>();
        userList.add(chen);
        userList.add(alex);
        List> batchValues = new ArrayList<>(userList.size());
        for (User user : userList) {
            batchValues.add(
                    new MapSqlParameterSource("username", user.getUserName())
                            .addValue("id",user.getId())
                            .addValue("sex", user.getSex())
                            .addValue("password", user.getPassword())
                            .addValue("address", user.getAddress())
                            .getValues());
        }
        String sql = "UPDATE user SET username = :username,sex = :sex,password=:password,address=:address WHERE id = :id;";
        int[] updateCounts = namedParameterJdbcTemplate.batchUpdate(sql, batchValues.toArray(new Map[userList.size()]));
    }
方法二
    public void batchUpdateUser() {
        User chen = new User(14,"chen", "男", "111111111", "fuzhou");
        User alex = new User(15,"alex", "男", "111111111", "fuzhou");
        List userList = new ArrayList<>();
        userList.add(chen);
        userList.add(alex);
        String sql = "UPDATE user SET username = :username,sex = :sex,password=:password,address=:address WHERE id = :id;";
        SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(userList.toArray());
        int[] updateCounts = namedParameterJdbcTemplate.batchUpdate(sql, batch);
    }
批量删除

同上

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77115.html

相关文章

  • 拥抱 NamedParameterJdbcTemplate

    摘要:插入一条数据并返回自增主键我们可以通过自动绑定参数只需要属性名称为命名参数相同即可,同时我们也可以使用绑定参数。 为什么要使用 NamedParameterJdbcTemplate 简单 NamedParameterJdbcTemplate 支持命名参数,这是原生jdbc的一大缺点,因为jdbc是采用索引的方式设置参数,在数据库或者sql发现变化时我们需要修改代码,并且这种维护...

    cfanr 评论0 收藏0
  • 关于 Spring JdbcTemplate 的一些总结

    摘要:关于的一些总结一个小问题的思考起因当前项目中一直使用的都是,即这种用法考虑到确实有一定的局限性,在部分查询中使用到了进行复杂查询操作由于本人年也曾使用过,古语温故而知新,所以做此总结梳理。 关于 Spring JdbcTemplate 的一些总结 一个小问题的思考 起因 当前项目中一直使用的都是 SpringData JPA ,即 public interface UserReposi...

    Pikachu 评论0 收藏0
  • Spring Boot 参考指南(安装CLI)

    摘要:安装可以使用手动安装命令行接口或如果你是用户,可以使用或。有关全面的安装说明,请参阅开始部分中的第节,安装。推断抓取依赖项标准包含一个注解,它允许你声明对第三方库的依赖关系,这个有用的技术让可以像或那样下载,但不需要你使用构建工具。 第VII章. Spring Boot CLI 如果你想快速开发Spring应用程序,可以使用Spring Boot CLI命令行工具,它允许你运行Groo...

    Moxmi 评论0 收藏0
  • Spring Boot 框架介绍和使用

    摘要:使用还是,根据个人喜好即可。如果错误页面也需要使用模板引擎动态生成,那么放在下面的路径。数据库自动配置嵌入式数据库如果类路径中包含或的相应包,那么就会自动配置这些嵌入式数据库的实例和数据源。 本文参考自Spring Boot文档。 Spring Boot 简介 Spring框架功能很强大,但是就算是一个很简单的项目,我们也要配置很多东西。因此就有了Spring Boot框架,它的作用很...

    Zack 评论0 收藏0
  • Python各热门方向常用学习、工作网址大全【7000字大总结

    摘要:做这一领域的工作,有很多网站能够起到辅助性的作用。再加上爬虫相对于其他热门方向来说,更容易学。也促使更多人会优先选择学习爬虫。能够代替手工完成手工无法完成的测试任务,并且可以记录相关数据及报告。 ...

    linkFly 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<