第二篇 : SpringBoot 2.x中使用JdbcTemplate

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 数据文件DROP TABLE IF EXISTS users;CREATE TABLE users ( id INT ( 11 ) PRIMARY KEY AUTO_INCREMENT, username VARCHAR ( 255 ) NO...

数据文件

DROP TABLE IF EXISTS users;

CREATE TABLE users ( 
id INT ( 11 ) PRIMARY KEY AUTO_INCREMENT, 
username VARCHAR ( 255 ) NOT NULL, 
passwd VARCHAR ( 255 ) 
) ENGINE = INNODB DEFAULT CHARSET = utf8;

INSERT users VALUES ( NULL, '翠花', '123' );
INSERT users VALUES ( NULL, '王卫国', '123' );
INSERT users VALUES ( NULL, '李小花', '123' );
INSERT users VALUES ( NULL, '王二柱', '123' );
INSERT users VALUES ( NULL, '赵铁蛋', '123' );

需要引入的依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

application.properties

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql///test
spring.datasource.username=root
spring.datasource.password=root

application.yml

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql///test
    username: root
    password: root

User.java

package com.prvi.gabriel.springbootforjdbctemplate.entity;

/**
 * Created with Intellij IDEA.
 *
 * @Author: Gabriel
 * @Date: 2018-10-08
 * @Desciption:
 */
public class User {

    private long id;

    private String username;

    private String password;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    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{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

UserController.java

package com.prvi.gabriel.springbootforjdbctemplate.controller;

import com.prvi.gabriel.springbootforjdbctemplate.entity.User;
import com.prvi.gabriel.springbootforjdbctemplate.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * Created with Intellij IDEA.
 *
 * @Author: Gabriel
 * @Date: 2018-10-08
 * @Desciption:
 */
@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(name = "/",method = RequestMethod.GET)
    public List<User> usersList(){
        List<User> users = null;
        return userService.findUsers();
    }

    @RequestMapping(value = "/{id}",method = RequestMethod.GET)
    public User getUserById(@PathVariable long id){
        return userService.findUserById(id);
    }

    @RequestMapping(name = "/",method = RequestMethod.POST,produces = "text/plain;charset=utf-8")
    public String addUser(User user){
        System.out.println(user);
        if(userService.saveUser(user) > 0 ){
            return "新增成功";
        }else{
            return "新增失败";
        }
    }

    @RequestMapping(name = "/",method = RequestMethod.PUT)
    public String updateUserById(User user){
        if(userService.updateUser(user) > 0 ){
            return "修改成功";
        }else{
            return "修改失败";
        }
    }

    @RequestMapping(value = "/{id}",method = RequestMethod.DELETE)
    public String deleteUserById(@PathVariable long id){
        if(userService.delUserById(id) > 0 ){
            return "删除成功";
        }else{
            return "删除失败";
        }
    }
}

UserService.java

package com.prvi.gabriel.springbootforjdbctemplate.service;

import com.prvi.gabriel.springbootforjdbctemplate.entity.User;

import java.util.List;

/**
 * Created with Intellij IDEA.
 *
 * @Author: Gabriel
 * @Date: 2018-10-08
 * @Desciption:
 */
public interface UserService {

    List<User> findUsers();

    User findUserById(long id);

    int saveUser(User user);

    int delUserById(long id);

    int updateUser(User user);

}

UserServiceImpl.java

package com.prvi.gabriel.springbootforjdbctemplate.service;

import com.prvi.gabriel.springbootforjdbctemplate.entity.User;
import com.prvi.gabriel.springbootforjdbctemplate.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Created with Intellij IDEA.
 *
 * @Author: Gabriel
 * @Date: 2018-10-08
 * @Desciption:
 */
@Service
public class UserServiceImpl implements UserService {


    @Autowired
    private UserRepository repository;

    @Transactional(readOnly = true)
    @Override
    public List<User> findUsers() {
        return repository.findUsers();
    }

    @Transactional(readOnly = true)
    @Override
    public User findUserById(long id) {
        return repository.findUserById(id);
    }

    @Transactional
    @Override
    public int saveUser(User user) {
        return repository.saveUser(user);
    }

    @Transactional
    @Override
    public int delUserById(long id) {
        return repository.delUserById(id);
    }

    @Transactional
    @Override
    public int updateUser(User user) {
        return repository.updateUser(user);
    }
}

UserRepository.java

package com.prvi.gabriel.springbootforjdbctemplate.repository;

import com.prvi.gabriel.springbootforjdbctemplate.entity.User;

import java.util.List;

/**
 * Created with Intellij IDEA.
 *
 * @Author: Gabriel
 * @Date: 2018-10-08
 * @Desciption:
 */
public interface UserRepository {

    List<User> findUsers();

    User findUserById(long id);

    int saveUser(User user);

    int delUserById(long id);

    int updateUser(User user);
}

UserRepositoryImpl.java

package com.prvi.gabriel.springbootforjdbctemplate.repository;

import com.prvi.gabriel.springbootforjdbctemplate.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 * Created with Intellij IDEA.
 *
 * @Author: Gabriel
 * @Date: 2018-10-08
 * @Desciption:
 */
@Repository
public class UserRepositoryImpl implements UserRepository {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public List<User> findUsers() {
        return jdbcTemplate.query("select * from users",new UserMapper());
    }

    @Override
    public User findUserById(long id) {
        List<User> users = jdbcTemplate.query("select * from users where id = ?",new Object[]{id},new UserMapper());
        User user = null;
        if(users != null&&!users.isEmpty()){
            user = users.get(0);
        }
        return user;
    }

    @Override
    public int saveUser(User user) {
        return jdbcTemplate.update("insert into users (username,password) values (?,?)",new Object[]{user.getUsername(),user.getPassword()});
    }

    @Override
    public int delUserById(long id) {
        return jdbcTemplate.update("delete from users where id = ?",new Object[]{id});
    }

    @Override
    public int updateUser(User user) {
        return jdbcTemplate.update("update users set username = ? , password = ? where id = ?",new Object[]{user.getUsername(),user.getPassword(),user.getId()});
    }
}

class UserMapper implements RowMapper<User>{

    @Override
    public User mapRow(ResultSet resultSet, int i) throws SQLException {
        User user = new User();
        user.setId(resultSet.getLong("id"));
        user.setUsername(resultSet.getString("username"));
        user.setPassword(resultSet.getString("password"));
        return user;
    }
}

UserControllerTest.java

package com.prvi.gabriel.springbootforjdbctemplate.controller;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

/**
 * Created with Intellij IDEA.
 *
 * @Author: Gabriel
 * @Date: 2018-10-08
 * @Desciption:
 */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class UserControllerTest {

    @Autowired
    private WebApplicationContext context;
    private MockMvc mockMvc;

    @Before
    public void setUp(){
        mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
    }
    @Test
    public void usersList() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/users"));
    }

    @Test
    public void getUserById() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/users/1"));
    }

    @Test
    public void addUser() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.post("/users").param("username","脚后跟").param("password","123"));
    }

    @Test
    public void updateUserById() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.put("/users").param("id","1").param("username","李海军").param("password","456"));
    }

    @Test
    public void deleteUserById() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.delete("/users/3"));
    }
}
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
SQL Java 关系型数据库
SpringBoot从入门到精通(三十)如何使用JdbcTemplate操作数据库?
前面介绍了Mybatis数据持久化框架,Mybatis虽然功能强大,但是,使用起来还是比较复杂的。所以接下来介绍一个简单的数据持久化框架——JdbcTemplate。
SpringBoot从入门到精通(三十)如何使用JdbcTemplate操作数据库?
|
8月前
|
Java 数据库连接 数据库
SpringBoot整合持久层技术之搭建JDBCTemplate项目实战
现在有了MyBatis之后很少人使用JDBCTemplate来整合项目了,要么就是JPA技术,要么就是Mybatis来操作数据库,今天我搭建一个springboot的template项目,看看其和JPA、Mybatis有什么不同的地方,方便大家一起学习。
42 0
|
4月前
|
Java 关系型数据库 MySQL
Spring Boot使用JdbcTemplate操作mysql数据库实战(附源码 超详细)
Spring Boot使用JdbcTemplate操作mysql数据库实战(附源码 超详细)
40 0
|
5月前
|
Java 数据库连接 测试技术
微服务技术系列教程(03) - SpringBoot - 整合各种数据源(JdbcTemplate、MyBatis、JPA)
微服务技术系列教程(03) - SpringBoot - 整合各种数据源(JdbcTemplate、MyBatis、JPA)
34 0
|
8月前
|
Oracle NoSQL 关系型数据库
SpringBoot-13-使用JdbcTemplate链接Mysql数据库
在企业项目开发者,数据库的使用是必不可少的一部分,常用的数据库有mysql、oracle、sqlserver、redis等,我们接下来的几章会介绍SpringBoot中如何使用数据库,本章就介绍使用JdbcTemplate链接mysql。
84 0
|
XML Java 关系型数据库
SpringBoot 整合 JdbcTemplate|学习笔记
快速学习 SpringBoot 整合 JdbcTemplate
75 0
SpringBoot 整合 JdbcTemplate|学习笔记
|
Java 关系型数据库 MySQL
SpringBoot整合JdbcTemplate连接Mysql
SpringBoot整合JdbcTemplate连接Mysql
122 0
|
SQL Java
SpringBoot高级篇JdbcTemplate之数据更新与删除
前面介绍了JdbcTemplate的插入数据和查询数据,占用CURD中的两项,本文则将主要介绍数据更新和删除。从基本使用上来看,姿势和前面的没啥两样
793 0
SpringBoot高级篇JdbcTemplate之数据更新与删除
|
Java
SpringBoot整合JdbcTemplate
SpringBoot整合JdbcTemplate
103 0
|
Java 关系型数据库 MySQL
springboot学习-使用JdbcTemplate操作MySQL数据库
springboot学习-使用JdbcTemplate操作MySQL数据库
246 0
springboot学习-使用JdbcTemplate操作MySQL数据库