资讯专栏INFORMATION COLUMN

拥抱 NamedParameterJdbcTemplate

cfanr / 2757人阅读

摘要:插入一条数据并返回自增主键我们可以通过自动绑定参数只需要属性名称为命名参数相同即可,同时我们也可以使用绑定参数。

为什么要使用 NamedParameterJdbcTemplate

简单

NamedParameterJdbcTemplate 支持命名参数,这是原生jdbc的一大缺点,因为jdbc是采用索引的方式设置参数,在数据库或者sql发现变化时我们需要修改代码,并且这种维护成本很高,同时也很容易出错,那命名参数可以很好的解决这个问题。

NamedParameterJdbcTemplate 支持对象自动映射,如下一段代码NamedParameterJdbcTemplate 会自动将返回结果映射为Person对象

Person p = new Person();
p.setName("kevin");
p.setAddress("Shanghai");
p.setCountry("China");

namedTemplate.update("insert into t_person(name, address, country) values(:name,:address,:country)", new BeanPropertySqlParameterSource(p))

快速,NamedParameterJdbcTemplate只是实现了命名参数及数据封装,没有其它任何额外的开销,在运行效率上无限接近原生jdbc

接下来我们看一下使用NamedParameterJdbcTemplate如何工作,还有相同场景下MyBatis的代码。

插入一条数据并返回自增主键 NamedParameterJdbcTemplate
String sql = "INSERT INTO `t_person` (firstName, lastName, age, gender, height, weight, address, hobby, createdTime)" +
        " VALUES (:firstName, :lastName, :age, :gender, :height, :weight, :address, :hobby, :createdTime)";

KeyHolder key = new GeneratedKeyHolder();
jdbcOperations.update(sql, new BeanPropertySqlParameterSource(p), key);
p.setId(key.getKey().longValue());

我们可以通过BeanPropertySqlParameterSource自动绑定SQL参数只需要属性名称为命名参数相同即可,同时我们也可以使用MapSqlParameterSource/Map绑定SQL参数。

MyBatis

    INSERT INTO `t_person` (firstName, lastName, age, gender, height, weight, address, hobby, createdTime)
    VALUES (#{firstName}, #{lastName}, #{age}, #{gender}, #{height}, #{weight}, #{address}, #{hobby}, #{createdTime})
通过主键查询对象(自动映射) NamedParameterJdbcTemplate
String sql = "select * from t_person where id=:id";
jdbcOperations.queryForObject(sql, new MapSqlParameterSource("id", id), new BeanPropertyRowMapper<>(Person.class));

我们可以通过BeanPropertyRowMapper将返回结果自动映射为对象类型,和mybatis一样只需要返回的列名与属性名称相同即可

MyBatis
通过主键查询对象(手动映射) NamedParameterJdbcTemplate
String sql = "select * from t_person where id=:id";

jdbcOperations.queryForObject(sql, new MapSqlParameterSource("id", selectId()), (rs, rowNum) -> {
        Person p = new Person();
        p.setId(rs.getLong("id"));
        p.setFirstName(rs.getString("firstName"));
        p.setLastName(rs.getString("lastName"));
        p.setAge(rs.getInt("age"));
        p.setGender(rs.getInt("gender"));
        p.setHeight(rs.getInt("height"));
        p.setWeight(rs.getInt("weight"));
        p.setAddress(rs.getString("address"));
        p.setHobby(rs.getString("hobby"));
        p.setCreatedTime(rs.getLong("createdTime"));
        return p;
    });
MyBatis

    
    
    
    
    
    
    
    
    
    
    


查询多个对象 NamedParameterJdbcTemplate
String sql = "select * from t_person";
jdbcOperations.query(sql, EmptySqlParameterSource.INSTANCE, new BeanPropertyRowMapper<>(Person.class));
MyBatis

通过上面的代码我们可以发现使用NamedParameterJdbcTemplate操作数据库非常的容易,不会给开发带来额外的负担,代码非常的简洁,同时程序的运行效率也非常的高。

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

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

相关文章

  • NamedParameterJdbcTemplate学习总结

    摘要:批量操作数据批量操作数据一共有两种方法批量添加方法一男男方法二男男批量修改方法一男男方法二男男批量删除同上 环境 版本信息 spring的版本为4.1.4(spring3我也用过,就配置信息略有不同,其用法还是一样的) 配置信息 需要在applicationContext.xml中配置以下信息 如果已经在文件中配置了jdbctemplate的话还可以使用以下方法配置 ...

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

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

    Moxmi 评论0 收藏0
  • 9月11日·上海 UCan技术开放日-“构建云原生,拥抱新增长”交流会报名参会及预约直播入口

    摘要:如何更高效的实现资源合理调度和复用如何弹性使用云原生来保障瞬时业务增长如何基于构建安全的技术中台,为传统行业赋能月日上海技术开放日构建云原生,拥抱新增长将深度解读各企业在不同场景下的痛点,如何通过云原生的技术实现创新升级。Kubernetes如何更高效的实现资源合理调度和复用?如何弹性使用云原生来保障瞬时业务增长?如何基于K8S构建安全的技术中台,为传统行业赋能?9月11日·上海 UCan技...

    Tecode 评论0 收藏0
  • 9月11日·上海 UCan技术开放日-“构建云原生,拥抱新增长”交流会报名参会及预约直播入口

    摘要:微软雅黑宋体如何更高效的实现资源合理调度和复用如何弹性使用云原生来保障瞬时业务增长如何基于构建安全的技术中台,为传统行业赋能微软雅黑宋体  Kubernetes如何更高效的实现资源合理调度和复用?如何弹性使用云原生来保障瞬时业务增长?如何基于K8S构建安全的技术中台,为传统行业赋能? 9月11日·上海 UCan技术开放日构建云原生,拥抱新增长将深度解读各企业在不同场景下的痛点,如何通...

    Yumenokanata 评论0 收藏0
  • GitBook《拥抱未来的CSS布局方式:flex与grid布局》全教程

    摘要:拥抱未来的布局方式与布局全教程本书系列文章为对中布局与布局的详细介绍,已在同步更新,如您在阅读过程中发现描述有误或错别字的情况,您可以向本项目提出或。主要是对于标准里的布局方式草案中的布局方式进行一些总结。 GitBook《拥抱未来的CSS布局方式:flex与grid布局》全教程 本书(系列文章)为对CSS中flex布局与grid布局的详细介绍,已在GitHub同步更新,如您在阅读过程...

    zebrayoung 评论0 收藏0

发表评论

0条评论

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