mybatis高频面试题

mybatis高频面试题


Maven 的依赖范围有哪些?它们分别表示什么含义?

以下范围的依赖仅在特定运行阶段中使用

  1. compile:编译、测试、运行。是默认范围

  2. test:测试。不会被主代码使用

  3. provided:编译、测试。只有在当 JDK 或者一个容器已提供该依赖之后才使用

  4. runtime:测试、运行。会被打包

  5. system:编译、测试。和provided相似,不推荐使用

  1. compile:编译范围,指 A 在编译时依赖 B,此范围为默认依赖范围。编译范围的依赖会用在 编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。

  2. provided:provided 依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用, provided 依赖在编译和测试时需要,在运行时不需要,比如:servlet api 被 tomcat 容器提供。

  3. runtime:runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc 的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。

  4. test:test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用, 比如:junit。由于运行时不需要所以 test范围依赖不会被打包。

  5. system:system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中 JAR 文件的路径,需要指定 systemPath 磁盘路径,system依赖不推荐使用。


Maven中的传递性依赖是什么意思?如何解决依赖冲突?

依赖性传递:在项目中,Maven会自动读取所有直接依赖的POM,并把必要的间接依赖以传递性依赖的形式引入

解决依赖冲突:使用标签来排除不需要的依赖

传递性依赖:不管Maven项目存在多少间接依赖,POM 中都只需要定义其直接依赖,不必定义任何间接依赖,Maven会自动读取当前项目各个直接依赖的POM,将那些必要的间接依赖以传递性依赖的形式引入到当前项目中

解决依赖冲突:使用标签来排除不需要的依赖

依赖冲突:多个依赖包含相同库的不同版本时造成了包版本冲突


Maven核心概念模型是哪些

  1. 依赖管理模型:Dependency
  2. 项目对象模型:POM

Mybatis框架执行流程

  1. 读取MyBatis配置文件mybatis-config.xml
  2. 加载映射文件mapper.xml
  3. 定义SQL语句,在上一步的文件中加载
  4. 创建会话工厂SqlSessionFactory
  5. 创建会话SqlSession
  6. 通过Executor操作数据库
  7. 输入参数和输出结果

#{}${}区别

#{}:占位符号

${}:拼接符号,会引用sql注入,不安全

#{}表示一个占位符号

#{}接收输入参数,类型可以是简单类型,pojo、hashmap。

如果接收简单类型,#{}中可以写成value或其它名称。

#{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性…的方式获取对象属性值。

${}表示一个拼接符号,会引用sql注入,所以不建议使用${}。

${}接收输入参数,类型可以是简单类型,pojo、hashmap。

如果接收简单类型,#{}中可以写成value或其它名称。

${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性…的方式获取对象属性值。


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

  1. 在sql语句中给列取属性名的别名
  2. 在sql映射文件中,手动进行表与类,属性与列的映射

mybatis提供了<resultMap>标签进行手动映射


编写sql语句完成如下要求

tb_sales表如下:

Year month amount

1991 1 1.1

1991 2 1.2

1991 3 1.3

1991 4 1.4

1992 1 2.1

1992 2 2.2

1992 3 2.3

1992 4 2.4

查成这样一个结果:

Year m1 m2 m3 m4

1991 1.1 1.2 1.3 1.4

1992 2.1 2.2 2.3 2.4

SQL语句:

select Year,
	sum(if(month = 1,amount,0)) as 'm1',
	sum(if(month = 2,amount,0)) as 'm2',
	sum(if(month = 3,amount,0)) as 'm3',
	sum(if(month = 4,amount,0)) as 'm4'
from tb_sales
group by Year;

SUM()函数:括号内填写列名,对该列中的值进行求和

只能将SUM函数应用于数字列,NULL值也能进行求和但默认为0

IF()函数:括号内有3个参数,判断式、为真值、为假值

IF(condition, value_if_true, value_if_false)

condition:条件表达式,可以是任何返回布尔值(TRUE或FALSE)的表达式。

value_if_true:如果条件表达式为真,则返回的值。

value_if_false:如果条件表达式为假,则返回的值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值