实现对数据库的查询操作
分为以下三种情况
1.返回值是一个值
2.返回值是一行(即一个对象)
3.返回值是多行(即一个对象集合)
前两种调用的执行方法与第三种方法不同
数据库user表数据:
首先创建数据库对象User:
package jdbctemplate;
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [name=" + username + ", password=" + password + "]";
}
}
1.返回值是一个值,代码如下:
public static void select1(){
//1:查询返回某一个值
DriverManagerDataSource datasource=new DriverManagerDataSource();
datasource.setDriverClassName("com.mysql.jdbc.Driver");
datasource.setUrl("jdbc:mysql://localhost:3307/spring?useUnicoding=true&characterEncoding=utf-8&useSSL=false");
datasource.setUsername("root");
datasource.setPassword("513721abcd");
JdbcTemplate jdbcTemplate=new JdbcTemplate(datasource);
String sql="select count(*) from user";
//注意方法中的参数
int count=jdbcTemplate.queryForObject(sql, Integer.class);//调用JdbcTemplate中的queryForObject方法,返回值是泛型
//这里返回值是一个Integer
System.out.println(count);
}
执行效果:
2.返回值是一行(即一个对象),代码如下:
public static void select2(){
//查询返回某一个对象
DriverManagerDataSource datasource=new DriverManagerDataSource();
datasource.setDriverClassName("com.mysql.jdbc.Driver");
datasource.setUrl("jdbc:mysql://localhost:3307/spring?useUnicoding=true&characterEncoding=utf-8&useSSL=false");
datasource.setUsername("root");
datasource.setPassword("513721abcd");
JdbcTemplate jdbcTemplate=new JdbcTemplate(datasource);
String sql="select* from user where username=?";//?占位符
//第二个参数是自己写的实现RowMapper接口的类,类型为之前写的User
User user=jdbcTemplate.queryForObject(sql, new myRowMapper(), "tom");//使用queryupdate方法,需要自己写一个继承rowmapper接口的类
System.out.println(user);
}
第二种执行方法queryForObject中第二个参数是手写的实现RowMapper接口
的myRowMapper类
class myRowMapper implements RowMapper<User>{//实现接口类的类型是User####
@Override
public User mapRow(ResultSet arg0, int arg1) throws SQLException {
//得到结果
String username=arg0.getString("username");//获取数据库中username
String password=arg0.getString("password");//获取数据库中password
//将结果封装到对象中
User user=new User();
user.setUsername(username);//设置User对象的username属性
user.setPassword(password);//User对象的password属性
return user;
}
}
执行效果:
3返回值是多行(即一个对象集合),代码如下:
public static void select3(){
//查询返回一个对象集合
DriverManagerDataSource datasource=new DriverManagerDataSource();
datasource.setDriverClassName("com.mysql.jdbc.Driver");
datasource.setUrl("jdbc:mysql://localhost:3307/spring?useUnicoding=true&characterEncoding=utf-8&useSSL=false");
datasource.setUsername("root");
datasource.setPassword("513721abcd");
JdbcTemplate jdbcTemplate=new JdbcTemplate(datasource);
String sql="select* from user";
List<User> user=jdbcTemplate.query(sql, new myRowMapper());//**使用query方法**
//System.out.println(user);
for (User user2 : user) {//遍历集合
System.out.println(user2.getUsername()+"\t"+user2.getPassword());
}
}
调用得执行方法是query,第二个参数是手写的实现RowMapper接口
手动写的myRowMapper类,返回值是一个数据库对象集合
执行效果:
注意:当返回值为一个对象或者一个对象集合时,前者调用queryForObjec,后者调用query,两个方法第二个参数(new 类名()),此类是手写的实现RowMapper接口的类,并且泛型类型是数据库对象类型