SpringBoot系列:Spring Boot集成jdbcTemplate

当我们需要连接使用数据库时,我们需要建立数据库连接,数据库连接是一项高额的开销,频繁的创建与销毁会造成巨大的性能问题,因而诞生了数据库连接池技术。

主流的ORM框架都配备了连接池,如hibernate,mybatis等,jdbcTemplate也是其中一种,它是Spring对数据库的操作在jdbc上面做了深层次的封装,更加轻量级,但相应地在编码上也较繁琐点。

一、示例演示

在SringBoot中,使用jdbcTemplate与其他Spring项目一样,只是SringBoot为我们提供了更加便捷的starter。

首先我们引入所需依赖,除了jdbcTemplate的外,我们还需要引入数据库连接驱动,这里以mysql为例,以及数据库连接池,这里我们采用了阿里的druid。


<dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
    <scope>runtimescope>
dependency>


<dependency>
    <groupId>com.alibabagroupId>
    <artifactId>druidartifactId>
    <version>1.0.29version>
dependency>


<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-jdbcartifactId>
dependency>    

然后配置文件中加入数据源的配置
SpringBoot系列:Spring Boot集成jdbcTemplate_第1张图片
Spring已经为我们默认注入了JdbcTemplate对象的bean示例,所以我们直接注入即可。

这里我们创建了万能的User类。
SpringBoot系列:Spring Boot集成jdbcTemplate_第2张图片
UserApi为controller层代码,提供了简单的增删改查方法,调用service,由于业务简单,并没有复杂逻辑,所以server直接调用了dao层,即UserDao。

UserApi代码:

@RestController
@RequestMapping("user")
public class UserApi {

    @Autowired
    private UserService userService;

    /**
     * 添加用户
     * @param user
     */
    @PostMapping("addUser")
    public String addUser(User user){
        userService.addUser(user);
        return "添加用户成功";
    }

    /**
     * 删除用户
     * @param id
     */
    @GetMapping("delUser")
    public String delUser(@RequestParam(value = "id") int id){
        userService.delUser(id);
        return "删除用户成功";
    }

    /**
     * 修改用户信息
     * @param user
     */
    @PostMapping("updateUser")
    public String updateUser(User user){
        userService.updateUser(user);
        return "修改用户成功";
    }

    /**
     * 获取用户信息
     * @param id
     * @return
     */
    @GetMapping("getUser")
    public User getUser(@RequestParam(value = "id") int id){
        return userService.getUser(id);
    }

    /**
     * 获取所有用户信息
     * @return
     */
    @GetMapping("getUsers")
    public List<User> getUsers(){
        List<User> users = userService.findAll();
        return users;
    }
 }

UserDao代码:

@Repository
public class UserDao implements IUserDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    /**
     * 添加用户
     * @param user
     * @return
     */
    @Override
    public int add(User user) {
        return jdbcTemplate.update("insert into user(username, password) value(?, ?)",
                user.getUsername(), user.getPassword());
    }

    /**
     * 根据id删除用户
     * @param id
     * @return
     */
    @Override
    public int del(int id) {
        return jdbcTemplate.update("delete from user where id = ?", id);
    }

    /**
     * 更新用户信息
     * @param user
     * @return
     */
    @Override
    public int update(User user) {
        return jdbcTemplate.update("update user set username = ?, password = ? where id = ?",
                user.getUsername(), user.getPassword(), user.getId());
    }

    /**
     * 根据id查找用户
     * @param id
     * @return
     */
    @Override
    public User find(int id) {
        List<User> users = jdbcTemplate.query("select * from user where id = ?",
                new RowMapper<User>() {
                    @Override
                    public User mapRow(ResultSet rs, int i) throws SQLException {
                        User user = new User();
                        //user.setId(rs.getInt("id"));
                        user.setUsername("通过自定义RowMapper设置列:" + rs.getString("username"));
                        user.setPassword("通过自定义RowMapper设置列:" + rs.getString("password"));
                        return user;
                    }
                }, id);
        return users != null && users.size() > 0 ? users.get(0) : null;
    }

    /**
     * 获取全部用户
     * @return
     */
    @Override
    public List<User> findAll() {
        return jdbcTemplate.query("select * from user ", new BeanPropertyRowMapper<>(User.class));
    }
}

可以看到,jdbcTemplate的使用还是比较简单,它为我们提供了一系列常用的增删改查方法,同时,也可以看到,jdbcTemplate需要我们自己提供sql,而方法的本质即为传入sql与对应参数,然后映射结果集。

这与原生jdbc类似,只不过jdbcTemplate封装的更加简单,屏蔽掉了重复性的工作。复杂的结果集可以使用RowMapper<>进行映射。

源码地址:https://github.com/imyanger/springboot-project/tree/master/p5-springboot-jdbcTemplate

你可能感兴趣的:(SpringBoot系列,SpringBoot,Spring,Boot,jdbcTemplate)