Spring Boot 使用JdbcTemplate
来源:互联网 发布:360软件认证费用 编辑:程序博客网 时间:2024/05/24 07:32
此处主要针对execute和batchUpdate中部分内容说明。
针对大数据量的插入推荐使用批量插入以便提高性能,经过实战说明JdbcTemplate批量插入效率高于循环单条插入。
JdbcTemplate继承JdbcAccessor类与JdbcOperations接口;其中JdbcAccessor类设置数据源,JdbcOperations定义方法JdbcTemplate来实现。
1. JdbcTemplate主要提供以下五类方法:
execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
query方法及queryForXXX方法:用于执行查询相关语句;
call方法:用于执行存储过程、函数相关语句。
2. maven中添加相应模块
<!--mysql 驱动--><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency> <!--支持jdbc--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
3. 配置数据源
#mysql数据源spring.datasource.url=jdbc:mysql://192.168.*.*:3306/venus_spb?useUnicode=true&characterEncoding=UTF-8spring.datasource.username=****spring.datasource.password=*****spring.datasource.driver-class-name=com.mysql.jdbc.Driver
4. Service类中注入JdbcTemplate实例
@Servicepublic class UserServiceImpl implements UserService { //JdbcTemplate注入实例 @Resource private JdbcTemplate jdbcTemplate;}
5. 实例说明
5.1 查询返回实体List
@Overridepublic List<UserDto> queryUsers() { RowMapper<UserDto> rm = BeanPropertyRowMapper.newInstance(UserDto.class); List<UserDto> userList = jdbcTemplate.query("select * from vns_user",rm); //userList = jdbcTemplate.queryForList("select * from vns_user",UserDto.class); return userList;}
特别说明:使用queryForList查询出现异常,是因为UserDto.class自动编入一列导致与实际列数不符
{ "timestamp": 1481377345590, "status": 500, "error": "Internal Server Error", "exception": "org.springframework.jdbc.IncorrectResultSetColumnCountException", "message": "Incorrect column count: expected 1, actual 4", "path": "/venus/user/getUserList"}
5.2 批量插入
方法1:
@Override@Transactionalpublic Integer batchInsertUsers(List<UserDto> listUser) { String sql = "insert vns_user(u_code,u_name,u_age) values(?,?,?)"; jdbcTemplate.batchUpdate(sql,new BatchPreparedStatementSetter() { public void setValues(PreparedStatement ps, int i)throws SQLException { String code = listUser.get(i).getuCode(); String name=listUser.get(i).getuName(); int age=listUser.get(i).getuAge(); ps.setString(1,code); ps.setString(2, name); ps.setInt(3, age); } public int getBatchSize() { return listUser.size(); } }); return 0;}
方法2:
@Override@Transactionalpublic Integer batchInsertUsers(List<UserDto> listUser) { String sql = "insert vns_user(u_code,u_name,u_age) values(?,?,?)"; jdbcTemplate.batchUpdate(sql,setParameters(listUser)); return 0;}/** * 设置参预置数 * @param listUser * @return */private List<Object[]> setParameters(List<UserDto> listUser){ List<Object[]> parameters = new ArrayList<Object[]>(); for (UserDto u : listUser) { parameters.add(new Object[] { u.getuCode(),u.getuName(),u.getuAge()}); } return parameters;}
0 0
- Spring Boot 使用JdbcTemplate
- spring boot jdbctemplate使用
- spring boot中使用JdbcTemplate
- 9. 使用JdbcTemplate【从零开始学Spring Boot】
- spring boot + JdbcTemplate 使用druid数据源
- Spring Boot中使用JdbcTemplate访问数据库
- 9. 使用JdbcTemplate【从零开始学Spring Boot】
- Spring Boot中使用JdbcTemplate访问数据库
- Spring Boot 学习9--使用JdbcTemplate
- Spring Boot中使用JdbcTemplate访问数据库
- Spring Boot中使用JdbcTemplate访问数据库
- Spring Boot中使用JdbcTemplate访问数据库
- spring boot之JdbcTemplate
- Spring Boot (六) JdbcTemplate
- spring boot集成JdbcTemplate
- Spring Boot整合jdbctemplate
- Spring boot 五 jdbcTemplate
- (9)使用JdbcTemplate【从零开始学Spring Boot】
- 推理类电影:《十二怒汉》
- 第一篇博客——maven笔记
- Hibernate学习笔记(一)—— 使用maven创建Hibernate项目
- linux 启动过程以及 /etc/rc.d/init.d/目录的一点理解
- Caffe学习系列(15):计算图片数据的均值
- Spring Boot 使用JdbcTemplate
- 项目随笔
- 图像阈值化(Python+opencv)
- android生成及解析xml 模版代码
- 【C++学习】【阶段一】指针&文件IO
- python实现obj模型的归一化
- GOF设计模式之INTERPRETER(解释器)
- 详解Java泛型(三)之类型擦除的问题
- 基于时间序列的异常检测C++实现