【SpringBoot】数据库操作与事务管理

简介: 【SpringBoot】数据库操作与事务管理

在Spring-Boot进行数据库操作,我们需要用到Spring-Data-Jpa。


不多介绍Spring-Data-Jpa是什么了,直接用实例来说明。想了解Spring-Data-Jpa是什么的,直接百度即可


数据库操作


在下面的实例中,我们进行实现简单的数据库操作,也就是增删改查


Controller

package cn.chenhaoxiang.controller;
import cn.chenhaoxiang.dao.PeopleDao;
import cn.chenhaoxiang.entity.People;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * Created with IntelliJ IDEA.
 * User: 陈浩翔.
 * Date: 2017/12/28.
 * Time: 下午 9:20.
 * Explain:
 */
@RestController
public class IndexController {
    @Autowired
    private PeopleDao peopleDao;//因为逻辑相对简单,直接在Controller调用dao了,实际开发中请勿这样
    /**
     * 获取所有的人的数据
     * @return
     */
    @GetMapping(value = "/peoples")
    public List<People> getPeople(){
        return peopleDao.findAll();//一句SQL都没写,很方便
    }
    /**
     * 新增一个对象
     * @param people
     * @return
     */
    @PostMapping(value = "/add")
    public People peopleAdd(People people){
        //@RequestParam(value = "people")  直接传类的时候,建议不要使用RequestParam注解
        //当然,你可以选择每一个参数都写上,但没必要,更多的时候是直接传类对象,注意url的参数名和类中属性名对上
        return peopleDao.save(people);
    }
    /**
     * 更新对象
     * @param people
     * @return
     */
    @PostMapping(value = "/edit")
    public People peopleEdit(People people){
        //注意,修改就必须带上ID了,也就是主键。save方法会根据有没有主键来判断是修改还是新增
        //更新需要带上全部参数,否则没有值的参数会赋值为NULL
        return peopleDao.save(people);
    }
    /**
     * 查询对象
     * @param id  根据ID
     * @return
     */
    @GetMapping(value = "/select/{id}")
    public People select(@PathVariable("id") Integer id){
        return peopleDao.findOne(id);//没查到的时候,返回null  在前台接收的是空
    }
    /**
     * 删除对象
     * @param id  根据ID
     * @return
     */
    @GetMapping(value = "/delete/{id}")
    public void delete(@PathVariable("id") Integer id){
        peopleDao.delete(id);//删除的返回是空...
    }
    /**
     * 根据名字查询People
     * @param name
     * @return
     */
    @PostMapping(value = "/selectByName")
    public List<People> selectByName(@RequestParam("name") String name){
        return peopleDao.findByName(name);
    }
    /**
     * 根据名字和年龄查询People
     * @param name
     * @return
     */
    @PostMapping(value = "/selectByNameAndAge")
    public List<People> selectByNameAndAge(String name,Integer age){
        return peopleDao.findByNameAndAge(name,age);
    }
    /**
     * 根据名字和地址查询People
     * @param name
     * @return
     */
    @PostMapping(value = "/selectByNameAndAddress")
    public List<People> selectByNameAnAddress(String name,String address){
        return peopleDao.findByNameAndAddress(name,address);
    }
}


DAO

package cn.chenhaoxiang.dao;
import cn.chenhaoxiang.entity.People;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.query.Param;
import java.util.List;
/**
 * Created with IntelliJ IDEA.
 * User: 陈浩翔.
 * Date: 2017/12/28.
 * Time: 下午 10:44.
 * Explain:
 */
public interface PeopleDao extends JpaRepository<People,Integer>{//实体类,id的类型
    /**
     * 根据名字查询
     * @param name
     * @return
     */
    List<People> findByName(String name);
    /**
     * 根据名字和年龄查询
     * @param name
     * @return
     */
    List<People> findByNameAndAge(String name,Integer age);
    /**
     * 根据名字和地址查询
     * @param name
     * @return
     */
    List<People> findByNameAndAddress(String name,String address);
    //可以看出来,这个写查询有规律的
}


实体类:

package cn.chenhaoxiang.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
/**
 * Created with IntelliJ IDEA.
 * User: 陈浩翔.
 * Date: 2017/12/28.
 * Time: 下午 9:20.
 * Explain:
 */
@Entity // 实体类注解
public class People {
    @Id //主键
    @GeneratedValue //自增长
    private Integer id;
    private String name;
    private Double score;
    private String address;
    private Integer age;
    //在有的教程中说必须要写无参构造函数,经过实践证明,不写无参构造函数也是可以生成表的
//    public People() {
//    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Double getScore() {
        return score;
    }
    public void setScore(Double score) {
        this.score = score;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "People{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", score=" + score +
                ", address='" + address + '\'' +
                ", age=" + age +
                '}';
    }
}


事务管理

其实事务管理很简单,就是一个 @Transactional注解的事情,和以前spring管理事务一样的。

不多做介绍,上代码了、

package cn.chenhaoxiang.service.imp;
import cn.chenhaoxiang.dao.PeopleDao;
import cn.chenhaoxiang.entity.People;
import cn.chenhaoxiang.service.PeopleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
 * Created with IntelliJ IDEA.
 * User: 陈浩翔.
 * Date: 2017/12/29.
 * Time: 下午 8:58.
 * Explain:
 */
@Service
public class PeopleServiceImp implements PeopleService {
    @Autowired
    private PeopleDao peopleDao;
    @Override
    @Transactional
    public int insertTwoPeople(People people, People people2) {
        peopleDao.save(people);
        int a=0;
        a = 10/a;//做回滚测试
        peopleDao.save(people2);
        return 1;
    }
}


源代码下载地址:

GITHUB源码下载地址: 点我进行下载
目录
相关文章
|
7天前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js实现的在线考试系统。随着在线教育的发展,在线考试系统的重要性日益凸显。该系统不仅能提高教学效率,减轻教师负担,还为学生提供了灵活便捷的考试方式。技术栈包括Spring Boot、Vue.js、Element-UI等,支持多种角色登录,具备考试管理、题库管理、成绩查询等功能。系统采用前后端分离架构,具备高性能和扩展性,未来可进一步优化并引入AI技术提升智能化水平。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
|
9天前
|
Java 关系型数据库 MySQL
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术的房屋租赁系统,旨在通过自动化和信息化手段提升房屋管理效率,优化租户体验。系统采用JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Layui和Spring Boot 2.0等技术栈,实现了高效的房源管理和便捷的租户服务。通过该系统,房东可以轻松管理房源,租户可以快速找到合适的住所,双方都能享受数字化带来的便利。未来,系统将持续优化升级,提供更多完善的服务。
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
|
23小时前
|
Java 关系型数据库 数据库连接
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第3天】Spring Boot项目中数据库连接问题可能源于配置错误或依赖缺失。YAML配置文件的格式不正确,如缩进错误,会导致解析失败;而数据库驱动不匹配、连接字符串或认证信息错误同样引发连接异常。解决方法包括检查并修正YAML格式,确认配置属性无误,以及添加正确的数据库驱动依赖。利用日志记录和异常信息分析可辅助问题排查。
22 10
|
2月前
|
SQL JavaScript 前端开发
vue中使用分页组件、将从数据库中查询出来的数据分页展示(前后端分离SpringBoot+Vue)
这篇文章详细介绍了如何在Vue.js中使用分页组件展示从数据库查询出来的数据,包括前端Vue页面的表格和分页组件代码,以及后端SpringBoot的控制层和SQL查询语句。
vue中使用分页组件、将从数据库中查询出来的数据分页展示(前后端分离SpringBoot+Vue)
|
2月前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的选课管理系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js技术栈的高校选课管理系统的设计与实现。该系统采用前后端分离架构,旨在提高选课效率、优化资源分配及提升用户体验。技术栈包括:后端Spring Boot 2.0、前端Vue 2.0、数据库MySQL 8.0、开发环境JDK 1.8和Maven 3.6等。系统功能覆盖登录、学生信息管理、选课管理、成绩查询等多个方面,并针对学生、教师和管理员提供了不同的操作界面。系统采用了响应式设计,支持多设备访问,并通过Element UI增强了界面的友好性和交互性。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的选课管理系统(含教程&源码&数据库数据)
|
2月前
|
安全 Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+jsp实现的健身房管理系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术实现的健身房管理系统。随着健康生活观念的普及,健身房成为日常锻炼的重要场所,高效管理会员信息、课程安排等变得尤为重要。该系统旨在通过简洁的操作界面帮助管理者轻松处理日常运营挑战。技术栈包括:JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Shiro、Spring Boot 2.0等。系统功能覆盖登录、会员管理(如会员列表、充值管理)、教练管理、课程管理、器材管理、物品遗失管理、商品管理及信息统计等多方面。
|
2月前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的考试管理系统(含教程&源码&数据库数据)
在数字化时代背景下,本文详细介绍了如何使用Spring Boot框架结合Vue.js技术栈,实现一个前后端分离的考试管理系统。该系统旨在提升考试管理效率,优化用户体验,确保数据安全及可维护性。技术选型包括:Spring Boot 2.0、Vue.js 2.0、Node.js 12.14.0、MySQL 8.0、Element-UI等。系统功能涵盖登录注册、学员考试(包括查看试卷、答题、成绩查询等)、管理员功能(题库管理、试题管理、试卷管理、系统设置等)。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的考试管理系统(含教程&源码&数据库数据)
|
2月前
|
JavaScript Java Maven
毕设项目&课程设计&毕设项目:springboot+vue实现的在线求职管理平台(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和Vue.js实现的在线求职平台。该平台采用了前后端分离的架构,使用Spring Boot作为后端服务
毕设项目&课程设计&毕设项目:springboot+vue实现的在线求职管理平台(含教程&源码&数据库数据)
|
2月前
|
druid Java 数据库连接
SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池,以及实现增删改查功能
SpringBoot项目整合MybatisPlus和Druid数据库连接池,实现基本的增删改查功能。
179 0
下一篇
无影云桌面