面试整理(昆明)去面试就更新

1.MyBatis与MyBatis-Plus的区别?

MyBatis和MyBatis-Plus都是Java语言中非常常用的ORM框架,二者有以下区别:

1.实现方式不同

        MyBatis是基于XML或注解方式进行数据库操作的持久化框架,它提供了简单的CRUD操作及动态SQL生成等功能。

        而MyBatis-Plus是在MyBatis框架上的封装,通过对于增强简化后的API更加方便地进行开发,并且在性能、效率和易用性上都有一定的优化。

2.功能支持不同

        MyBatis-Plus相比于MyBatis提供了很多额外的功能,例如像条件构造器、代码生成器、分页插件、性能分析拦截器等实用的组件,使得开发者可以轻松快速完成业务逻辑的开发。

        而MyBatis相对较为原始,需要手写大量的SQL以完成各种功能的实现。

3.编程风格有所差异

        MyBatis的编程风格更加传统,需要定义mapper.xml文件并根据传入的参数使用相应的SQL查询语句,需要实现 Mybatis 提供的各种方法;

        而MyBatis-Plus具有许多针对CRUD进行的简化方法,通过继承BaseMapper以及使用Lambda表达式,可以让我们像SpringDataJPA类似地使用接口编程方式进行数据库操作。

下面通过代码示例来演示一下MyBatis和MyBatis-Plus的区别:

  • MyBatis的实现

首先在Mybatis中需要配置sql mapper映射文件,如下所示:

<!-- userMapper.xml -->
<mapper namespace="com.demo.dao.UserMapper"><select id="getUserById" parameterType="java.lang.Integer" resultType="com.demo.entity.User">select * from t_user where id=#{id}</select></mapper>

然后通过Mybatis的SqlSession执行相关方法实现数据查询:

SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(configuration);
SqlSession sqlSession = sessionFactory.openSession();
User user = sqlSession.selectOne("com.demo.dao.UserMapper.getUserById", 1);
sqlSession.close();
  • MyBatis-Plus的实现

在MyBatis-Plus中则要比上述方式简单得多,并且提供了更加方便的CRUD操作。例如我们可以定义一个接口继承BaseMapper接口并调用其中提供的方法来操作数据库,如下所示:

public interface UserMapper extends BaseMapper<User> {}

以下是从数据库中根据ID查询数据时,可以在Service层直接调用BaseMapper中提供的selectById()方法:

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {@Overridepublic User getUserById(Long id) {return baseMapper.selectById(id);}
}

2.对称加密和非对称加密的区别

在Java中,对称加密和非对称加密是实现数据加密的两种主要方法,它们在安全性、速度和使用场景上有着本质的区别。下面是对这两种加密方法的基本区别的详细解释:

 对称加密

1. **密钥使用**:对称加密使用相同的密钥进行加密和解密。这意味着发送方和接收方都必须拥有这个密钥,并且保持密钥的安全性。
   
2. **速度**:对称加密算法通常比非对称加密算法要快,因为它们使用的算法比较简单,适合对大量数据进行加密。
   
3. **安全性**:虽然对称加密算法本身可以非常安全,但密钥管理(尤其是密钥的分发和存储)可能会成为安全性的弱点。
   
4. **常见算法**:AES(高级加密标准)、DES(数据加密标准)、3DES(三重数据加密算法)等。

非对称加密

1. **密钥使用**:非对称加密使用一对密钥,一个是公开密钥(公钥),另一个是私有密钥(私钥)。公钥用于加密数据,而私钥用于解密数据。公钥可以公开,但私钥必须保密。
   
2. **速度**:非对称加密算法通常比对称加密慢,因为它们使用的算法更复杂,适用于小块数据的加密,如密钥交换、数字签名等。
   
3. **安全性**:非对称加密提供了更高级别的安全性,尤其是在公钥/私钥的管理和密钥交换方面,因为即使公钥被公开,没有私钥也无法解密数据。
   
4. **常见算法**:RSA、ECC(椭圆曲线加密)、Diffie-Hellman 密钥交换等。

使用场景

- **对称加密**通常用于加密大量数据的情况,因为它的加密和解密过程更快。
- **非对称加密**通常用于加密小量数据或进行安全密钥交换的场景。例如,在SSL/TLS协议中,非对称加密用于安全地交换对称密钥,然后对称密钥用于加密传输的数据。

在实际应用中,为了同时利用对称加密的高效性和非对称加密的安全性,两者往往会结合使用。例如,非对称加密用于安全地交换对称加密密钥,然后使用对称加密密钥来加密实际的数据传输。这种方法结合了两者的优点,既保证了加密过程的安全性,又提高了加密和解密的效率。

3.MyBatis-Plus关联表查询怎么写

在 MyBatis-Plus 中进行多表关联查询可以通过使用注解 @TableField 和 @TableId,以及使用 QueryWrapper 或 LambdaQueryWrapper 来实现。

以下是一个示例,假设有两个表 A 和 B,它们之间通过外键关联:

1.实体类定义

@Data
@TableName("table_a")
public class TableA {@TableId("id")private Long id;@TableField("name")private String name;@TableField("b_id")private Long bId;
}

@Data
@TableName("table_b")
public class TableB {@TableId("id")private Long id;@TableField("name")private String name;
}

2.数据库查询 

@Service
public class MyService {@Autowiredprivate TableAMapper tableAMapper;public List<TableA> getTableAWithTableB() {QueryWrapper<TableA> queryWrapper = new QueryWrapper<>();queryWrapper.inSql("b_id", "select id from table_b");return tableAMapper.selectList(queryWrapper);}
}

在这个示例中,通过在 TableA 实体类中添加 @TableField("b_id") 注解来映射 A 表中与 B 表关联的字段。然后在 MyService 类中通过 QueryWrapper 来创建查询条件,实现了 A 表和 B 表的联合查询。

当然,具体的多表关联查询方式还取决于你的数据库表结构和业务需求,你可以根据实际情况进行调整和修改。

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

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

相关文章

五个使用Delphi语言进行开发的案例

案例一&#xff1a;学生信息管理系统 某学校需要开发一个学生信息管理系统&#xff0c;用于记录学生的基本信息、成绩和考勤情况等。开发者使用Delphi语言进行开发&#xff0c;设计了一个包含多个窗体的应用程序。主窗体用于展示学生的列表和基本信息&#xff0c;其他窗体则用…

2024.2.25 -ElasticSearch 进阶

倒排索引 Elasticsearch的倒排索引机制是通过将文档中出现的词汇与它们所在的文档ID关联起来&#xff0c;实现快速查找包含特定词汇的文档。下面是一个具体的例子来说明倒排索引的工作原理&#xff1a; 假设我们有一个简单的文章集合&#xff0c;包含以下三篇文章&#xff1a…

Java学习——泛型

Java泛型是Java语言中的一个特性&#xff0c;它允许你在类、接口和方法上定义类型参数。使用泛型可以使代码更加通用&#xff0c;减少代码重复&#xff0c;并在编译时提供更强的类型检查。下面分别介绍泛型类、泛型方法和泛型接口。 泛型类 泛型类是在类名后添加类型参数声明…

ap和ac的工作原理

让我们一步步解释无线网络中访问点 (AP) 和无线控制器 (AC) 的工作原理&#xff1a; 1. 访问点 (AP)&#xff1a; 访问点是无线局域网络 (WLAN) 中的关键组件之一&#xff0c;它充当无线设备&#xff08;如笔记本电脑、智能手机等&#xff09;和有线网络之间的桥梁。其工作原理…

Oracle开发和应用——PL/SQL语法2(游标及集合)

6.4.6. 游标 这里的游标(cursor),是指数据库开发中的游标,而且,这里所指的是显式定义的游标。因为,除了显式定义的游标,我们每条SQL语句也会隐式的定义、打开和关闭一个游标,其实质是一个带有指针的结果集。当我们按照顺序取出结果时,这个指针会按照从前到后的顺序移…

990-09产品经理:How project management benefits different teams 项目管理如何使不同的团队受益

Project management methods and tools can be deployed across all teams and industries to help improve efficiency and drive results. In this chapter, we’ll provide an overview of how PM benefits construction, IT, marketing, and operations teams. 项目管理方法…

解锁苏宁电商数据新纪元:关键字搜索API接口引领业务升级

苏宁关键字搜索API接口&#xff1a;电商数据探索的新篇章 一、引言 在电商领域&#xff0c;数据的重要性不言而喻。为了帮助开发者更高效地获取和利用电商数据&#xff0c;苏宁开放平台提供了关键字搜索API接口。本文将带你深入了解这一接口的技术细节&#xff0c;让你在电商…

如何获取pnpm存储目录

现在你可以做 得到&#xff1a;\path\to.pnpm-store\v3 pnpm store path注&#xff1a;从v7.0.0开始&#xff0c;pnpm 存储位于不同的文件夹中。它将位于$XDG_DATA_HOMELinux Linux : ~/.local/share/pnpm/store (default) Windows : C:\Users\YOUR_NAME\AppData\Local\pn…

设计模式--单例模式--懒汉饿汉

单例模式 单例模式(Singleton)&#xff0c;保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 单例模式 通常我们可以让一个全局变量使得一个对象被访问&#xff0c;但它不能防止你实例化多个对象。一个最好的办法就是&#xff0c;让类自身负责保存它的唯一实…

selenium自动化测试如何定位一闪而过的元素,比如提示信息、提交按钮

这里以登录按钮为例 在当前页面按F12点击控制,在下方输入debugger&#xff0c;点击登录按钮后点击输入debugger的地方按回车&#xff0c;一闪而过的元素就会定住不动就可以定位了

golang中make和new的区别

参考链接 https://worktile.com/kb/ask/38441.html 在Go语言中&#xff0c;make和new都是用于创建数据结构的内置函数&#xff0c;区别&#xff1a; 分配内存的区别 返回类型的区别 初始化的区别 分配内存的区别 make 用于创建切片、映射和通道等 引用类型 的数据结构。new 用…

企业网站建设需要多少钱?定制开发费用报价在3000-4000元

建立一个网站需要多少钱&#xff1f; 网站建设的价格划分也有很多。 这里首先要提的是市面上常见的一种低成本建站方式——模板网站&#xff0c;就是那种直接制作网站原型就可以无限复制的网站。 或者可以在几分钟内建立一个由软件生成的网站。 成本低得惊人&#xff0c;从500元…

【C++那些事儿】C++入门 | 命名空间 | 缺省参数 | 引用 | 内联函数 | auto关键字 | 范围for循环 | nullptr

&#x1f4f7; 江池俊&#xff1a; 个人主页 &#x1f525;个人专栏&#xff1a; ✅数据结构冒险记 ✅C那些事儿 &#x1f305; 有航道的人&#xff0c;再渺小也不会迷途。 文章目录 前言1. C关键字(C98)2. 命名空间2.1 命名空间定义2.2 命名空间使用 3. C输入&输出4. 缺…

Qt 使用MD5给数据加密方法

重点&#xff1a; 1.通常在存储密码的时候需要对数据进行加密&#xff0c;通常采用Md5进行加密。 //存储密码时候 //读取存储的用户名和密码, 密码是经过加密的 void TDialogLogin::readSettings() {QSettings settings; //创建QSettings对象bool savedsettings.value(&q…

PyPDF2:项目实战源码分享(PDF裁剪)

目录&#x1f4d1; 1. 背景&#x1f4d1;2. 源码模块解析&#x1f4d1;2.1 读取PDF页数2.2 获取指定页的宽高尺寸2.3 裁剪单页PDF2.4 批量裁剪PDF 总结&#x1f4d1; 1. 背景&#x1f4d1; 接PyPDF2模块推荐博文中提到的实际需求&#xff08;将银行网站下载来的多页且单页多张…

【More Effective C++】条款8:new和delete的理解

new&#xff1a;内建的操作符和sizeof一样&#xff0c;不能被改变意义&#xff0c;包含下面两个部分 调用operator new 分配足够的内存&#xff1b;在内存上调用构造函数&#xff0c;为对象赋初值&#xff0c;并将返回的指针转型为对象的类型。 程序员无法直接调用对象初始化…

LeetCode 热题 100 | 二叉树(一)

目录 1 基础知识 1.1 先序遍历 1.2 中序遍历 1.3 后序遍历 2 94. 二叉树的中序遍历 3 104. 二叉树的最大深度 4 226. 翻转二叉树 5 101. 对称二叉树 菜鸟做题&#xff0c;语言是 C 1 基础知识 二叉树常见的遍历方式有&#xff1a; 先序遍历中序遍历后序遍历…

基于YOLOv5+PySide6的火灾火情火焰检测系统设计深度学习

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;225火灾 获取完整源码源文件已标注的数据集&#xff08;1553张&#xff09;配置跑起来说明 可有偿49yuan一对一远程操作&#xff0c;在你电脑跑起来 效果展示&#xff1a; ​数据集在下载的文件夹&#xff1a;yolov5-5.0\…

2024寒假集训营第四场 I回头 -- 题解 (带路径修改的Dijkstra)

目录 回头&#xff1a; 题目大意&#xff1a; 思路解析&#xff1a; 代码实现&#xff1a; 回头&#xff1a; 题目大意&#xff1a; 给你一个n个点m条边的带权有向图&#xff0c;你现在需要从第一个点走到第n个点&#xff0c;求最短路径&#xff0c;当无解时输出-1. 值得注意的…

CRF算法(Conditional Random Fields)揭秘

CRF基本介绍 在机器学习中&#xff0c;建模线性序列结构的方法&#xff0c;除了HMM算法&#xff0c;另一个重要的模型就是CRF。HMM为了降低模型复杂性&#xff0c;对观测变量做了独立假设(即隐状态之间有相关性&#xff0c;而观测变量之间没有相关性)&#xff0c;这在某种程度…