JdbcTemplate方法

查询的三种方式(单个值、单个对象、对象集合,返回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);
     
发布了21 篇原创文章 · 获赞 0 · 访问量 503

猜你喜欢

转载自blog.csdn.net/mws666/article/details/103448270
今日推荐