因为工作需要,所以学习一下JdbcTemplate的用法。
JdbcTemplate的基本用法可以参考我之前的一篇博客 https://blog.csdn.net/cwr452829537/article/details/84562951
这里我们先准备一张用户表
CREATE TABLE `t_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`gender` int(3) NOT NULL,
`phone` varchar(50) NOT NULL,
`note` text,
`status` tinyint(4) NOT NULL,
`created_ts` datetime NOT NULL,
`last_modified_ts` datetime DEFAULT NULL,
`creator` bigint(20) NOT NULL,
`editor` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4;
INSERT INTO t_user VALUES(1, '张三', 2, '17565485695', '学生', 1, '2018-12-12 00:00:00.000', NULL, 1001, NULL);
INSERT INTO t_user VALUES(2, '李四', 1, '13654865859', '上班族', 1, '2018-12-12 00:00:00.000', NULL, 1001, NULL);
INSERT INTO t_user VALUES(3, '王五', 1, '13546652858', '班长', 1, '2018-12-12 00:00:00.000', NULL, 1001, NULL);
INSERT INTO t_user VALUES(4, '赵六', 2, '15856548565', NULL, 1, '2018-12-12 00:00:00.000', NULL, 1001, NULL);
INSERT INTO t_user VALUES(5, 'Tom', 1, '19846515616', 'student', 1, '2018-12-12 00:00:00.000', NULL, 1001, NULL);
INSERT INTO t_user VALUES(6, 'R', 1, '13654585654', 'Super', 1, '2018-12-12 00:00:00.000', NULL, 1001, NULL);
查询单个基本数据类型(如String,Integer,Long等)和单个对象可以使用jdbcTemplate.queryForObject()方法,查询基本数据类型列表可以使用jdbcTemplate.queryForList()方法,查询对象列表可以使用jdbcTemplate.query()或者jdbcTemplate.queryForList()
/**
* 初始化JdbcTemplate
* @return
*/
public JdbcTemplate init() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/java");
dataSource.setUsername("root");
dataSource.setPassword("root");
return new JdbcTemplate(dataSource);
}
(一)查询基本数据类型(String,Integer,Long等)
查询单个(如查询指定性别的用户数量)
public
参数分别是sql,sql参数数组,返回数据类型(这里我们就返回Integer)
/**
* 查询指定性别用户数量
* @param gender 性别,1:男,2:女
* @return
*/
@Override
public Integer countUsers(Integer gender) {
// 初始化JdbcTemplate
JdbcTemplate jdbcTemplate = init();
StringBuilder sql = new StringBuilder();
sql.append(" SELECT ")
.append(" COUNT(*) ")
.append(" FROM ")
.append(" t_user ")
.append(" WHERE gender = ?");
try {
return jdbcTemplate.queryForObject(sql.toString(), new Object[]{gender}, Integer.class);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
查询列表(如查询指定性别的用户id集合)
public
参数分别是sql,sql参数数组,返回数据类型(这里我们就返回Integer)
/**
* 查询指定性别的用户id集合
* @param gender 性别
* @return
*/
@Override
public List listIds(Integer gender) {
JdbcTemplate jdbcTemplate = init();
StringBuilder sql = new StringBuilder();
sql.append(" SELECT ")
.append(" id ")
.append(" FROM ")
.append(" t_user ")
.append(" WHERE gender = ?");
try {
return jdbcTemplate.queryForList(sql.toString(), new Object[]{gender}, Integer.class);
} catch (Exception e) {
return null;
}
}
(二)查询对象
查询单个(如查询指定id的用户信息)
public
参数分别是sql,sql参数数组(可为空),对象映射关系
/**
* 查询单个用户(通过jdbctemplate查询)
*
* @param id 用户id
* @return
*/
@Override
public UserEntity getOneByJdbc(Long id) {
UserEntity userEntity;
JdbcTemplate jdbcTemplate = init();
StringBuilder sql = new StringBuilder();
sql.append(" SELECT ")
.append(" id,name,gender,phone,note ")
.append(" FROM ")
.append(" t_user ")
.append(" WHERE ")
.append(" id = ? ");
try {
userEntity = jdbcTemplate.queryForObject(sql.toString(), new Object[]{id}, (rs, rowNum) -> {
UserEntity temp = new UserEntity();
temp.setId(rs.getLong("id"));
temp.setName(rs.getString("name"));
temp.setGender(rs.getInt("gender"));
temp.setPhone(rs.getString("phone"));
temp.setNote(rs.getString("note"));
return temp;
});
} catch (Exception e) {
return null;
}
return userEntity;
}
查询列表(查询所有用户列表,含分页)
public
参数分别是sql,sql参数数组(可为空),对象映射关系
/**
* 查询用户列表
*
* @param pageable
* @return
*/
@Override
public Page listUsersByJdbc(Pageable pageable) {
JdbcTemplate jdbcTemplate = init();
StringBuilder sql = new StringBuilder();
sql.append(" SELECT ")
.append(" id,name,gender,phone,note ")
.append(" FROM ")
.append(" t_user ")
.append(" LIMIT ?,? ");
try {
List list = jdbcTemplate.query(sql.toString(),
new Object[]{pageable.getPageNumber(), pageable.getPageSize()},
new BeanPropertyRowMapper<>(UserEntity.class)
);
return new PageImpl<>(list, pageable, list.size());
} catch (Exception e) {
return null;
}
}
总结