8.5. JdbcTemplate
8.5.1. execute
jdbcTemplate.execute("CREATE TABLE USER (id integer, name varchar(100))");
8.5.2. queryForInt
int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");
8.5.3. queryForObject
8.5.3.1. 返回整形与字符型
Integer age = queryForObject("select age from emp", Integer.class);String name = queryForObject("select name from emp",String.class);
8.5.3.2. 查询 Double 类型数据库
private double getSumByMemberId(int memberId) {double result = 0.0d;String sql = "SELECT sum(o.price::NUMERIC) as total FROM public.order o group by member_id ="+ memberId;try {result = jdbcTemplate.queryForObject(sql, Double.class);} catch (org.springframework.dao.EmptyResultDataAccessException e) {log.info("{} {}", MemberId, e.toString());}return result;}
8.5.3.3. 返回日期
注意 Date 是 java.util 不是 java.sql
private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");@Autowiredprivate JdbcTemplate jdbcTemplate;@Scheduled(initialDelay = 1000, fixedRate = 60000)public void currentDate() {Date date = jdbcTemplate.queryForObject("select sysdate from dual", Date.class);log.info("The oracle sysdate is {}", dateFormat.format(date));}
8.5.3.4. 返回结果集
@Autowiredprivate JdbcTemplate jdbcTemplate;@RequestMapping(value = "/article")public @ResponseBody String dailyStats(@RequestParam Integer id) {String query = "SELECT id, title, content from article where id = " + id;return jdbcTemplate.queryForObject(query, (resultSet, i) -> {System.out.println(resultSet.getLong(1) + "," + resultSet.getString(2) + "," + resultSet.getString(3));return (resultSet.getLong(1) + "," + resultSet.getString(2) + "," + resultSet.getString(3));});}
8.5.3.5. 通过 "?" 向SQL传递参数
package com.example.api.restful;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController;import com.example.api.pojo.ResponseRestful;@RestController @RequestMapping("/restful/cms") public class CmsRestController {@Autowiredprivate JdbcTemplate jdbcTemplate;@RequestMapping(value = "/article/update/count/{articleId}", method = RequestMethod.GET, produces = { "application/xml", "application/json" })public ResponseRestful updateCount(@PathVariable int articleId) {String sql = "SELECT count(*) FROM cms.article WHERE id > ?";int count = jdbcTemplate.queryForObject(sql, new Object[] { articleId }, Integer.class);return new ResponseRestful(true, 1, "文章更新", count);} }
8.5.3.6. RowMapper 记录映射
package cn.netkiller.model;import java.sql.ResultSet; import java.sql.SQLException;import org.springframework.jdbc.core.RowMapper;public class CustomerRowMapper implements RowMapper {public Object mapRow(ResultSet rs, int rowNum) throws SQLException {Customer customer = new Customer();customer.setId(rs.getInt("ID"));customer.setName(rs.getString("NAME"));customer.setAge(rs.getInt("AGE"));return customer;}}
public Customer findByCustomerId(int id){String sql = "SELECT * FROM CUSTOMER WHERE ID = ?";Customer customer = (Customer)getJdbcTemplate().queryForObject(sql, new Object[] { id }, new CustomerRowMapper());return customer; }
Member member = this.jdbcTemplate.queryForObject("select first_name, last_name from member where id = ?",new Object[]{112L}, new RowMapper<Member>() {public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {Member member = new Member();member.setFirstName(rs.getString("first_name"));member.setLastName(rs.getString("last_name"));return member;} });
8.5.4. queryForList
List rows = jdbcTemplate.queryForList("SELECT * FROM USER"); Iterator it = rows.iterator(); while(it.hasNext()) { Map userMap = (Map) it.next(); System.out.print(userMap.get("id") + "\t"); System.out.print(userMap.get("name") + "\t"); System.out.print(userMap.get("sex") + "\t"); System.out.println(userMap.get("age") + "\t"); }
@RequestMapping("/article/tag/{siteId}")public ResponseRestful tag(@PathVariable int siteId) {List<Tag> tags = new ArrayList<Tag>();List<Map<String, Object>> rows = new ArrayList<Map<String, Object>>();String sql = "SELECT id,name FROM cms.tag WHERE site_id = ?";rows = jdbcTemplate.queryForList(sql, new Object[] { siteId });for (Map<String, Object> row : rows) {Tag tag = new Tag();tag.setId((Integer) row.get("id"));tag.setName((String) row.get("name"));tags.add(tag);}logger.info("tag {} SQL: {}", siteId, sql);return new ResponseRestful(true, tags.size(), "标签", tags);}
8.5.5. queryForMap
Map<String, Object> map = this.jdbcTemplate.queryForMap("SELECT * FROM USERS WHERE USERNAME=?", "username"); System.out.println(map.get("USERNAME"));
8.5.6. query
8.5.6.1. ResultSet
HashMap<String,String> member = jdbcTemplate.query("select name,age from member where id=1", (ResultSet rs) -> {HashMap<String,String> results = new HashMap<>();while (rs.next()) {results.put(rs.getString("name"), rs.getString("age"));}return results; });
8.5.6.2. ResultSetExtractor
ResultSetExtractor
HashMap<String,String> member = jdbcTemplate.query("select name,age from member where id=1", new ResultSetExtractor<Map>(){@Overridepublic Map extractData(ResultSet rs) throws SQLException,DataAccessException {HashMap<String,String> mapResult= new HashMap<String,String>();while(rs.next()){mapResult.put(rs.getString("name"),rs.getString("age"));}return mapResult;} });
8.5.6.3. RowMapper
List<Actor> actors = this.jdbcTemplate.query("select first_name, last_name from actor",new RowMapper<Actor>() {public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {Actor actor = new Actor();actor.setFirstName(rs.getString("first_name"));actor.setLastName(rs.getString("last_name"));return actor;} });
public List<Actor> findAllActors() {return this.jdbcTemplate.query( "select first_name, last_name from actor", new ActorMapper()); }private static final class ActorMapper implements RowMapper<Actor> {public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {Actor actor = new Actor();actor.setFirstName(rs.getString("first_name"));actor.setLastName(rs.getString("last_name"));return actor;} }
8.5.7. queryForRowSet
SqlRowSet rs = jdbcTemplate.queryForRowSet("select * from test");
8.5.8. update
@RequestMapping(value="/comment/add/{siteId}/{articleId}", method = RequestMethod.POST)public ResponseRestful commentAdd(@PathVariable("siteId") int siteId, @PathVariable("articleId") int articleId, @RequestBody Comment comment) {String sql = "insert into cms.comment("+ "article_id, "+ "ctime,"+ "content,"+ "member_id,"+ "nickname,"+ "picture"+ ") values(?,?,now(),?,?,?,?,?)";int count = jdbcTemplate.update(sql, comment.getArticleId(),comment.getContent(),comment.getMemberId(),comment.getNickname(),comment.getPicture());return new ResponseRestful(true, count, "评论添加成功", comment);}
原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。
8.5. JdbcTemplate相关推荐
- 手撸一个JdbcTemplate,带你了解其原理
前提要求 能够使用jdbc链接数据库 能够利用jdbc完成数据库的增删改查等操作 对泛型有一定的了解 基本原理 通过jdbc链接数据库,查询数据库中内容 利用反射对数据库中查询字段进行封装 步骤 1. ...
- SpringBoot (八) :Spring Boot多数据源(JdbcTemplate)配置与使用
什么是JdbcTemplate 为了使 JDBC 更加易于使用,Spring 在 JDBCAPI 上定义了一个抽象层, 以此建立一个JDBC存取框架. 作为 SpringJDBC 框架的核心, JDB ...
- SpringBoot (四) :SpringBoot整合使用JdbcTemplate
什么是JdbcTemplate 为了使 JDBC 更加易于使用,Spring 在 JDBCAPI 上定义了一个抽象层, 以此建立一个JDBC存取框架. 作为 SpringJDBC 框架的核心, JDB ...
- Spring从菜鸟到高手(四)(上)使用JdbcTemplate类实现用户登陆验证、批量更新
标签:Spring java JdbcTemplate Spring从菜鸟到高手 绝缘材料 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.ht ...
- JDBC,JdbcTemplate,JPA傻傻分不清楚
2019独角兽企业重金招聘Python工程师标准>>> JDBC.JDBCTemplate.MyBatis.Hiberante.Jpa关系概述 JDBC的使用 使用JDBC访问数据库 ...
- Spring JdbcTemplate方法详解
2019独角兽企业重金招聘Python工程师标准>>> Spring JdbcTemplate方法详解 标签: springhsqldbjava存储数据库相关sql 2012-07- ...
- Spring JdbcTemplate的queryForList(String sql , ClassT elementType)易错使用--转载
原文地址: http://blog.csdn.net/will_awoke/article/details/12617383 一直用ORM,今天用JdbcTemplate再次抑郁了一次. 首先看下这个 ...
- Spring中jdbcTemplate的用法实例
一.首先配置JdbcTemplate: 要使用Jdbctemplate 对象来完成jdbc 操作.通常情况下,有三种种方式得到JdbcTemplate 对象. 第一种方式:我们可以在自己 ...
- jdbc mysql 返回游标_使用JdbcTemplate流式(游标)读取数据库
前言 生产环境中经常使用数据库分页的方式来控制一次获取的数据量,而数据处理中经常会有另外一种场景: 从一个数据库表中读取所有数据进行处理并将结果保存在其他数据库或文件或NoSql数据库中. 这时候也可 ...
- jdbcTemplate 的update 和batchUpdate 方法的使用
update 方法 首先来看update 方法 1. sql的生成: 这个方法有三个实现,每一个方法都包含一个sql 和另外的一个参数 我们就拿第一个方法为例子: 第一个sql 应该怎么写 ...
最新文章
- Elasticsearch Top 51 重中之重面试题及答案
- leetcode算法题--最后一块石头的重量 II★
- 【thymeleaf】分页代码
- 通过Dapr实现一个简单的基于.net的微服务电商系统(七)——一步一步教你如何撸Dapr之服务限流...
- 成为java gc专家_成为JavaGC专家上(2)—如何监控Java垃圾回收机制
- Python抽象类(abc模块)
- 程序打成jar包路径不对、找不到配置文件的解决
- android 系统字体无效,android内嵌H5页面,字体设置失效的问题
- 【数据库】Oracle更改时间显示格式
- 考试用计算机反思800字,期中考试总结反思作文800字
- 《成为乔布斯》读后感
- 用linux编写菜单界面,配置syslinux菜单界面
- 解决鼠标不能移出视频框,切换网页不能播视频的小窍门
- IGRP和EIGRP 详解
- 地图原点半径距离经纬度计算
- git 提交时报错 error: failed to push some refs to ‘https://github.com/xxx/demo.git 解决方法
- 2017年大工考博英语加试试题。给学弟学妹们一点帮助
- 淘宝短视频,为什么搬运的短视频没有流量?从算法角度分析
- 线性插值基本原理推导
- Arch Linux 系统迁移