Spring Boot 使用JdbcTemplate操作数据库

版权声明:From Lay https://blog.csdn.net/Sadlay/article/details/83717168

使用JdbcTemplate操作数据库

配置数据源

以MySQL作为自定义数据源。首先在pom.xml中去除对h2的依赖。保留spring-boot-starter-data-jpa的依赖,然后增加Mysql的依赖

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

配置数据库相关信息

配置application.properties配置文件。在默认情况下,spring boot会使用其绑定的Tomcat的数据源,我们可以对其进行设置。

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot_database
spring.datasource.username=root
spring.datasource.password=123456
# spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#最大等待连接中的数量,设置0为没有限
spring.datasource.tomcat.max-idle=10
#最大连接活动数
spring.datasource.tomcat.max-active=50
#最大等待毫秒数,单位ms,超过时间会出错误信息
spring.datasource.tomcat.max-wait=10000
#数据库连接池初始化连接数
spring.datasource.tomcat.initial-size=5

注意这里注释掉了spring.datasource.driver-class-name=com.mysql.jdbc.Driver驱动类的配置,但是它还是可以连接数源的,这是因为Spring Boot会尽可能地去判断数据源是说明类型的,然后根据默认的情况去匹配驱动类。在它不能匹配的情况下,你可以明确的配置它,这样就不会使用默认的驱动类了。

在配置数据源后,Spring boot通过其自动配置机制配置好了JdbcTemplate,JdbcTemplate模板是spring框架提供的。准确的来说,JdbcTemplate这种方式不算成功,在实际工作中还是比较少使用的,更多的是Hibernate和MyBatis。所以这里只是简单的介绍下它使用的方法。

SQL建表

CREATE TABLE `t_user` (
  `id` int(12) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(60) NOT NULL,
   /** 性别,1-男,2-女**/ 
  `sex` int(3) NOT NULL DEFAULT '1',
  `note` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ;

用户POJO

package com.lay.pojo;

public class User {
    private Long id = null;
    
    private String userName = null;
    
    private SexEnum sex = null;//枚举
    
    private String note = null;
    
    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 SexEnum getSex() {
        return sex;
    }
    
    public void setSex(SexEnum sex) {
        this.sex = sex;
    }
    
    public String getNote() {
        return note;
    }
    
    public void setNote(String note) {
        this.note = note;
    }
    
}

其中有个性别枚举类

SexEnum

package com.lay.enumeration;

public enum SexEnum {
    MALE(1, "男"), FEMALE(2, "女");
    
    private int id;
    
    private String name;
    
    SexEnum(int id, String name) {
        this.id = id;
        this.name = name;
    }
    
    public static SexEnum getEnumById(int id) {
        for (SexEnum sex : SexEnum.values()) {
            if (sex.getId() == id) {
                return sex;
            }
        }
        return null;
    }
    
    public static SexEnum getEnumByName(String name) {
        for (SexEnum sex : SexEnum.values()) {
            if (sex.getName().equals(name)) {
                return sex;
            }
        }
        return null;
    }
    
    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
}

用户服务接口

JdbcTmpUserService

package com.lay.service;

import java.util.List;

import com.lay.pojo.User;

public interface JdbcTmpUserService {
    
    public User getUser(Long id);
    
    public List<User> findUsers(String userName, String note);
    
    public int insertUser(User user);
    
    public int updateUser(User user);
    
    public int deleteUser(Long id);
    
}

实现用户接口

JdbcTmpUserServiceImpl

package com.lay.service.impl;

import java.sql.ResultSet;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service;

import com.lay.enumeration.SexEnum;
import com.lay.pojo.User;
import com.lay.service.JdbcTmpUserService;

@Service
public class JdbcTmpUserServiceImpl implements JdbcTmpUserService {
    @Autowired
    private JdbcTemplate jdbcTemplate = null;
    
    //获取映射关系
    private RowMapper<User> getUserMapper() {
        //使用lambda表达式创建用户映射关系
        RowMapper<User> userRowMapper = (ResultSet rs, int rownum) -> {
            User user = new User();
            user.setId(rs.getLong("id"));
            user.setUserName(rs.getString("user_name"));
            int sexId = rs.getInt("sex");
            SexEnum sex = SexEnum.getEnumById(sexId);
            user.setSex(sex);
            user.setNote(rs.getString("note"));
            return user;
        };
        return userRowMapper;
    }
    
    //获取对象
    @Override
    public User getUser(Long id) {
        //执行sql
        String sql = "select id,user_name,sex,note from t_user where id=?";
        //参数
        Object[] params = new Object[] {id};
        User user = jdbcTemplate.queryForObject(sql, params, getUserMapper());
        return user;
    }
    
    //查询用户列表
    @Override
    public List<User> findUsers(String userName, String note) {
        String sql = "select id,user_name,sex,note fromt_user" + "where user_name like concat('%',?,'%')" + "and note like concat('%',?,'%')";
        //参数
        Object[] params = new Object[] {userName, note};
        List<User> userList = jdbcTemplate.query(sql, params, getUserMapper());
        return userList;
    }
    
    //插入数据库
    @Override
    public int insertUser(User user) {
        String sql = "insert into t_user(user_name,sex,note) values(?,?,?)";
        
        return jdbcTemplate.update(sql, user.getUserName(), user.getSex().getId(), user.getNote());
    }
    
    //更新数据库
    @Override
    public int updateUser(User user) {
        String sql = "update t_user set user_name=?,sex=?,note=?" + "where id=?";
        return jdbcTemplate.update(sql, user.getUserName(), user.getSex().getId(), user.getNote(), user.getId());
    }
    
    //删除数据
    @Override
    public int deleteUser(Long id) {
        String sql = "delete from t_user where id=?";
        return jdbcTemplate.update(sql, id);
    }
    
}

控制器

JdbcTemplateController

package com.lay.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.lay.enumeration.SexEnum;
import com.lay.pojo.User;
import com.lay.service.JdbcTmpUserService;

@RestController
@RequestMapping(value = "/user")
public class JdbcTemplateController {
    
    @Autowired
    JdbcTmpUserService userService;
    
    @RequestMapping(value = "/insert")
    public String insertUser() {
        User user = new User();
        user.setUserName("zhangsan");
        user.setSex(SexEnum.getEnumByName("男"));
        user.setNote("i love u");
        int result = userService.insertUser(user);
        return result + "";
    }
    //qi
}

测试

启动服务,打开浏览器地址输入http://localhost:8080/user/insert

猜你喜欢

转载自blog.csdn.net/Sadlay/article/details/83717168