前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NamedParameterJdbcTemplate学习总结

NamedParameterJdbcTemplate学习总结

作者头像
全栈程序员站长
发布2022-08-04 08:35:54
2010
发布2022-08-04 08:35:54
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

环境

版本信息

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

配置信息

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

代码语言:javascript
复制
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
    <constructor-arg ref="dataSource"/>
</bean>

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

代码语言:javascript
复制
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
    <constructor-arg ref="jdbcTemplate"/>
</bean>

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

代码语言:javascript
复制
NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);

持久化类

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

代码语言:javascript
复制
    public class User {
        private int id;
        private String userName;
        private String sex;
        private String password;
        private String address;
            //省略 set/get
    }

简单操作数据

查询

查询一条数据

传入参数是基本数据类型的map时
代码语言:javascript
复制
    public User selectUserById(String id) {
        String sql = "SELECT id,username,sex,password,address FROM user WHERE id = :id";
        Map<String, Object> paramMap = new HashMap<String, Object>();
        paramMap.put("id", id);
        RowMapper<User> rm = BeanPropertyRowMapper.newInstance(User.class);
        User user = namedParameterJdbcTemplate.queryForObject(sql, paramMap, rm);
        return user;
    }
传入的参数是对象时
代码语言:javascript
复制
    public User queryByUser(User user) {
        String sql = "SELECT id,username,sex,password,address FROM user WHERE id = :id";
        SqlParameterSource ps = new BeanPropertySqlParameterSource(user);
        RowMapper<User> rm = BeanPropertyRowMapper.newInstance(User.class);
        return namedParameterJdbcTemplate.queryForObject(sql, ps, rm);
    }

查询多条数据

普通查询
代码语言:javascript
复制
    public List<User> selectUser() {
        String sql = "SELECT id,username,sex,password,address FROM user";
        Map<String, Object> paramMap = new HashMap<String, Object>();
        RowMapper<User> rm = BeanPropertyRowMapper.newInstance(User.class);
        List<User> userList = namedParameterJdbcTemplate.query(sql, rm);
        return userList;
    }
模糊查询
代码语言:javascript
复制
    public List<User> selectUserLikeByName(String name) {
        //'%'空格:userName空格'%' 一定要有空格,不然会报错
        String sql = "SELECT id,username,sex,password,address FROM user WHERE username LIKE '%' :userName '%'";
        Map<String, Object> paramMap = new HashMap<String, Object>();
        paramMap.put("userName", name);
        RowMapper<User> rm = BeanPropertyRowMapper.newInstance(User.class);
        List<User> users = namedParameterJdbcTemplate.query(sql, paramMap, rm);
        return users;
    }

添加数据

代码语言:javascript
复制
    public void insertUser(User user) {
        String sql = "INSERT INTO user (username, sex, password, address) VALUES (:username,:sex,:password,:address)";
        Map<String, Object> paramMap = new HashMap<String, Object>();
        paramMap.put("username", user.getUserName());
        paramMap.put("sex", user.getSex());
        paramMap.put("password", user.getPassword());
        paramMap.put("address", user.getAddress());
        namedParameterJdbcTemplate.update(sql, paramMap);
    }

修改数据

代码语言:javascript
复制
    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);
    }

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

删除数据

代码语言:javascript
复制
    public void deleteUser(String id) {
        String sql = "DELETE FROM user WHERE id = :id";
        Map<String, Object> paramMap = new HashMap<String, Object>();
        paramMap.put("id", id);
        namedParameterJdbcTemplate.update(sql, paramMap);
    }

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

批量操作数据

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

批量添加

方法一

代码语言:javascript
复制
    public void batchInsert() {
        User chen = new User("chen", "男", "123456789", "fuzhou");
        User alex = new User("alex", "男", "123456", "fuzhou");
        List<User> userList = new ArrayList<>();
        userList.add(chen);
        userList.add(alex);
        List<Map<String, Object>> 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()]));
    }

方法二

代码语言:javascript
复制
    public void batchInsertUser() {
        User chen = new User("chen", "男", "123456789", "fuzhou");
        User alex = new User("alex", "男", "123456", "fuzhou");
        List<User> 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);
    }

批量修改

方法一

代码语言:javascript
复制
    public void batchUpdate() {
        User chen = new User(12,"chen", "男", "111111111", "fuzhou");
        User alex = new User(13,"alex", "男", "111111111", "fuzhou");
        List<User> userList = new ArrayList<>();
        userList.add(chen);
        userList.add(alex);
        List<Map<String, Object>> 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()]));
    }

方法二

代码语言:javascript
复制
    public void batchUpdateUser() {
        User chen = new User(14,"chen", "男", "111111111", "fuzhou");
        User alex = new User(15,"alex", "男", "111111111", "fuzhou");
        List<User> 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://javaforall.cn/107312.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境
    • 版本信息
      • 配置信息
        • 持久化类
        • 简单操作数据
          • 查询
            • 查询一条数据
            • 查询多条数据
          • 添加数据
            • 修改数据
              • 删除数据
              • 批量操作数据
                • 批量添加
                  • 方法一
                  • 方法二
                • 批量修改
                  • 方法一
                  • 方法二
                  • 批量删除
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档