JdbcTemplateDemo2.java

package helloworld.jdbcTemplate;

import org.springframework.jdbc.core.JdbcTemplate;

import java.sql.*;
import java.util.List; /**
* 功能:通过JdbcTemplate实现查询操作
* 查询结果需要自己封装(实现RowMapper接口)
*/ public class JdbcTemplateDemo2 {
// JdbcTemplate使用步骤:
// 1、导入jar包;2、设置数据库信息;3、设置数据源;4、调用jdbcTemplate对象中的方法实现操作 public static void main(String[] args) {
// 设置数据库信息和据源
JdbcTemplateObject jdbcTemplateObject = new JdbcTemplateObject();
JdbcTemplate jdbcTemplate = jdbcTemplateObject.getJdbcTemplate(); // 插入数据
// insertData(); // 查询返回某一个值:查询表中数据总数
queryForOne(jdbcTemplate); // 查询返回对象
queryForObject(jdbcTemplate); // 查询返回list集合
queryForList(jdbcTemplate); // 使用JDBC底层实现查询
queryWithJDBC();
} // 插入数据
public static void insertData() {
JdbcTemplateObject jdbcTemplateObject = new JdbcTemplateObject();
JdbcTemplate jdbcTemplate = jdbcTemplateObject.getJdbcTemplate();
// 调用jdbcTemplate对象中的方法实现操作
String sql = "insert into user value(?,?,?)";
//表结构:id(int、自增),name(varchar 100),age(int 10)
int rows = jdbcTemplate.update(sql, null, "Tom", 35);
System.out.println("插入行数:" + rows);
} /**
* 查询返回某一个值:查询表中数据总数
*/
public static void queryForOne(JdbcTemplate jdbcTemplate) {
String sql = "select count(*) from user";
// 调用方法获得记录数
int count = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println("数据总数:" + count);
} /**
* 功能:查询返回单个对象
* 步骤:新建MyRowMapper类实现RowMapper接口,重写mapRow方法,指定返回User对象
*/
public static void queryForObject(JdbcTemplate jdbcTemplate) {
String sql = "select * from user where name = ?";
// 新建MyRowMapper类实现RowMapper接口,重写mapRow方法,指定返回User对象
User user = jdbcTemplate.queryForObject(sql, new MyRowMapper(), "Tom");
System.out.println(user);
} /**
* 功能:查询返回对象集合
* 步骤:新建MyRowMapper类实现RowMapper接口,重写mapRow方法,指定返回User对象
*/
public static void queryForList(JdbcTemplate jdbcTemplate) {
String sql = "select * from user";
// 第三个参数可以省略
List<User> users = jdbcTemplate.query(sql, new MyRowMapper());
System.out.println(users);
} /**
* 使用JDBC底层实现查询
*/
public static void queryWithJDBC() {
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
String jdbcUrl = "jdbc:mysql://192.168.184.130:3306/gxrdb"; try {
// 加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 创建连接
conn = DriverManager.getConnection(jdbcUrl, "root", "root");
String sql = "select * from user where name = ?";
// 预编译sql
psmt = conn.prepareStatement(sql);
// 从1开始,没有就不需要
psmt.setString(1, "Tom");
// 执行sql
rs = psmt.executeQuery();
// int num = psmt.executeUpdate(); //增删改,返回操作记录数 // 遍历结果集
while (rs.next()) {
//根据列名查询对应的值,也可以是位置序号
String name = rs.getString("name");
String age = rs.getString("age");
System.out.println(name);
System.out.println(age);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
rs.close();
psmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} }

  MyRowMapper.java

package helloworld.jdbcTemplate;

import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException; /**
* 实现RowMapper接口,返回User对象
* */
public class MyRowMapper implements RowMapper<User>{ @Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
// 获取结果集中的数据
String name = resultSet.getString("name");
String age = resultSet.getString("age");
// 把数据封装成User对象
User user = new User();
user.setName(name);
user.setAge(age);
return user;
}
}

  JdbcTemplateObject.java

package helloworld.jdbcTemplate;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource; /**
* 功能:设置数据库信息和数据源
*
* JdbcTemplat使用
* 1、导入jar包;2、设置数据库信息;3、设置数据源;4、调用jdbcTemplate对象中的方法实现操作
*/
public class JdbcTemplateObject {
DriverManagerDataSource dataSource;
JdbcTemplate jdbcTemplate; public JdbcTemplateObject() {
// 设置数据库信息
this.dataSource = new DriverManagerDataSource();
this.dataSource.setDriverClassName("com.mysql.jdbc.Driver");
this.dataSource.setUrl("jdbc:mysql://192.168.184.130:3306/gxrdb");
this.dataSource.setUsername("root");
this.dataSource.setPassword("root"); // 设置数据源
this.jdbcTemplate = new JdbcTemplate(dataSource); } public DriverManagerDataSource getDataSource() {
return dataSource;
} public void setDataSource(DriverManagerDataSource dataSource) {
this.dataSource = dataSource;
} public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
} public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
}

User.java

package helloworld.jdbcTemplate;

/**
* 数据封装类
* */
public class User {
private String name;
private String age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
} @Override
public String toString() {
return "User{姓名:" + name + "; 年龄:" + age + "}";
}
}

Spring之jdbcTemplate:查询的三种方式(单个值、单个对象、对象集合)的更多相关文章

  1. 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比

    [原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...

  2. 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】

    一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...

  3. Spring注解依赖注入的三种方式的优缺点以及优先选择

    当我们在使用依赖注入的时候,通常有三种方式: 1.通过构造器来注入: 2.通过setter方法来注入: 3.通过filed变量来注入: 那么他们有什么区别吗?应该选择哪种方式更好? 三种方式的区别小结 ...

  4. Spring中bean实例化的三种方式

    之前我已经有好几篇博客介绍Spring框架了,不过当时我们都是使用注解来完成注入的,具体小伙伴可以参考这几篇博客(Spring&SpringMVC框架案例).那么今天我想来说说如何通过xml配 ...

  5. Spring Boot应用启动的三种方式

    Spring Boot应用HelloWorld的三种启动方式: 项目的创建可以在http://start.spring.io/网站中进行项目的创建. 首先项目结构: 1.  通过main方法的形式启动 ...

  6. 浅谈Spring解决循环依赖的三种方式

    引言:循环依赖就是N个类中循环嵌套引用,如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错.下面说一下Spring是如果解决循环依赖的. 第一种: ...

  7. Spring学习(二)三种方式的依赖注入

    1.前言 上一篇讲到第一个Spring项目的创建.以及bean的注入.当然.注入的方式一共有三种.本文将展开细说. 1.set注入:本质是通过set方法赋值 1.创建老师类和课程类 1.Course ...

  8. Java反射02 : Class对象获取的三种方式和通过反射实例化对象的两种方式

    1.Class对象获取的三种方式 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79361463 上一章节已经说过,一般情况下,Jav ...

  9. JdbcTemplate查询数据 三种callback之间的区别

    JdbcTemplate针对数据查询提供了多个重载的模板方法,你可以根据需要选用不同的模板方法. 如果你的查询很简单,仅仅是传入相应SQL或者相关参数,然后取得一个单一的结果,那么你可以选择如下一组便 ...

随机推荐

  1. MySQL 的数据类型,有哪些?

    table th:first-of-type { width: 100px; } MySQL数据类型选择指南:https://www.awaimai.com/1146.html 实数: 数据类型 多少 ...

  2. “更新时间”字段的:ON UPDATE CURRENT_TIMESTAMP 含义

    "更新时间"字段的:ON UPDATE CURRENT_TIMESTAMP 含义: 表示在数据库数据有更新的时候UPDATE_TIME的时间会自动更新(如果数据库数据值没有变化的话 ...

  3. 在CentOS6.8系统上安装MySQL5.7(转)

    mysql-57">如何在CentOS 6.8系统上安装MySQL 5.7? 一.检查系统上是否已经安装MySQL 命令: ? 1 2 3 4 5 [root@localhost ~] ...

  4. 动态设置所有string字段不分词

    PUT     http://192.168.1.12:9200/test { "settings": { "number_of_shards": 3, &qu ...

  5. 倚天剑ss

    倚天剑ss https://my.potvpn.com/ https://trial.ssbit.win/

  6. 关于Quad PLL /CPLL参考时钟的选择

    关于Quad PLL /CPLL参考时钟的选择 1.参考时钟 2.channel PLL具体分析 CPLL端口描述 一张图说清了时钟为怎么被分成了north or south

  7. 浅析Hyperledger Fabric共识算法 摘自http://www.cocoachina.com/blockchain/20180829/24728.html

    Hyperledger Fabric共识算法 区块链系统是一个分布式架构,交易账本信息由各个节点管理,组成一个庞大的分布式账本.在分布式系统中,各个节点收到的交易信息的顺序可能存在差异(例如,网络延迟 ...

  8. 银行卡所属公司判断 参考自https://blog.csdn.net/well2049/article/details/79429130

    在网上找到了一个银行卡的验证,通过阿里的支付宝接口进行校验,能够准确识别是否存在,归属行,卡号类型是储蓄卡(DC)还是信用卡(CC). 接口api:需要传入的2个参数,卡号cardNo和cardBin ...

  9. Thinkphp 3.1. 3 ueditor 1.4.3 添加水印

    1.引入Ueditor  <!-- 实例化编辑器 --> <script type="text/javascript"> window.UEDITOR_HO ...

  10. 【巷子】---redux---【react】

    一.flux的缺陷 因为dispatcher和Store可以有多个互相管理起来特别麻烦 二.什么是redux 其实redux就是Flux的一种进阶实现.它是一个应用数据流框架,主要作用应用状态的管理 ...