SpringBoot之Spring JDBC Template常用方法

一、查询

1.无条件查询,返回一个字段,需要使用queryForObject方法
@Repository
public class TestMapper {

    @Resource
    private JdbcTemplate jdbcTemplate;

    //无条件查询,返回一个字段
    public Integer selectCount() {
        String sql = "select count(*) from user";
        Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
        return count;
   }
}
2.条件查询,返回一个字段
//条件查询,返回一个字段
public Integer selectCountById() {
    String sql = "select count(*) from user where id=?";
    Integer count = jdbcTemplate.queryForObject(sql, Integer.class, 1);
    return count;
}
3.条件查询,返回一个对象,需要一个RowMapper,将查询结果集ResultSet映射成一个对象
//条件查询,返回一个对象
public UserVO getUser(Integer id) {
    String sql = "select * from user where id=?";
    UserVO userVO = jdbcTemplate.queryForObject(sql, new RowMapper<UserVO>() {
        @Override
        public UserVO mapRow(ResultSet rs, int rowNum) throws SQLException {
            UserVO userVO = new UserVO();
            userVO.setId(rs.getInt("id"));
            userVO.setUserName(rs.getString("user_name"));
            userVO.setAge(rs.getInt("age"));
            return userVO;
        }
    }, id);
    return userVO;
}
4.查询返回列表,需要使用query方法
//查询返回列表
public List<UserVO> getUserVOS() {
    String sql = "select * from user";
    List<UserVO> userVOS = jdbcTemplate.query(sql, new RowMapper<UserVO>() {
        @Override
        public UserVO mapRow(ResultSet rs, int rowNum) throws SQLException {
            UserVO userVO = new UserVO();
            userVO.setId(rs.getInt("id"));
            userVO.setUserName(rs.getString("user_name"));
            userVO.setAge(rs.getInt("age"));
            return userVO;
        }
    });
    return userVOS;
}

二、修改

JdbcTemplate提供update方法来实现SQL的新增、修改、删除、执行存储过程等。

1.update操作
//update操作
public Integer updateUserVO(UserVO userVO) {
    String sql = "update user set user_name = ? and age = ? where id = ?";
    int i = jdbcTemplate.update(sql, userVO.getUserName(), userVO.getAge(), userVO.getId());
    return i;
}
2.insert操作

Spring为KeyHolder接口指代了一个通用的实现类GeneratedKeyHolder,该类返回新增记录时的自增长主键值。

//insert操作
public Integer insertUserVO(UserVO userVO) {
    String sql = "insert into user (user_name, age) values (?, ?)";
    //该类返回新增记录时的自增长主键值
    KeyHolder keyHolder = new GeneratedKeyHolder();
    int i = jdbcTemplate.update(new PreparedStatementCreator() {
        @Override
        public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
            PreparedStatement ps = con.prepareStatement(sql, new String[]{"id"});
            ps.setString(1, userVO.getUserName());
            ps.setInt(2, userVO.getAge());
            return ps;
        }
    }, keyHolder);
    return keyHolder.getKey().intValue();
}

三、缺点

1.实体的增、删、改,以及简单的查询都需要编写代码
2.SQL没有很好的管理起来,Java代码中拼写SQL语句,一旦SQL调整,会调整Java代码。
3.在Java代码中编写SQL,对于不同的数据库、不同的SQL,只能硬编码,根据数据库类型来调整SQL。
4.JDBC Template 缺少ORM查询功能。

猜你喜欢

转载自blog.csdn.net/qinaye/article/details/81909589