JDBC Template中的DQL操作

1. DQL–查询数据使用RowMapper方式存储对象中

@Test
public void fun9() {
/RowMapper:行映射者,将一行数据记录映射成指定的类型
new RowMapper:将一行数据记录映射成User对象
mapRow方法:映射行,实现如何将一行数据记录映射成User对象
mapRow方法的2个参数:
参数一resultset:当前光标指向的一行数据记录
参数二i:索引,第几行
底层原理:
1.query方法中封装了获取连接和预编译操作,执行了executeQuery方法,得到一个结果集ResultSet
2.遍历结果集,调用一次ResultSet的next方法,如果有数据,就将这个resultset作为参数传递mapRow方法并让它执行一次,封装成一个user
3.结果集有多行,底层创建一个List集合将所有的user对象保存起来,并返回
/

String sql = “SELECT *FROM USER ;”;
List list = jdbcTemplate.query(sql, new RowMapper() {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
int id = rs.getInt(“id”);
String name = rs.getString(“name”);
String password = rs.getString(“password”);
int age = rs.getInt(“age”);
user.setId(id);
user.setName(name);
user.setPassword(password);
user.setAge(age);
return user;
}
});
for (User user : list) {
System.out.println(user);
}

2.DQL–查询数据–使用BeanPropertyrRowMapper封装数据***

@Test
public void fun10() {
/如何将数据记录封装成javaBean对象!!!!
api:List list= jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(T.class),?);
注意:在使用RowMapper接口的实现类BeanPropertyRowMapper时,必须传入指定的要封装的javabean的Class对象
/
String sql = "SELECT FROM USER WHERE age=?";
List list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class), 23);
/

new BeanPropertyRowMapper<>(Book.class)
底层原理:
1.使用反射通过无参构造方法创建出user对象,class.newInstance();
2.执行了executeQuery方法,得到一个结果集ResultSet
3.遍历结果集,调用一次ResultSet的next方法,如果有数据,就将这个resultset作为参数传递mapRow方法
4.通过反射获取User类的set方法,从而给对象赋值
5.将每行封装的user对象保存在集合中返回即可
*/
for (User user : list) {
System.out.println(list);
}
}

DQL–实体类(javaBean)

DQL–实体类(javaBean)注意事项
1.数据库中一张表,对应着java中的一个类,javabean的类名建议与表名一致
2.javaBean中的属性名必须与数据表的字段一致(建议必须)
3.JdbcTemplate是不是直接根据属性名相同就赋值了呢???不是
4.JdbcTemplate根据sql的查询结果的字段名,拼接在set之后,将字段名首字母大写。调用set方法赋值
5.javaBean类必须有无参构造方法,底层使用反射调用无参构造方法。
6.javaBean类中,不要写基本数据类型,写包装类,因为在数据库中可能有null,null不能赋值给java中的基本类型的
7.javaBean类中的属性的数量不是必须与数据表中列名的数量一致(可以是多个,也可以少)

你可能感兴趣的:(javaEE)