SpringBoot整合JdbcTemplate

本文详细介绍了如何在SpringBoot项目中配置数据源,使用JDBC进行数据库操作,包括创建User实体类、定义Repository接口进行CRUD操作,并展示了如何在Service和Controller中注入并使用这些服务。
摘要由CSDN通过智能技术生成

2、配置基本属性。

在src/main/resources下找到application.properties文件,在该配置文件中配置数据源。

#数据源信息配置

#数据库地址,jpa数据库名,需要在数据库中先建一个jdbctemplate数据库

spring.datasource.url=jdbc:mysql://localhost:3306/jdbctemplate?serverTimezone=GMT%2B8

#用户名

spring.datasource.username=root

#密码

spring.datasource.password=root

#链接数据库驱动

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

编写代码


在项目中新建4个包,分别为entity(放置持久化类)、controller(控制器)、repository(定义数据访问接口的包)、service(业务逻辑处理类)

1、创建持久化类。

在entity包中创建一个持久化类User.java,其代码如下。

public class User {

private Integer id;

private String loginName;

private String username;

private String password;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getLoginName() {

return loginName;

}

public void setLoginName(String loginName) {

this.loginName = loginName;

}

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;

}

}

2、定义数据访问层接口

在repository包下新建一个接口,命名为UserRepository.java完整代码结构如下(包含使用JDBCTemplate的增删改查方法)。

import com.mcy.jdbctemplate.entity.User;

import org.springframework.jdbc.core.BeanPropertyRowMapper;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.jdbc.core.PreparedStatementCreator;

import org.springframework.jdbc.core.RowMapper;

import org.springframework.jdbc.support.GeneratedKeyHolder;

import org.springframework.jdbc.support.KeyHolder;

import org.springframework.stereotype.Repository;

import javax.annotation.Resource;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.List;

/**

  • @Repository注解:标注这是一个持久化操作对象

*/

@Repository

public class UserRepository {

//注入JdbcTemplate模板对象

@Resource

private JdbcTemplate jdbcTemplate;

/**

  • 插入数据

  • @return 插入影响的行数

*/

public Integer insertUser(){

String sql = “insert into tb_user(login_name, username, password) values(?, ?, ?), (?, ?, ?)”;

Object args[] = new Object[]{“张三”, “admin”, “123456”, “李四”, “123456”, “123456”};

//参数一:插入数据的SQL语句,参数二:对应SQL语句中占位符?的参数

return jdbcTemplate.update(sql, args);

}

/***

  • 根据userName查询数据

  • @param username

  • @return User对象

*/

public User selectByUsername(String username){

//定义SQL语句

String sql = “select * from tb_user where username = ?”;

//定义一个RowMapper

RowMapper rowMapper = new BeanPropertyRowMapper<>(User.class);

//执行查询方法

User user = jdbcTemplate.queryForObject(sql, new Object[]{username}, rowMapper);

return user;

}

/**

  • 根据id查询数据

  • @param id

  • @return User对象

*/

public User findUserById(Integer id){

//定义SQL语句

String sql = “select * from tb_user where id = ?”;

RowMapper rowMapper = new BeanPropertyRowMapper<>(User.class);

//执行查询方法

return jdbcTemplate.queryForObject(sql, new Object[]{id}, rowMapper);

}

/**

  • 查询所有数据

  • @return 包含User对象的List集合

*/

public List findAll(){

//定义SQL语句

String sql = “select * from tb_user”;

//声明结果集的映射rowMapper,将结果集的数据映射成User对象数据

RowMapper rowMapper = new BeanPropertyRowMapper<>(User.class);

return jdbcTemplate.query(sql, rowMapper);

}

/**

  • 根据id删除数据

  • @param id

*/

public void delete(final Integer id){

//定义SQL语句

String sql = “delete from tb_user where id=?”;

//执行

jdbcTemplate.update(sql, new Object[]{id});

}

/**

  • 修改数据

  • @param user

*/

public void update(final User user){

//定义SQL语句

String sql = “update tb_user set username=?, login_name=?, where id=?”;

//执行

jdbcTemplate.update(sql, new Object[]{user.getUsername(),user.getLoginName(), user.getId()});

}

/**

  • 插入数据,获取被插入数据的主键

  • @param user

  • @return

*/

public User insertGetKey(User user){

//声明插入的SQL语句

String sql = “insert into tb_user(username, login_name, password) values(?, ?, ?)”;

//定义插入数据后获取主键的对象

KeyHolder holder = new GeneratedKeyHolder();

jdbcTemplate.update(new PreparedStatementCreator() {

@Override

public PreparedStatement createPreparedStatement(Connection con) throws SQLException {

//插入数据后,将被插入数据的主键返回

PreparedStatement ps = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

ps.setString(1, user.getUsername());

ps.setString(2, user.getLoginName());

ps.setString(3, user.getPassword());

return ps;

}

}, holder);

//获取被插入数据库的主键,注入到user对象

Integer newUserId = holder.getKey().intValue();

user.setId(newUserId);

return user;

}

}

UserRepository类需要通过@Repository注解声明这是一个数据访问层对象,这样在业务层就可以通过注解注入UserRepository对象。在UserRepository类中最关键的是通过注解@Resource将JDBCTemplate对象注入进来,后续就可以通过JDBCTemplate对象提供的方法对数据库进行相关的CRUD操作了,JDBCTemplate对象是由SpringBoot项目的自动配置和自动创建Bean完成的,所以使用起来十分方便。

3、定义业务层类。

在service包下新建一个UserService类,代码如下。

import com.mcy.jdbctemplate.entity.User;

import com.mcy.jdbctemplate.repository.UserRepository;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

import java.util.List;

@Service

public class UserService {

//注入UserRepository

@Resource

private UserRepository userRepository;

public Integer insertUser(){

return userRepository.insertUser();

}

public User selectByUsername(String username){

return userRepository.selectByUsername(username);

}

public List findAll(){

return userRepository.findAll();

}

public User insertGetKey(User user){

return userRepository.insertGetKey(user);

}

public void update(User user){

userRepository.update(user);

}

public void delete(Integer id){

userRepository.delete(id);

}

}

在业务层中需要注入数据访问层对象UserRepository,在上述代码中是通过@Resource注解将UserRepository接口对应的实现类对象注入进来的。

测试应用


1、编写测试控制器

在controller包下新建一个UserController类,代码如下。

import com.mcy.jdbctemplate.entity.User;

import com.mcy.jdbctemplate.service.UserService;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

import java.util.List;

@RestController

@RequestMapping(“/user”)

public class UserController {

@Resource

private UserService userService;

@RequestMapping(“/insertUser”)

public String insertUser(){

return “插入数据[”+userService.insertUser()+“]条”;

}

@RequestMapping(“/insertGetKey”)

public User insertGetKey(User user){

return userService.insertGetKey(user);

}

@RequestMapping(“/selectByUsername”)

public User selectByUsername(String username){

return userService.selectByUsername(username);

}

@RequestMapping(“/findAll”)

public List findAll(){

return userService.findAll();

}

@RequestMapping(“/update”)

public void update(User user){

userService.update(user);

}

@RequestMapping(“/delete”)
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

写在最后

为了这次面试,也收集了很多的面试题!

以下是部分面试题截图

Java程序员秋招三面蚂蚁金服,我总结了所有面试题,也不过如此
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
3291)]

[外链图片转存中…(img-JqjSdhau-1712683763292)]

[外链图片转存中…(img-x0j2gUVA-1712683763292)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

写在最后

为了这次面试,也收集了很多的面试题!

以下是部分面试题截图

[外链图片转存中…(img-D71KFJxk-1712683763292)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值