本节主要学习SpringBoot整合jdbcTemplate的案例。
1.jdbcTemplate介绍
在java项目或产品实际开发中,对数据库操作性能要求比较高的情况下,比如金融或银行类的系统或产品会直接使用jdbc编写代码,虽然代码繁琐,但是执行效率高。为了解决开发效率问题,Spring对数据库的操作在jdbc上面做了更深层次的封装,而JdbcTemplate便是Spring提供的一个操作数据库的便捷工具,类似于apache的dbutils工具包。我们可以借助JdbcTemplate来执行所有数据库操作,例如插入,更新,删除和从数据库中检索数据,并且有效避免直接使用jdbc带来的繁琐编码。
JdbcTemplate主要提供以下五种类型的方法:
- execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
- update方法:用于执行新增、修改、删除等DML语句;
- query方法及queryForXXX方法:用于执行查询相关的语句;
- call方法:用于执行数据库存储过程和函数相关的语句;
- batchUpdate():用于执行批量更新(批量插入,批量修改,批量删除)操作;
当然,在大部分情况下,我们都会直接使用更加强大的持久化框架来访问数据库,比如MyBatis、Hibernate、TopLink、JDO或者Spring Data JPA等ORM框架。如果从数据库操作的整体性能上来说,排序为:JDBC > JdbcTemplate > MyBatis > Hibernate。所以掌握jdbcTemplate的操作也是很有必要的。
2.jdbcTemplate整合案例
以下案例是在idea工具中使用springboot + jdbcTemplate进行案例整合。
1.pom.xml进行坐标配置
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-jdbc mysql mysql-connector-java runtimeorg.projectlombok lombok true
2.application.properties属性文件配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/cms?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTCspring.datasource.username=rootspring.datasource.password=root
3.编写领域层代码
package raky.train.entity;import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;@Data@Builder@NoArgsConstructor@AllArgsConstructorpublic class User { private Integer id; private String name; private String pass; private Integer age;}
4.编写持久化层代码
持久化层接口:UserDao.java
package raky.train.dao;import raky.train.entity.User;import java.util.List;public interface UserDao {int insert(User user);int update(User user);int delete(Integer id);User getOne(Integer id);List getList(User user);}
持久化层实现:UserDaoImpl.java
package raky.train.dao.impl;import org.springframework.context.annotation.Primary;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.support.JdbcDaoSupport;import org.springframework.stereotype.Repository;import raky.train.dao.UserDao;import raky.train.entity.User;import java.util.List;@Repositorypublic class UserDaoImpl extends JdbcDaoSupport implements UserDao {public UserDaoImpl(JdbcTemplate jdbcTemplate){super.setJdbcTemplate(jdbcTemplate);}@Overridepublic int insert(User user) {return super.getJdbcTemplate().update("insert into user(name, pass, age)values(?, ?, ?)",user.getName(), user.getPass(), user.getAge());}@Overridepublic int update(User user) {return super.getJdbcTemplate().update("update user set name=?, pass=?, age=? where id= ?", user.getName(), user.getPass(), user.getAge(), user.getId());}@Overridepublic int delete(Integer id) {return super.getJdbcTemplate().update("delete from user where id=?",id);}@Overridepublic User getOne(Integer id) {return super.getJdbcTemplate().queryForObject("select * from user where id = ?", new BeanPropertyRowMapper(User.class), id);}@Overridepublic List getList(User user) {return super.getJdbcTemplate().query("select * from user", new BeanPropertyRowMapper(User.class));}}
5.编写服务层代码
服务层接口:UserService.java
package raky.train.service;import raky.train.entity.User;import java.util.List;public interface UserService {int insert(User user);int update(User user);int delete(Integer id);User getOne(Integer id);List getList(User user);}
服务层实现:UserServiceImpl.java
package raky.train.service.impl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import raky.train.dao.UserDao;import raky.train.entity.User;import raky.train.service.UserService;import java.util.List;@Servicepublic class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;@Overridepublic int insert(User user) {return userDao.insert(user);}@Overridepublic int update(User user) {return userDao.update(user);}@Overridepublic int delete(Integer id) {return userDao.delete(id);}@Overridepublic User getOne(Integer id) {return userDao.getOne(id);}@Overridepublic List getList(User user) {return userDao.getList(user);}}
6.编写控制层代码
package raky.train.controller;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.RestController;import raky.train.entity.User;import raky.train.service.UserService;import java.util.List;@RestController@RequestMapping("/user")public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/insert")public int insert(User user) {return userService.insert(user);}@RequestMapping("/update")public int update(User user) {return userService.update(user);}@RequestMapping("/delete/{id}")public int delete(@PathVariable(name = "id",required = true) Integer id) {return userService.delete(id);}@RequestMapping("/get/{id}")public User getOne(@PathVariable(name = "id",required = true) Integer id) {return userService.getOne(id);}@RequestMapping("/list")public List getList(User user) {return userService.getList(user);}}
7.启动类代码
此类是idea工具自动生成,暂时不需要修改代码。
package raky.train;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class SpringbootDataJdbcApplication { public static void main(String[] args) { SpringApplication.run(SpringbootDataJdbcApplication.class, args); }}
8.运行调试
运行启动类SpringbootDataJdbcApplication.java,控制台打印如下:
在浏览器中或postman接口测试工具中输入网址进行调试。以下针对getList和getOne方法进行调试,运行结果展示。
获取列表数据截图如下:
根据id获取单个数据,截图如下:
至此,SpringBoot整合jdbcTemplate案例学习笔记整理完毕。如果对大家有帮助,整理不易,希望多点赞,多收藏和多转发,在此表示感谢。每天进步一点点,多实践多总结,越分享越快乐。有技术问题,欢迎大家沟通交流,或者在评论区留言。