首页 > 编程语言 >Java面试题———MyBatis篇

Java面试题———MyBatis篇

时间:2024-10-13 21:53:12浏览次数:9  
标签:语句 面试题 Java 映射 Mybatis SQL MyBatis 字段名

目录

1、Mybatis中#{}和${}的区别

2、当实体类中的属性名和表中的字段名不一样 ,怎么办

3、MyBatis动态SQL了解吗

4、ResultType和ResultMap有什么区别


1、Mybatis中#{}和${}的区别

在Mybatis中#{}和${}都可以用于在sql语句中拼接参数,但是在使用方面有很多的区别

1、处理方式不同:${}表示的是字符串拼接,Mybatis在处理它时,会直接将${}替换成变量的值

而#{}是预编译处理,Mybatis在处理它时,会将sql中的#{}替换为?号,然后底层使用JDBC的预编译对象来赋值

2、安全性不同:${}存在SQL注入问题,#{}可以有效的防止SQL注入

3、效率不同:${}处理的sql到数据库每次都要重新编译,而#{}处理的sql只需要编译一次

总之,在实际使用过程中尽量使用#{},而避免使用${},当然这也不是说${}就没有使用场景

比如:如果sql中需要动态传递表名或者字段名,那就只能使用${}了

2、当实体类中的属性名和表中的字段名不一样 ,怎么办

是这样的,当实体类中的属性名和表中的字段名一样的时候,Mybatis会自动完成查询结果的映射

但是如果不一样,Mybatis默认无法完成结果映射,此时我们可以使用下面这几种方案:

1、开启驼峰映射:这种方式可以处理掉字段和属性满足驼峰转换规则的那部分

2、字段起别名:可以在查询的SQL语句中定义字段名的别名,让字段名的别名和实体类的属性名一致

3、手动映射:mybatis提供了resultMap标签,它可以通过来自定义映射关系来保证字段和属性的映射

3、MyBatis动态SQL了解吗

动态SQL是为了解决SQL语句灵活性不足的问题而提出的一种技术,它可以根据条件拼接SQL语句以不同的查询需求

MyBatis常用的动态SQL标签有:

  1. 条件判断标签:if、choose、when、otherwise 当条件成立时才执行其中的 SQL 语句

  2. 格式整理标签:trim、where、set 它可以在生成的SQL语句中调整格式,去除多余的关键字和符号

  3. 循环遍历标签:foreach 它用于遍历一个集合并将集合中的元素添加到 SQL 语句中

动态 SQL 的执行原理是,当 MyBatis 执行动态 SQL 语句时,会将 SQL 语句和参数传递给 SQL 解析器进行解析

SQL 解析器会根据 SQL 语句中的动态标签和参数的值,生成一个完整的 SQL 语句

然后,MyBatis将生成的SQL语句和参数传递给 JDBC 驱动程序进行执行

4、ResultType和ResultMap有什么区别

resultType和resultMap都用于查询结果的映射,区别点在于:

  • resultType :当数据库结果集中的列名和要封装实体的属性名完全一致的时候使用

  • resultMap :当数据库结果集中的列名和要封装实体的属性名有不一致的使用使用,它允许自定义映射规则

标签:语句,面试题,Java,映射,Mybatis,SQL,MyBatis,字段名
From: https://blog.csdn.net/m0_68319667/article/details/142905079

相关文章

  • Java面试题———Spring篇
    目录1、谈谈你对SpringIOC的理解2、Spring中有哪些依赖注入方式3、你用过哪些Spring注解4、SpringBean的作用域有几种5、Spring中的bean线程安全吗6、谈谈你对SpringAOP的理解7、AOP的代理有几种方式8、Spring的通知类型有哪些9、了解Spring的事务管理吗10、Spring......
  • 【java面经thinking】一
    目录类加载过程加载:连接初始化GC回收机制(垃圾回收)区域判断对象是否存活回收机制HashMap类加载器加载标识加载机制缓存自定义加载器:JVM内存结构常量池string设置成final按下网址发生类加载过程分为加载,连接和初始化的过程。加载:将.class文件的二进制字节......
  • Java语言中1.方法调用栈 2.栈帧 3.局部变量表 4.操作数栈 5.动态链接 6.方法的入参存
    在Java语言中,理解方法调用栈、栈帧、局部变量表、操作数栈等概念非常重要,它们与方法的执行和内存管理密切相关。下面是对这些概念的详细解释及它们之间的关系:1.方法调用栈(MethodCallStack)方法调用栈是每个线程维护的一块内存区域,用于存储线程执行时的栈帧(每个栈帧对应一次......
  • java项目--零钱通(OOP)
    参考上一篇,项目在主方法中运行的弊端,不易修改,也不能随用随调,结合面向对象的优势,因此有了以下代码的实现:分两个部分,一个类是完成零钱通的各个功能,另一个类用于调用该类的方法。代码如下(功能类展示):/*该类是完成零钱通的各个功能的类*/publicclassOOP{booleanloop......
  • java实现--零钱通
    项目说明:参照微信小程序的零钱通,可以完成收益入账,消费,查看明细,退出系统等功能。以下是功能模块的具体代码:importjava.text.SimpleDateFormat;importjava.util.Scanner;importjava.util.Date;publicclassfirst{publicstaticvoidmain(String[]args){......
  • Java 和 Python 的终极对决:毕业设计选谁才不掉头发?
    前言:老铁们,毕业设计来了,你准备好了么?听说最近有不少同学陷入了毕业设计选择恐慌,尤其是你手边摆着两把编程界的“大宝剑”:Java和Python,不知选哪把能少掉几根头发,甚至怀疑自己还能不能顺利毕业?其实,这个问题很简单,就好像你在超市里面对两袋薯片——“哎,这袋多一点,那袋口味更好,真......
  • java中有非可重入锁吗?
    Java中没有直接提供非可重入锁的实现,但可以通过一些手段来模拟非可重入锁的行为。首先,需要明确可重入锁和非可重入锁的概念。可重入锁允许同一个线程在持有锁的情况下再次获取该锁,而不会发生死锁。这通常是通过维护一个锁持有者的计数器和线程ID来实现的,当同一个线程再次......
  • Springboot整合Mybatis
    1、创建springboot项目2、勾选mysql驱动和web驱动3、pom.xml导入相关依赖<!--MyBatisPlus启动器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId>&l......
  • 从本我出发,窥视java面向对象之本源
    掀开面向对象的神秘面纱,我们到底该如何深入理解java的面向对象?1.故事从一个小场景开始:是夜,月黑风高,你单枪匹马独自一人来到幽暗森林,想要去窥探java那神秘而充满好奇的世界。突然,眼前一个黑影一闪而过,你顿时血压飙到250,一句“卧槽”脱口而出,心里害怕极了。“刚刚那玩意到......
  • Educoder——JAVA高级特性 字节流-输入输出
    任务描述本关任务:使用输入输出流读写文件。相关知识为了完成本关任务,你需要掌握:1.如何使用输入流;2.如何使用输出流。输入流我们通过一个示例,来看看输入流应该如何使用,首先我们在D盘下创建一个hello.txt文件。输入文本HelloJavaHelloInputStream。在main方法中加入如......