当前位置: 首页 > 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.选择【开始】→【服务器…...

千问3.5-2B与YOLOv5联动:实现智能视频内容分析与描述

千问3.5-2B与YOLOv5联动&#xff1a;实现智能视频内容分析与描述 1. 场景需求与技术方案 在视频内容爆炸式增长的今天&#xff0c;如何快速理解视频内容成为许多行业的共同需求。以安防监控为例&#xff0c;传统人工查看录像的方式效率低下&#xff0c;一个8小时的监控视频可…...

CD-HIT安装踩坑实录:从Conda到源码编译,哪种方式最适合你的Linux服务器?

CD-HIT安装踩坑实录&#xff1a;从Conda到源码编译&#xff0c;哪种方式最适合你的Linux服务器&#xff1f; 生物信息学工具CD-HIT作为序列去冗余的黄金标准&#xff0c;几乎出现在每篇涉及高通量测序分析的论文方法部分。但当你第一次在实验室服务器上尝试安装它时&#xff0c…...

BEAST 2 贝叶斯进化分析:从新手到专家的完整指南

BEAST 2 贝叶斯进化分析&#xff1a;从新手到专家的完整指南 【免费下载链接】beast2 Bayesian Evolutionary Analysis by Sampling Trees 项目地址: https://gitcode.com/gh_mirrors/be/beast2 BEAST 2&#xff08;Bayesian Evolutionary Analysis by Sampling Trees&a…...

智能EFI配置终极方案:OpCore-Simplify自动化解决黑苹果安装难题

智能EFI配置终极方案&#xff1a;OpCore-Simplify自动化解决黑苹果安装难题 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpenCore EFI配置是黑苹果…...

Loop:3个简单步骤彻底告别macOS窗口管理混乱的终极解决方案

Loop&#xff1a;3个简单步骤彻底告别macOS窗口管理混乱的终极解决方案 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 你是否曾在多任务处理时被杂乱的窗口拖慢了工作效率&#xff1f;作为一名每天需要…...

AI在网络安全中的5个实战应用:从渗透测试到异常检测

AI在网络安全中的5个实战应用&#xff1a;从渗透测试到异常检测 网络安全领域正经历一场由AI驱动的技术革命。想象一下&#xff0c;当黑客的攻击速度以毫秒计时&#xff0c;传统人工防御如同用算盘对抗超级计算机。去年某金融机构遭遇的零日攻击中&#xff0c;防御系统仅用0.3秒…...

倍福NC轴编码器参数实战:从基础释义到高级配置避坑指南

1. 编码器参数基础&#xff1a;从零理解核心概念 第一次接触倍福NC轴编码器参数时&#xff0c;我盯着那一堆英文参数名和十六进制数值直发懵。后来在调试第三方驱动器的过程中踩过几次坑才明白&#xff0c;这些参数本质上是在建立编码器脉冲与实际物理位置之间的"翻译规则…...

从三电阻采样到VOFA+观测:一份给STM32新手的BLDC FOC电流环调试避坑指南

从三电阻采样到VOFA观测&#xff1a;STM32 BLDC FOC电流环调试实战手册 当电机控制新手第一次面对FOC算法时&#xff0c;电流环往往是最令人困惑的环节。那些抽象的相电流波形、复杂的坐标变换公式&#xff0c;以及难以捉摸的PI参数调节&#xff0c;常常让初学者望而却步。本文…...

告别Gazebo Classic:在ROS2 Humble上为TurtleBot4配置Navigation2与Gazebo Modern

告别Gazebo Classic&#xff1a;在ROS2 Humble上为TurtleBot4配置Navigation2与Gazebo Modern 当ROS2 Humble遇上TurtleBot4&#xff0c;开发者们正站在机器人仿真技术迭代的十字路口。Gazebo Modern的崛起不仅代表着物理引擎的升级&#xff0c;更预示着整个ROS生态工具链的范式…...

手把手教你用C语言开发扫雷小游戏

C语言&#xff1a;扫雷游戏一.游戏逻辑分析与结构框架1.棋盘的创建2.布置炸弹3.排除炸弹二.游戏实现1.头文件game.h2.源文件game.c3.源文件test.c在此之前我们已经对分支与循环语句、数组和函数有了一定得了解&#xff0c;接下来我们将写一个简单的扫雷游戏代码&#xff0c;在写…...