JdbcTemplate 对查询操作有非常多的方法,在这里只介绍四个方法,其他的自己看源码,通过方法名和参数就能知道如何使用,都是套路,下就开始介绍套路。
设置数据库信息
在DriverManagerDataSource 中设置数据库驱动,连接地址,数据库名,密码等
DriverManagerDataSource dataSource = new DriverManagerDataSource();
//设置数据的驱动
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
//设置数据的连接地址
dataSource.setUrl("jdbc:mysql://35.160.96.200:3306/spring_db");
//设置用户名
dataSource.setUsername("root");
//设置密码
dataSource.setPassword("cfox");
创建Jdbc 模板
将jdbc设置信息通过jdbc进行设置,同时通过jdbc模板对象对数据库进行操作。
//创建一个jdbc 模板对象,注意 dataSource
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
下面介绍其中四种查询方法
返回类型
在查询的时候,可能需要返回单一的类型,就可以使用queryForObjec
种方法。
public <T> T queryForObject(String sql, Class<T> requiredType, Object... args)
看到这,会有疑问,怎么是出来泛型了,下面看看如何使用的,就会知道为什么了。
public void selectType() {
String sql = "SELECT age FROM user_info where name=?";
int age = template.queryForObject(sql, Integer.class, "zhangwu");
System.out.println(age);
}
在上面的代码中,查询名字为zhangwu
的人的年龄,看到这里,可能还会有如果返回的数据是多条相同类型的数据,怎么办?如上面例子返回多个人的age
。 那么就要使用queryForList
方法了,
public <T> List<T> queryForList(String sql, Class<T> elementType)
下面的代码了。
public void selectMultType() {
String sql = "SELECT age FROM user_info";
ArrayList<Integer> ages = (ArrayList<Integer>) template.queryForList(sql, Integer.class);
for (Integer integer : ages) {
System.out.println(integer);
}
}
这段代码就是把整个user_info
表中的每一条中age
数据查出来。
返回一个对象
如果在查询时,能把查询的数据都放在对象中,那再好不过了,Spring JdbcTemplate 也提供了这中查询。
在这里先看两个方法:
public <T> T queryForObject(String sql, RowMapper<T> rowMapper, Object... args)
public <T> List<T> query(String sql, RowMapper<T> rowMapper)
这连个方法可能注意到都有个RowMapper
类型的参数,这个就是实现要返回的对象的接口。下面以返回User
对象为例。
- 实现
RowMapper
接口
public class UserRowMap implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
return user;
}
}
其实是在这个实现方法中将查询的数据转换成对象返回的。
下面在看看具体实现代码:
public void seletObject() {
String sql = "SELECT * FROM user_info where age=?";
User user = template.queryForObject(sql, new UserRowMap(), 25);
System.out.println(user.toString());
}
public void seletMultObject() {
String sql = "SELECT * FROM user_info";
ArrayList<User> users = (ArrayList<User>) template.query(sql, new UserRowMap()); for (User user : users) {
System.out.println(user.toString());
}
}
代码很简单,不多解释。