查询的三种方式(单个值、单个对象、对象集合,返回Map集合)
8 /**
9 * 功能:通过JdbcTemplate实现查询操作
10 * 查询结果需要自己封装(实现RowMapper接口)
11 */
12
13 public class JdbcTemplateDemo2 {
14 // JdbcTemplate使用步骤:
15 // 1、导入jar包;2、设置数据库信息;3、设置数据源;4、调用jdbcTemplate对象中的方法实现操作
16
17 public static void main(String[] args) {
18 // 设置数据库信息和据源
19 JdbcTemplateObject jdbcTemplateObject = new JdbcTemplateObject();
20 JdbcTemplate jdbcTemplate = jdbcTemplateObject.getJdbcTemplate();
21
22 // 插入数据
23 // insertData();
24
25 // 查询返回某一个值:查询表中数据总数
26 queryForOne(jdbcTemplate);
27
28 // 查询返回对象
29 queryForObject(jdbcTemplate);
30
31 // 查询返回list集合
32 queryForList(jdbcTemplate);
33
34 // 使用JDBC底层实现查询
35 queryWithJDBC();
36 }
37
38 // 插入数据
39 public static void insertData() {
40 JdbcTemplateObject jdbcTemplateObject = new JdbcTemplateObject();
41 JdbcTemplate jdbcTemplate = jdbcTemplateObject.getJdbcTemplate();
42 // 调用jdbcTemplate对象中的方法实现操作
43 String sql = "insert into user value(?,?,?)";
44 //表结构:id(int、自增),name(varchar 100),age(int 10)
45 int rows = jdbcTemplate.update(sql, null, "Tom", 35);
46 System.out.println("插入行数:" + rows);
47 }
48
49 /**
50 * 查询返回某一个值:查询表中数据总数
51 */
52 public static void queryForOne(JdbcTemplate jdbcTemplate) {
53 String sql = "select count(*) from user";
54 // 调用方法获得记录数
55 int count = jdbcTemplate.queryForObject(sql, Integer.class);
56 System.out.println("数据总数:" + count);
57 }
58
59 /**
60 * 功能:查询返回单个对象
61 * 步骤:新建MyRowMapper类实现RowMapper接口,重写mapRow方法,指定返回User对象
62 */
63 public static void queryForObject(JdbcTemplate jdbcTemplate) {
64 String sql = "select * from user where name = ?";
65 // 新建MyRowMapper类实现RowMapper接口,重写mapRow方法,指定返回User对象
66 User user = jdbcTemplate.queryForObject(sql, new MyRowMapper(), "Tom");
67 System.out.println(user);
68 }
69
70 /**
71 * 功能:查询返回对象集合
72 * 步骤:新建MyRowMapper类实现RowMapper接口,重写mapRow方法,指定返回User对象
73 */
74 public static void queryForList(JdbcTemplate jdbcTemplate) {
75 String sql = "select * from user";
76 // 第三个参数可以省略
77 List<User> users = jdbcTemplate.query(sql, new MyRowMapper());
78 System.out.println(users);
79 }
80
81 /**
82 * 使用JDBC底层实现查询
83 */
84 public static void queryWithJDBC() {
85 Connection conn = null;
86 PreparedStatement psmt = null;
87 ResultSet rs = null;
88 String jdbcUrl = "jdbc:mysql://192.168.184.130:3306/gxrdb";
89
90 try {
91 // 加载驱动
92 Class.forName("com.mysql.jdbc.Driver");
93 // 创建连接
94 conn = DriverManager.getConnection(jdbcUrl, "root", "root");
95 String sql = "select * from user where name = ?";
96 // 预编译sql
97 psmt = conn.prepareStatement(sql);
98 // 从1开始,没有就不需要
99 psmt.setString(1, "Tom");
100 // 执行sql
101 rs = psmt.executeQuery();
102 // int num = psmt.executeUpdate(); //增删改,返回操作记录数
103
104 // 遍历结果集
105 while (rs.next()) {
106 //根据列名查询对应的值,也可以是位置序号
107 String name = rs.getString("name");
108 String age = rs.getString("age");
109 System.out.println(name);
110 System.out.println(age);
111 }
112 } catch (Exception e) {
113 e.printStackTrace();
114 } finally {
115 try {
116 rs.close();
117 psmt.close();
118 conn.close();
119 } catch (SQLException e) {
120 e.printStackTrace();
121 }
122 }
123 }
124
125 }
MyRowMapper.java
1 package helloworld.jdbcTemplate;
2
3 import org.springframework.jdbc.core.RowMapper;
4
5 import java.sql.ResultSet;
6 import java.sql.SQLException;
7
8 /**
9 * 实现RowMapper接口,返回User对象
10 * */
11 public class MyRowMapper implements RowMapper<User>{
12
13 @Override
14 public User mapRow(ResultSet resultSet, int i) throws SQLException {
15 // 获取结果集中的数据
16 String name = resultSet.getString("name");
17 String age = resultSet.getString("age");
18 // 把数据封装成User对象
19 User user = new User();
20 user.setName(name);
21 user.setAge(age);
22 return user;
23 }
24 }
记两个JDBCTemplate查询的简单方法
1. query()
1.1概述:查询结果,将结果封装为JavaBean对象
1.2参数:query的参数:RowMapper。一般使用BeanPropertyRowMapper实现类,可以完成数据到JavaBean的自动封装
1.3使用方法:new BeanPropertyRowMapper<自定义封装类型A>(A.class)
@Test
public void test_a(){
String sql = "select * from emp"; //不建议使用*,应示明提取的列名,这里示范需要,查询员工表的所有信息
List<Emp> list = template.query(sql,new BeanPropertyRowMapper<Emp>(Emp.class)); //查询并封装为JavaBean对象
for(Emp emp:list){
System.out.println(emp); //打印
}
}
2. queryForObject()
2.1概述:常用于聚合函数的统计,查询结果,将结果封装为对象
@Test
public void test_a(){
String sql = "select count(id) from emp)"; //通过primary_key————id,查询emp中员工的数量
Long total = template.queryForObject(sql,Long.class); //此处将查询结果封装为Long类型
System.out.println(total); //打印
JDBCTemplate返回Map集合
接口
Map<String, Object> queryAlarmByMonth(Integer deptId);
实现类
@Override
public Map<String, Object> queryAlarmByMonth(Integer deptId) {
Map<String, Object> map = jdbcTemplate.queryForMap("SELECT MONTH(starttime) AS MONTH,COUNT(alarm_id) FROM `sys_alarms` sa JOIN `sys_dept` sd ON sa.area_id=sd.area_id WHERE dept_id=? GROUP BY MONTH (starttime)", deptId);
if (map!=null){
return map;
}else {
return null;
}
}
Map<String, Object> map = jdbcTemplate.queryForMap(
"SELECT MONTH(starttime) AS MONTH,COUNT(alarm_id) FROM `sys_alarms` sa JOIN `sys_dept` sd ON sa.area_id=sd.area_id WHERE dept_id=? GROUP BY MONTH (starttime)", deptId);