Java阶段二Day16

news2024/10/7 4:31:55

Java阶段二Day16

文章目录

  • Java阶段二Day16
    • SSM
    • SpringBoot
      • 简述
      • 核心特性
      • 创建SpringBoot工程
      • 创建工程失败排查
    • MyBatis框架-注解管理
      • 概述
      • MyBatis环境初始化
      • 整合MyBatis
      • Pojo对象设计
      • Dao接口设计

SSM

  • Spring:Spring是一个轻量级的容器和框架,为开发者提供了一个IoC容器和AOP框架,Spring框架包含很多核心子项目。

  • Spring MVC:SpringMVC是Spring框架的一个核心子项目,是一个基于MVC设计模式的Web框架,它提供了一系列功能,使得开发者能够快速开发灵活、易于维护的Web应用程序。

  • MyBatis:MyBatis是基于 Java 的持久层框架,用于和数据库映射,MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的工作。MyBatis通过XML或注解的方式来配置SQL和映射关系,灵活性非常高。

SpringBoot

​ 在传统JAVAEE应用体系中创建一个项目,需要手动添加大量的依赖,还要考虑版本的兼容性,还有繁重的配置、负载的项目部署,会高度影响开发效率,即使是使用Spring进行资源整合,也存在同样的这些问题。

​ 还有就是现在的软件生态应用也已经形成一定的规模,整个软件架构体系在变化,企业对技术的要求也在变化,现在的企业更注重技术的开箱即用,更注重技术在生态圈中的深度融合,更注重轻量级的运维。由此由此spring boot诞生。

简述

​ Spring Boot是一个全新的Java软件开发框架(很多人现在把它理解为一个脚手架),其设计目的是用来简化Spring项目的初始搭建以及开发过程,并为后面的Spring Cloud 微服务实践提供更加便利条件。该框架使用了特定的注解方式来进行配置,从而使开发人员不再需要大量的xml配置。不再需要大量的手动依赖管理。Spring Boot基于快速构建理念,通过约定大于配置,开箱即用的方式,希望能够在蓬勃发展的快速应用开发领域成为其领导者。

核心特性

SpringBoot 框架诞生后,之所以能得到软件开发行业的高度认可,自然离不开它提供给我们的一些关键特性,例如:

  1. 起步依赖(Starter Dependency)-创建项目时,会默认添加基础依赖,简化我们自己查找依赖的过程。
  2. 自动配置(Auto Configuration)-创建项目时,springboot工程添加的默认依赖中提供了很多默认的配置,简化了我们对资源的配置过程。
  3. 嵌入式服务(Tomcat,Jetty)-springboot工程支持内嵌的web服务,可以将tomcat这样的服务直接嵌套到web依赖中,简化部署过程。

创建SpringBoot工程

  • 使用 Spring 官方的服务器URL: https://start.spring.io 或 https://start.springboot.io
  1. Alt + Insert --> Module --> Spring Initalizr

    在这里插入图片描述

  2. 在第二个页面选择 Web - Spring WebSpring Boot版本为2.7.11,然后点击Finish

在这里插入图片描述

创建工程失败排查

  • 创建完工程后,查看Build页卡中是否显示了绿色的对钩

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H0TKEvNF-1683533860168)(E:/TeduWork/jsd2303-springmvc-tea/note/mybatis/images/image-20230421092823099.png)]

  • 如果没有显示绿色对钩而是红色报错,解决方案如下

    • 检查maven配置

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gNrz18LK-1683533860170)(E:/TeduWork/jsd2303-springmvc-tea/note/mybatis/images/image-20230420184116832.png)]

    • 刷新maven

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K0daHe3U-1683533860170)(E:/TeduWork/jsd2303-springmvc-tea/note/mybatis/images/image-20230421093025690.png)]

    • 如果刷新之后还没有成功

      1. 检查Maven配置是否正确,检查 .m2 目录下是否包含 settings.xml 文件
      2. 如果Maven配置没有问题,删除 .m2 目录下的 repository目录,然后再次刷新Maven
      3. 如果以上步骤还是不成功,创建一个新工程重试

MyBatis框架-注解管理

概述

Mybatis是一个优秀的持久层框架(官网https://mybatis.org/mybatis-3/),底层基于JDBC实现与数据库的交互。并在JDBC操作的基础上做了封装和优化,它借助灵活的SQL定制,参数及结果集的映射方式,更好的适应了当前互联网技术的发展。Mybatis框架的简单应用架构,如图所示:
在这里插入图片描述

在当今的互联网应用中项目,mybatis框架通常会由spring家族进行资源整合,作为数据层技术实现数据交互操作。使用此框架程序员只需要通过注解或者修改xml配置文件的方式配置好需要执行的SQL语句,MyBatis框架会根据SQL语句生成对应的JDBC代码并对数据库中数据进行增删改查操作。

在SpringBoot脚手架工程中,Spring框架会基于MyBatis框架底层配置,创建SqlSessionFactory对象,然后再通过此工厂对象创建SqlSession,最后基于Spring框架为测试类注入SqlSession对象,可以通过SqlSession对象实现与数据库的会话了。如图所示:
在这里插入图片描述

MyBatis环境初始化

  • 工程名:mybatis 选择Java 8版本

  • SpringBoot版本:2.7.11

  • 勾选3项依赖项

    • Srping Web

    • MyBatis Framework

    • MySQL Driver

整合MyBatis

application.properties配置文件中添加连接数据库信息

spring.datasource.url=jdbc:mysql://localhost:3306/数据库名?serverTimezone=Asia/Shanghai&characterEncoding=utf8
spring.datasource.username=数据库用户名
spring.datasource.password=数据库密码

Pojo对象设计

在工程目录中创建pojo包,并创建Weibo

package com.liner.mybatis.pojo;

import java.util.Date;

public class Weibo {
    private Integer id;
    private String content;
    private Date Created;
    private Integer UserId;

    public Integer getId() {
        return id;
    }

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

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public Date getCreated() {
        return Created;
    }

    public void setCreated(Date created) {
        Created = created;
    }

    public Integer getUserId() {
        return UserId;
    }

    public void setUserId(Integer userId) {
        UserId = userId;
    }

    @Override
    public String toString() {
        return "Weibo{" +
                "id=" + id +
                ", content='" + content + '\'' +
                ", Created=" + Created +
                ", UserId=" + UserId +
                '}';
    }
}

Dao接口设计

  • @Mapper注解

    是由MyBatis框架提供,用于描述数据层接口,告诉系统底层为此接口创建其实现类,在实现类中定义数据访问逻辑,执行与数据库的会话(交互)

  • @Insert注解

    使 MyBatis 框架根据接口方法的返回值和参数类型自动生成插入数据的代码

  • @Select注解

    使 MyBatis 框架根据接口方法的返回值和参数类型自动生成查询数据的代码

  • @Update注解

    使 MyBatis 框架根据接口方法的返回值和参数类型自动生成修改数据的代码

  • @Delete注解

    使 MyBatis 框架根据接口方法的返回值和参数类型自动生成删除数据的代码

  • 占位符 #{}

    #{} 是 MyBatis 框架中用来表示占位符的语法。

    @Insert 注解中,#{} 所代表的是一个占位符,它可以接受 Java 对象作为输入参数,并将其转换为预编译的 SQL 语句中的参数。使用 #{} 可以帮助我们避免 SQL 注入等问题,同时也方便了参数的类型转换,让 SQL 写起来更加简单。

  • @Param注解

    @Param用于指定参数名和参数值。

    在使用 MyBatis 进行 SQL 语句开发时,使用 @Param 注解将方法参数映射到 SQL 语句中需要的占位符上,这样做的好处是可以清晰地表达 SQL 语句中占位符的含义,更容易使用和维护 SQL 语句

基于MyBatis规范设计用户数据访问接口,在工程目录下创建包mapper,并创建WeiboMapper接口

package com.liner.mybatis.mapper;

import com.liner.mybatis.pojo.Weibo;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface WeiboMapper {
    /**在微博表中插入数据*/
    @Insert("INSERT INTO weibo VALUES(NULL,#{content},#{created},#{userId})")
    int insert(Weibo weibo);

    /**查询所有微博信息*/
    @Select("SELECT * FROM weibo")
    List<Weibo> selectWeibo();

    /**根据微博id查询数据*/
    @Select("SELECT * FROM weibo WHERE id=#{id}")
    Weibo selectByWeiboId(int id);

    /**更新微博表数据*/
    @Update("UPDATE weibo SET content=#{content},created=#{created},user_id=#{userId} WHERE id=#{id}")
    int updateById(Weibo weibo);

    /**删除微博表数据*/
    @Delete("DELETE FROM weibo WHERE id=#{id}")
    int deleteById(@Param("id") Integer id);
}

测试类新建测试方法进行测试

/**自动装配*/
@Autowired
private WeiboMapper weiboMapper;

/**在微博表中插入数据-测试方法*/
@Test
void InsertWeibo(){
    Weibo weibo = new Weibo();
    weibo.setContent("今天天气真不错呀");
    weibo.setCreated(new Date());
    weibo.setUserId(1);
    weiboMapper.insert(weibo);
}

/**查询所有微博信息-测试方法*/
@Test
void selectWeiboTest(){
    System.out.println(weiboMapper.selectWeibo());
}

/**根据微博id查询数据*/
@Test
void selectByWeiboIdTest(){
    System.out.println(weiboMapper.selectByWeiboId(2));
}

/**更新微博表数据-测试*/
@Test
void updateById(){
    Weibo weibo = new Weibo();
    weibo.setId(1);
    weibo.setContent("这是我修改后的微博");
    weibo.setCreated(new Date());
    weibo.setUserId(1);

    System.out.println(weiboMapper.updateById(weibo));
}

/**删除微博表数据-测试*/
@Test
void deleteByIdTest(){
    System.out.println(weiboMapper.deleteById(1));
}

注:insert、update、delete返回值为受影响的数据条数int。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/502703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

沃通“SSL证书+代码签名证书”,防范高仿“钓鱼网站+钓鱼软件”攻击

近日&#xff0c;360发布威胁预警&#xff0c;因监测发现多起利用钓鱼网站对特定用户进行攻击的安全事件&#xff0c;呼吁警惕“高仿”软件安装程序暗藏钓鱼木马。“钓鱼网站钓鱼软件”是非常典型的钓鱼攻击组合&#xff0c;而沃通“SSL证书代码签名证书”能够帮助企业建立安全…

一文带你直观感受,BPM管理系统如何在低代码平台实现搭建

BPM系统&#xff08;英文全称&#xff1a;Business Process Management&#xff0c;翻译后简称BPM&#xff09;即业务流程管理系统&#xff0c;是指对端到端业务流程进行建模、分析和优化&#xff0c;用以实现战略业务目标&#xff0c;其特点是注重流程驱动为核心&#xff0c;实…

通过修改根证书绕过rustls的证书固定机制,抓包解密ssl流量

例子&#xff0c;cloudflare的warp-svc.exe。抓包获取密钥。 用proxifier尝试了一下强行代理&#xff0c;无效&#xff0c;因为proxifier是通过Hook Socket函数方式实现的&#xff0c;但这个程序可能没有用Socket函数进行通信。 之后发现通过nekoray基于gvisor的VPN白名单模式全…

《计算机网络——自顶向下方法》精炼——3.1-3.4.1

“生命在于运动&#xff0c;学习在于不断尝试。”——亚里士多德 文章目录 运输层概述与服务运输层功能运输层概述IP协议UDP和TCP协议 多路复用与多路分解UDPUDP相较于TCP的优点UDP报文段结构检验和可靠数据传输构造可靠数据传输协议 运输层概述与服务 运输层为应用层提供了逻…

2022年宜昌市网络搭建与应用竞赛样题(二)

网络搭建与应用竞赛样题&#xff08;二&#xff09; 技能要求 &#xff08;总分1000分&#xff09; 竞赛说明 一、竞赛内容分布 “网络搭建与应用”竞赛共分三个部分&#xff0c;其中&#xff1a; 第一部分&#xff1a;网络搭建及安全部署项目&#xff08;500分&#xff0…

传统工厂布局数字化的核心因素——智能工厂

近年来很多鼓励企业数字化转型的政策陆续出台&#xff0c;在一定程度上帮助企业减轻数字化转型的成本压力。但是企业数字化转型依然面临着诸多的问题与挑战。主要还是因为大部分企业&#xff0c;特别是制造型企业&#xff0c;数字化进程还在探索阶段&#xff0c;资金、人才、技…

接口自动化测试详解——持续集成流程中不可或缺的一环

B站首推&#xff01;2023最详细自动化测试合集&#xff0c;小白皆可掌握&#xff0c;让测试变得简单、快捷、可靠https://www.bilibili.com/video/BV1ua4y1V7Db 目录 接口自动化测试 Jenkins持续集成 总结 摘要&#xff1a; 在软件开发中&#xff0c;自动化测试已经成为了…

过滤器、拦截器、aop -> ‘三兄弟‘

目录 一、熟悉 三兄弟的区别 过滤器和拦截器的区别 使用场景 二、使用 filter Interceptor aop 一、熟悉 三个词都很熟悉&#xff0c;在某些课程或者博客中总被提到&#xff0c;但平时基本不怎么写&#xff1b; 三者在家族中的关系可以看下下边这张图&#xff0c;可以很…

52.现有移动端开源框架及其特点—PocketFlow-2

PocketFlow 性能 通过引入超参数优化组件,不仅避免了高门槛、繁琐的人工调参工作,同时也使得 PocketFlow 在各个压缩算法上全面超过了人工调参的效果。以图像分类任务为例,在 CIFAR-10 和 ImageNet 等数据集上,PocketFlow 对 ResNet 和 MobileNet 等多种 CNN 网络结构进行…

LT8471IFE#PBF-ASEMI代理亚德诺LT8471IFE#PBF原厂芯片

编辑-Z LT8471IFE#PBF参数描述&#xff1a; 型号&#xff1a;LT8471IFE#PBF 输入电压&#xff1a;2.6-50V 静态电流&#xff1a;2.2 mA 停机时的静态电流&#xff1a;0.01μA 正反馈电压&#xff1a;789 mV 反馈引脚偏置电流&#xff1a;30 nA 开关频率范围&#xff1a…

产品经理该怎么催进度?

这算是一个项目管理相关的问题&#xff0c;很多公司会把产品经理与项目经理的工作职能划分并没有这么清晰&#xff0c;而且项目是否能够按时上线&#xff0c;在整个项目推进过程中也是至关重要的。如果是公司的自研产品&#xff0c;项目没办法定期交付&#xff0c;挨老板一顿骂…

Barotrauma潜渊症私人服务器架设教程

准备工具&#xff1a; 服务器一台&#xff08;Ubuntu系统&#xff09; 家用电脑一台&#xff08;有网就行&#xff09; 准备阶段 通过SSH登入服务器。 服务端需要下载三个软件。 窗口管理工具 Screen 。用于将服务器挂在后台中运行。 SteamCMD 。用于下载潜渊症服务器。 …

【YOLO 系列】YOLO v4-v5先验知识

文章目录 输入端Mosaic数据增强Self-Adversarial TrainingCmBN 主干网络Mish激活函数DropBlock 正则化CSPNetFocus结构 NeckPANet 输出目标损失函数IoU LossGIoU LossDIoU LossCIoU Loss总结 DIOU_nms 参考 YOLO v4和v5版本在v3版本的基础上&#xff0c;组合了多种先进算法提升…

OLAP分析型数据库clickhouse的选型、安装与试用

一、背景&#xff1a; 目前&#xff0c;在做项目时&#xff0c;遇到使用oracle数据库进行大表查询分析时&#xff0c;查询比较慢&#xff0c;而且随着表数据逐渐积累&#xff0c;数据量过亿(按月估计)。架构师针对几个关键要点(非实时数据、核心场景查询分析、对事务要求低、数…

谷粒商城二十四springCloud之Sleuth+Zipkin 服务链路追踪

为什么用 微服务架构是一个分布式架构&#xff0c;它按业务划分服务单元&#xff0c;一个分布式系统往往有很多个服务单元。由于服务单元数量众多&#xff0c;业务的复杂性&#xff0c;如果出现了错误和异常&#xff0c;很难去定位。 主要体现在&#xff0c;一个请求可能需要调…

进程同步及经典问题

目录 1、基本概念 1.1两种形式的制约关系 1.2临界资源 1.3临界区 1.4同步机制应遵循的规则 2、硬件同步机制 3、信号量机制(重要) 3.1整型信号量 3.2记录型信号量 3.3AND型信号量 3.4信号量集 4、信号量的应用 4.1利用信号量实现进程互斥 4.2利用信号量实现前趋关系 …

【Spring】初识MyBatis (一)

MyBatis概述 MyBatis是一个支持普通SQL查询、存储过程以及高级映射的持久层框架&#xff0c;它消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索&#xff0c;并使用简单的XML或注解进行配置和原始映射&#xff0c;用以将接口和Java的POJO&#xff08;Plain Old Ja…

Qt libqrencode二维码——QtWidgets

前言 之前写过二维码的程序&#xff0c;但是在U盘上&#xff0c;没带&#xff0c;又重新找的网上资料写的。 网上二维码的生成&#xff0c;大多用到是第三方库libqrencode,这也一样&#xff1a; 效果图 本来是个动图的&#xff0c;都被和谐了&#xff0c;所以换成截图&…

2023年必学的一款测试工具,10 分钟上手

近两年有一款 UI 测试工具非常火爆&#xff0c;名字叫 cypress, 官方号称超越 selenium, 是面向下一代的测试工具。 那 cypress 到底要不要学呢&#xff1f;学起来容易吗&#xff1f;我们一起来看一下。 资料传送门&#xff1a;《软件测试全套基础/进阶/转行资料》 安装 cy…

【计算机视觉】最强 Zero-Shot 视觉应用:Grounding DINO + Segment Anything + Stable Diffusion

文章目录 一、前言二、功能介绍2.1 功能一2.2 功能二2.3 其他有趣的功能 三、总结 一、前言 用 Midjourney 花一个小时做的项目 logo 图&#xff1a; 解释一下 logo 的含义&#xff1a;一只坐在地上的马赛克风格的熊。 坐在地面上是因为 ground 有地面的含义&#xff0c;然后分…