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

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

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

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!

多连接 BLE 怎么设计服务不会乱&#xff1f;分层思维来救场&#xff01; 作者按&#xff1a; 你是不是也遇到过 BLE 多连接时&#xff0c;调试现场像网吧“掉线风暴”&#xff1f; 温度传感器连上了&#xff0c;心率带丢了&#xff1b;一边 OTA 更新&#xff0c;一边通知卡壳。…...

2025 后端自学UNIAPP【项目实战:旅游项目】7、景点详情页面【完结】

1、获取景点详情的请求【my_api.js】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http(/login/getWXSessionKey, {code,avatar}); };//…...

AIGC 基础篇 Python基础 02

1.bool类型 书接上回&#xff0c;我们上次最后讲了三大数据类型&#xff0c;除了这三个之外&#xff0c;Python也有bool类型&#xff0c;也就是True和False。 a 2 print(a1) print(a2) 像这里&#xff0c;输出的内容第一个是False&#xff0c;因为a的值为2&#xff0c;而第…...

Linux 内核内存管理子系统全面解析与体系构建

一、前言: 为什么内存管理是核心知识 内存管理是 Linux 内核最核心也最复杂的子系统之一&#xff0c;其作用包括&#xff1a; 为软件提供独立的虚拟内存空间&#xff0c;实现安全隔离分配/回收物理内存资源&#xff0c;维持系统稳定支持不同类型的内存分配器&#xff0c;最优…...

民锋视角下的资金流效率与账户行为建模

民锋视角下的资金流效率与账户行为建模 在当前复杂多变的金融环境中&#xff0c;资金流效率已成为衡量一家金融服务机构专业能力的重要指标。民锋在账户管理与资金调配的实战经验中&#xff0c;逐步建立起一套以资金流路径为核心的行为建模方法&#xff0c;用以评估客户行为、交…...