Spring之jdbcTemplate:查询的三种方式(单个值、单个对象、对象集合)

JdbcTemplateDemo2.java 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
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 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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 + "}";
    }
}
复制代码

 

posted @   乖怪丶  阅读(6554)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
欢迎这位客官来到《Spring之jdbcTemplate:查询的三种方式(单个值、单个对象、对象集合) - 乖怪丶 - 博客园》
点击右上角即可分享
微信分享提示