Spring Boot数据库基本操作spring data jpa

本文介绍如何在Spring Boot项目中整合JPA与MySQL,包括添加依赖、配置数据库、创建实体类、定义Repository及Controller,实现数据库的增删改查操作。

需要在pom.xml中添加依赖:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

1、首先在本地创建一个数据库dbgirl。
配置文件中增加数据库配置:

  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/dbgirl
    username: root
    password: wangyinpeng
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

2、创建对象Girl

package com.hytxwz.girl;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity   //表示该类对应数据库中的某个表
public class Girl {

    @Id
    @GeneratedValue  //自增
    private Integer id;
    private String cupSize;
    private Integer age;

    public Girl() {
    }

    public Integer getId() {
        return id;
    }

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

    public String getCupSize() {
        return cupSize;
    }

    public void setCupSize(String cupSize) {
        this.cupSize = cupSize;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public void setAge() {
    }
}

注意用到的三个新的注解:
@Entity //表示该类对应数据库中的某个表
@Id
@GeneratedValue //自增
此时运行程序看到数据库中出现girl表
3、数据库的常用操作:
数据库的增删改查通过controller类中的方法来实现;
首先新建一个GirlRepository接口继承JpaRespository<Girl, Integer(id类型)>;
然后在controller中调用GirlRepository中的方法即可实现对数据库的增删改查。

GirlRepository :

package com.hytxwz.girl;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Service;

import java.util.List;

@Service("girlRepository")
public interface GirlRepository extends JpaRepository<Girl, Integer> {

    //通过其他字段查询对象(手动增加的方法)
    List<Girl> findGirlsByAge(Integer age); //注意方法名格式 by+属性

}

GirlController:

package com.hytxwz.girl;

import com.mysql.fabric.xmlrpc.base.Param;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

@RestController
public class GirlController {

    @Resource(name = "girlRepository")
    private GirlRepository girlRepository;

    @GetMapping(value = "/girls")   //访问girls路径得到女生列表
    public List<Girl> girlList(){
        return girlRepository.findAll();
    }

    @GetMapping(value = "/newGirl")    //访问时新增对象
    public Girl addGirl(@RequestParam("cupSize") String cupSize,
                        @RequestParam("age") Integer age){
        Girl girl = new Girl();
        girl.setCupSize(cupSize);
        girl.setAge(age);

        return girlRepository.save(girl);
    }

    @GetMapping(value = "/delGirl/{id}")     //访问时删除对象
    public void delGirl(@PathVariable("id") Integer id){
        girlRepository.deleteById(id);
    }

    @GetMapping(value = "/findGirl/{id}")     //访问时查询对象
    public Girl findGirlById(@PathVariable("id") Integer id){
        return girlRepository.findById(id).get();
    }

    @GetMapping(value = "/updGirl/{id}")     //访问时更新对象
    public Girl updateGirl(@PathVariable("id") Integer id,
                           @RequestParam("cupSize") String cupSize,
                           @RequestParam("age") Integer age){
        Girl girl = girlRepository.findById(id).get();
        girl.setCupSize(cupSize);
        girl.setAge(age);
        return girlRepository.save(girl);
    }

    @GetMapping(value = "/findGirlsByAge/{age}")     //通过其他字段查询对象
    public List<Girl> findGirlsByAge(@PathVariable("age") Integer age){
        return girlRepository.findGirlsByAge(age);
    }

}

4、开启事务使用注解@Transactional

    //测试事务
    @Transactional
    public void addTwo(){
        Girl g1 = new Girl();
        g1.setAge(16);
        g1.setCupSize("B");
        girlRepository.save(g1);

        Girl g2 = new Girl();
        g2.setAge(18);
        g2.setCupSize("C");
//        int i = 1/0;
        girlRepository.save(g2);
    }

5、简单的表单验证@Valid
在这里插入图片描述
@Min/@Max中value属性为最大最小值,message属性是错误提示信息。
在这里插入图片描述
@Valid放在需要验证的属性前面,BindingResult对象中保存验证结果。

卷积神经网络(CNN)是针对多维网格数据(如图像、视频)设计的深度学习架构,其结构灵感来源于生物视觉系统对信息的分层处理机制。该模型通过局部连接、参数共享、层级特征提取等策略,有效捕获数据中的空间模式。以下从结构特性、工作机制及应用维度展开说明: **1. 局部连接与卷积运算** 卷积层利用可学习的多维滤波器对输入进行扫描,每个滤波器仅作用于输入的一个有限邻域(称为感受野),通过线性加权与非线性变换提取局部特征。这种设计使网络能够聚焦于相邻像素间的关联性,从而识别如边缘走向、色彩渐变等基础视觉模式。 **2. 参数共享机制** 同一卷积核在输入数据的整个空间范围内保持参数不变,大幅降低模型复杂度。这种设计赋予模型对平移变换的适应性:无论目标特征出现在图像的任何区域,均可由相同核函数检测,体现了特征位置无关性的建模思想。 **3. 特征降维与空间鲁棒性** 池化层通过对局部区域进行聚合运算(如取最大值或均值)实现特征降维,在保留显著特征的同时提升模型对微小形变的容忍度。这种操作既减少了计算负荷,又增强了特征的几何不变性。 **4. 层级特征抽象体系** 深度CNN通过堆叠多个卷积-池化层构建特征提取金字塔。浅层网络捕获点线面等基础模式,中层网络组合形成纹理部件,深层网络则合成具有语义意义的对象轮廓。这种逐级递进的特征表达机制实现了从像素级信息到概念化表示的自动演进。 **5. 非线性扩展与泛化控制** 通过激活函数(如ReLU及其变体)引入非线性变换,使网络能够拟合复杂决策曲面。为防止过拟合,常采用权重归一化、随机神经元失活等技术约束模型容量,提升在未知数据上的表现稳定性。 **6. 典型应用场景** - 视觉内容分类:对图像中的主体进行类别判定 - 实例定位与识别:在复杂场景中标定特定目标的边界框及类别 - 像素级语义解析:对图像每个像素点进行语义标注 - 生物特征认证:基于面部特征的个体身份鉴别 - 医学图像判读:辅助病灶定位与病理分析 - 结构化文本处理:与循环神经网络结合处理序列标注任务 **7. 技术演进脉络** 早期理论雏形形成于1980年代,随着并行计算设备的发展与大规模标注数据的出现,先后涌现出LeNet、AlexNet、VGG、ResNet等里程碑式架构。现代研究聚焦于注意力分配、跨层连接、卷积分解等方向,持续推动模型性能边界。 卷积神经网络通过其特有的空间特征提取范式,建立了从原始信号到高级语义表达的映射通路,已成为处理几何结构数据的标准框架,在工业界与学术界均展现出重要价值。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
屋顶面板实例分割数据集 一、数据集基础信息 • 数据集名称:屋顶面板实例分割数据集 • 图片数量: 训练集:1559张图片 验证集:152张图片 测试集:95张图片 总计:1806张图片 • 训练集:1559张图片 • 验证集:152张图片 • 测试集:95张图片 • 总计:1806张图片 • 分类类别: panel(面板):屋顶上的面板结构,如太阳能板或其他安装组件。 roof(屋顶):建筑屋顶区域,用于定位和分割。 • panel(面板):屋顶上的面板结构,如太阳能板或其他安装组件。 • roof(屋顶):建筑屋顶区域,用于定位和分割。 • 标注格式:YOLO格式,包含实例分割的多边形标注,适用于实例分割任务。 • 数据格式:图片文件,来源于航拍或建筑图像,涵盖多种场景。 二、数据集适用场景 • 建筑与施工检查:用于自动检测和分割屋顶上的面板,辅助建筑质量评估、维护和安装规划。 • 可再生能源管理:在太阳能发电系统中,识别屋顶太阳能板的位置和轮廓,优化能源部署和监控。 • 航拍图像分析:支持从空中图像中提取建筑屋顶信息,应用于城市规划、房地产评估和基础设施管理。 • 计算机视觉研究:为实例分割算法提供基准数据,推动AI在建筑和能源领域的创新应用。 三、数据集优势 • 精准实例分割标注:每个面板和屋顶实例均通过多边形标注精确定义轮廓,确保分割边界准确,支持细粒度分析。 • 类别聚焦与实用性:专注于屋顶和面板两个关键类别,数据针对性强,直接适用于建筑和能源行业的实际需求。 • 数据多样性与泛化性:涵盖不同环境下的屋顶和面板图像,增强模型在多变场景中的适应能力。 • 任务适配便捷:标注兼容主流深度学习框架(如YOLO),可快速集成到实例分割模型训练流程。 • 行业价值突出:助力自动化检测系统开发,提升建筑检查、能源管理和城市分析的效率与准确性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值