当前位置: 首页 > news >正文

Java框架随笔

Maven面试题

Myabtis面试题

文章目录

    • Maven面试题
    • Myabtis面试题
  • 1、简述Spring Boot的启动流程
  • 2、如何理解Bean的生命周期
  • 3、MyBatis的主要功能
  • 4、MyBatis的组成部分
  • 5、MyBatis的动态SQL

1、简述Spring Boot的启动流程

Spring Boot的启动流程可以分为以下几个步骤:

  1. 加载配置文件:在启动过程中,Spring Boot会首先加载并解析配置文件,包括application.properties或application.yml等。这些配置文件中包含了应用程序的配置信息,如数据库连接信息、端口号等。

  2. 创建Spring应用上下文:接下来,Spring Boot会根据加载的配置文件创建一个Spring应用上下文。Spring应用上下文是Spring框架的核心容器,负责管理和协调各个Bean的创建、依赖注入等工作。

  3. 扫描并注册Bean:Spring Boot会扫描应用程序中的所有类,查找带有特定注解的类,并将其注册为Bean。这些特定注解包括@Component、@Service、@Controller等,它们用于标识类是Spring的组件,需要由Spring容器来管理。

  4. 执行自动配置:Spring Boot会根据应用程序的依赖关系和配置文件的内容,自动配置各个模块和组件。它会根据类路径上的依赖自动配置数据库连接、Web服务器、消息队列等。

  5. 启动应用程序:在完成上述步骤后,Spring Boot会启动应用程序并监听指定的端口号。当接收到请求时,它将根据请求的URL和配置的路由规则,调用相应的Controller方法进行处理,并返回结果给客户端。

2、如何理解Bean的生命周期

  • Bean的生命周期包括实例化、属性赋值、初始化和销毁四个阶段。
  • 首先,当容器加载配置文件或者通过注解扫描到Bean定义时,会实例化Bean对象。
  • 接着,容器会根据配置或者注解将属性值注入到Bean中。
  • 然后,容器会调用Bean的初始化方法,可以通过实现InitializingBean接口或者在配置文件中指定初始化方法。在Bean的初始化阶段,可以进行一些自定义的操作,比如数据初始化、资源加载等。
  • 最后,当容器关闭时,会调用Bean的销毁方法,可以通过实现DisposableBean接口或者在配置文件中指定销毁方法。在销毁阶段,可以进行一些资源释放、清理操作。
  • Bean的生命周期由容器来管理,我们可以在不同阶段进行一些自定义的操作,以满足业务需求。
    MyBatis是一个开源的持久层框架,用于简化Java应用程序与关系型数据库之间的交互。它提供了一种将SQL语句与Java代码解耦的方式,使得我们可以通过配置文件来定义SQL语句,然后通过Java代码调用这些SQL语句,从而实现数据的增删改查操作。

3、MyBatis的主要功能

包括:

  1. SQL映射:通过在XML配置文件中定义SQL语句,将SQL语句与Java方法关联起来,实现数据的持久化操作。

  2. 参数映射:MyBatis支持将Java对象与SQL语句中的参数进行映射,使得我们可以方便地传递参数给SQL语句。

  3. 结果映射:MyBatis支持将SQL查询结果与Java对象进行映射,使得我们可以方便地将查询结果封装到Java对象中。

  4. 缓存管理:MyBatis提供了一级缓存和二级缓存的支持,可以提高查询性能。

  5. 动态SQL:MyBatis支持使用动态SQL语句,可以根据不同的条件动态生成SQL语句,使得我们可以灵活地构建SQL语句。

4、MyBatis的组成部分

包括:

  1. SqlSessionFactory:SqlSessionFactory是MyBatis的核心接口,用于创建SqlSession对象。

  2. SqlSession:SqlSession是MyBatis的主要接口,用于执行SQL语句,包括插入、更新、删除和查询等操作。

  3. Mapper接口:Mapper接口是用于定义SQL语句的接口,通过在接口中定义方法,将SQL语句与Java代码进行关联。

  4. Mapper XML配置文件:Mapper XML配置文件是用于定义SQL语句的XML文件,通过在配置文件中定义SQL语句和参数映射关系,将SQL语句与Java代码解耦。

5、MyBatis的动态SQL

可以根据不同的条件来动态生成SQL语句,使得我们可以根据不同的需求来构建灵活的SQL语句。
它适用于以下场景:

  1. 条件查询:根据不同的查询条件来动态生成查询语句,例如根据用户输入的姓名、年龄、性别等条件来查询符合条件的数据。

  2. 动态排序:根据用户选择的排序字段和排序方式来动态生成排序语句,例如根据用户选择的字段进行升序或降序排序。

  3. 动态更新:根据不同的更新条件来动态生成更新语句,例如根据用户选择的字段和条件来更新数据库中的数据。

  4. 批量插入:根据不同的插入条件来动态生成插入语句,例如批量插入用户数据。

下面是一些动态SQL的代码示例:

  1. 条件查询:
<select id="getUserList" parameterType="User" resultType="User">SELECT * FROM user<where><if test="name != null and name != ''">AND name = #{name}</if><if test="age != null">AND age = #{age}</if><if test="gender != null and gender != ''">AND gender = #{gender}</if></where>
</select>
  1. 动态排序:
<select id="getUserList" resultType="User">SELECT * FROM user<if test="orderBy != null and orderBy != ''">ORDER BY ${orderBy} ${orderType}</if>
</select>
  1. 动态更新:
<update id="updateUser" parameterType="User">UPDATE user<set><if test="name != null and name != ''">name = #{name},</if><if test="age != null">age = #{age},</if><if test="gender != null and gender != ''">gender = #{gender},</if></set>WHERE id = #{id}
</update>
  1. 批量插入:
<insert id="insertUserBatch" parameterType="java.util.List">INSERT INTO user (name, age, gender) VALUES<foreach collection="list" item="user" separator=",">(#{user.name}, #{user.age}, #{user.gender})</foreach>
</insert>

这些示例代码展示了如何使用动态SQL来根据不同的条件动态生成SQL语句,使得我们可以灵活地构建SQL语句来满足不同的需求。

相关文章:

Java框架随笔

Maven面试题 Myabtis面试题 文章目录 Maven面试题Myabtis面试题 1、简述Spring Boot的启动流程2、如何理解Bean的生命周期3、MyBatis的主要功能4、MyBatis的组成部分5、MyBatis的动态SQL 1、简述Spring Boot的启动流程 Spring Boot的启动流程可以分为以下几个步骤&#xff1a…...

自然语言处理基础——词表示

词表示 把自然语言中最基本的语言单元——词转换为机器能够理解的 词表示能完成以下两个能力 词相似度计算 词与词之间语义的关系 近义词&上位词 使用近义词或上位词表示的问题 遗漏差异 遗漏新的释义 带有主观性 数据吸收 需要大量人工构建 One-Hot Representation …...

2023年9月青少年软件编程(C 语言) 等级考试试卷(七级)

青少年软件编程&#xff08;C/C&#xff09;7级等级考试真题试卷&#xff08;2023年9月&#xff09; 编程题第 1 题 红与黑&#xff08;2023.9&#xff09; 有一间长方形的房子&#xff0c;地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上&#xff0c…...

鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统项目背景

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管…...

apache httpd 换行解析漏洞

原理 Apache HTTPD是一款HTTP服务器&#xff0c;它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞&#xff0c;在解析PHP时&#xff0c;1.php\x0A将被按照PHP后缀进行解析&#xff0c;导致绕过一些服务器的安全策略。 漏洞编号 cve-2017-15715 环境…...

【设计模式】工厂模式

工厂模式 1.什么是工厂模式 它提供了一种创建对象的最佳方式。在工厂模式中&#xff0c;我们在创建对象时不会对客户端暴露创建逻辑&#xff0c;并且是通过使用一个共同的接口来指向新创建的对象。实现了创建者和调用者分离&#xff0c;工厂模式分为简单工厂、工厂方法、抽象…...

C++二分算法的应用:寻找峰值原理、源码及测试用例

说明 此文是课程https://edu.csdn.net/course/detail/38771 的讲义。 源码下载&#xff1a;https://download.csdn.net/download/he_zhidan/88458478 题目 长度为n的数组nums&#xff0c;请返回任意一峰值的索引。符合以下条件之一i便是峰值的索引。 n等于1 i等于0 n>…...

外汇天眼:本周无牌裸奔平台名单出炉,你踩“坑”了么?!!

监管信息早知道&#xff01;外汇天眼将每周定期公布监管牌照状态发生变化的交易商&#xff0c;以供投资者参考&#xff0c;规避投资风险。如果平台天眼评分过高&#xff0c;建议投资者谨慎选择&#xff0c;因为在外汇天眼评分高不代表平台没问题&#xff01; 以下是监管牌照发生…...

10 读写锁ReentrantReadWriteLock

1 介绍 为什么要使用读写锁&#xff1f; 需要高并发读取和较低并发写入的应用程序&#xff0c;降低锁的粒度&#xff0c;提高系统性能 使用场景&#xff1a; 读多写少的共享资源 缓存管理&#xff1a;读 >> 写&#xff0c;控制多个线程同时读缓存&#xff0c;需要刷新o…...

laravel队列

laravel redis队列 1、创建job队列任务 php artisan make:job StoreUser执行上述命令后&#xff0c;会生成app/Jobs/StoreUser.php文件&#xff0c;编辑文件内容如下&#xff1a; <?phpnamespace App\Jobs;use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queu…...

【计算机网络】TCP 协议的相关特性

TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的协议。以下是TCP协议的相关特性&#xff1a; 可靠性&#xff1a;TCP通过确认和重传机制保证数据的可靠传输。 面向连接&#xff1a;TCP在传输数据前需要先建立连接。连接的建立过程包括三次握手…...

[软件安装] tmux安装及相关事项

tmux安装及相关事项 tmux是一个终端复用工具&#xff0c;可以在单个终端窗口中同时运行多个终端会话。安装tmux可以提高工作效率&#xff0c;使命令行操作更加方便。 1. 安装tmux&#xff1a; 在Linux系统下&#xff0c;可以使用包管理器来安装tmux&#xff0c;比如在Ubuntu…...

leetcode 887 ——扔鸡蛋

题目大意&#xff1a; 你有k个鸡蛋&#xff0c;对n层楼的建筑&#xff0c;请确认在f层扔鸡蛋鸡蛋恰好不会破碎的最少次数&#xff08;f满足 0 < f < n&#xff09;。 方法一&#xff1a; 状态&#xff1a;即会发生变化的量&#xff0c;很明显有两个&#xff0c;当前拥有…...

自动化运维ansible(role)

一、role的介绍 1、Roles称为角色&#xff0c;本质上是为简化playbook配置文件而产生的一种特殊的方法。 2、简单来说&#xff0c;roles就是将原本在一个yaml中的文件进行规则化分散&#xff0c;封装到不同的目录下&#xff0c;从而简化playbook的yaml配置文件大小。从其实现方…...

linux命令笔记

创建文件夹 sudo mkdir 文件夹名vim笔记 vim的查找和退出查找 进入vim 按/ 输入内容即可查找 按enter结束查找vim创建文件并在里面写东西 比如创建文件为 hello.cpp vim hello.cpp查看所有文件 # 查看所有文件&#xff0c;并以列表的形式查看&#xff0c;显示出文件大小 …...

2.3.C++项目:网络版五子棋对战之实用工具类模块的设计

文章目录 一、实用工具类模块&#xff08;一&#xff09;功能 二、设计和封装&#xff08;一&#xff09;日志宏封装&#xff08;二&#xff09;mysql_util封装&#xff08;三&#xff09;Jsoncpp-API封装&#xff08;四&#xff09;file_util封装&#xff08;五&#xff09;st…...

跳跃游戏----题解报告

题目&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题解&#xff1a; 其实就直接挨着跳就行了&#xff0c;循环中不断更新k&#xff0c;不停比较k和当前位置跳跃的最大值即可 代码&#xff1a; public boolean canJump(int[] nums) …...

SpringBoot下的代理注解

EnableAspectJAutoProxy Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Documented Import(AspectJAutoProxyRegistrar.class) public interface EnableAspectJAutoProxy {// 是否代理目标对象&#xff0c;ture:使用CGLIB代理 fasle:使用JDK代理boolean proxy…...

[C++随想录] 二叉搜索树

搜素二叉树 二叉搜索树的使用二叉搜索树的模拟实现(K)整体结构循环版本递归版本 二叉搜索树的应用源码(kv) 二叉搜索树的使用 二叉搜索树 相较于 普通的二叉树来说: 根节点的左子树的所有键值都 小于 根节点, 根节点的右子树的所有键值 大于 根节点根节点的 左右子树 都是 二…...

Windows Server 2019 搭建FTP站点

目录 1.添加IIS及FTP服务角色 2.创建FTP账户&#xff08;用户名和密码&#xff09;和组 3.设置共享文件夹的权限 4.添加及设置FTP站点 5.配置FTP防火墙支持 6.配置安全组策略 7.客户端测试 踩过的坑说明&#xff1a; 1.添加IIS及FTP服务角色 a.选择【开始】→【服务器…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...