【Java经典面试题系列】4.SSM常见面试题

Q1:Mybatis 的优缺点?

优点

相⽐ JDBC 减少了⼤量代码量,减少冗余代码。

使⽤灵活,SQL 语句写在 XML ⾥,从程序代码中彻底分离,降低了耦合度,便于管理。

提供 XML 标签,⽀持编写动态 SQL 语句。

提供映射标签,⽀持对象与数据库的 ORM 字段映射关系。

缺点

SQL 语句编写⼯作量较⼤,尤其是字段和关联表多时。

SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

Q2:Mybatis XML ⽂件有哪些标签属性?

select 、 insert 、 update 、 delete 标签分别对应查询、添加、更新、删除操作。

parameterType 属性表示参数的数据类型,包括基本数据类型和对应的包装类型、String 和 Java

Bean 类型,当有多个参数时可以使⽤ #{argn} 的形式表示第 n 个参数。除了基本数据类型都要以全

限定类名的形式指定参数类型。

resultType 表示返回的结果类型,包括基本数据类型和对应的包装类型、String 和 Java Bean 类型。

还可以使⽤把返回结果封装为复杂类型的 resultMap 。

Q3:Mybatis 的⼀级缓存是什么?

⼀级缓存是 SqlSession 级别,默认开启且不能关闭。

操作数据库时需要创建 SqlSession 对象,对象中有⼀个 HashMap 存储缓存数据,不同 SqlSession 之

间缓存数据区域互不影响。

⼀级缓存的作⽤域是 SqlSession 范围的,在同⼀个 SqlSession 中执⾏两次相同的 SQL 语句时,第⼀次

执⾏完毕会将结果保存在缓存中,第⼆次查询直接从缓存中获取。

如果 SqlSession 执⾏了 DML 操作(insert、update、delete),Mybatis 必须将缓存清空保证数据有

效性。

Q4:Mybatis的⼆级缓存是什么?

⼆级缓存是Mapper 级别,默认关闭。

使⽤⼆级缓存时多个 SqlSession 使⽤同⼀个 Mapper 的 SQL 语句操作数据库,得到的数据会存在⼆级

缓存区,同样使⽤ HashMap 进⾏数据存储,相⽐于⼀级缓存,⼆级缓存范围更⼤,多个 SqlSession

可以共⽤⼆级缓存,作⽤域是 Mapper 的同⼀个 namespace,不同 SqlSession 两次执⾏相同的

namespace 下的 SQL 语句,参数也相等,则第⼀次执⾏成功后会将数据保存在⼆级缓存中,第⼆次可

直接从⼆级缓存中取出数据。

要使⽤⼆级缓存,需要在全局配置⽂件中配置

,再在对应的映射⽂件中配置⼀个 标签。

Q5:Mybatis #{} 和${} 的区别?

使⽤ ${} 相当于使⽤字符串拼接,存在 SQL 注⼊的⻛险。

使⽤ #{} 相当于使⽤占位符,可以防⽌ SQL 注⼊,不⽀持使⽤占位符的地⽅就只能使⽤ ${} ,典型

情况就是动态参数。

Q6:ORM 是什么?

ORM 即 Object-Relational Mapping ,表示对象关系映射,映射的不只是对象的值还有对象之间的关

系,通过 ORM 就可以把对象映射到关系型数据库中。操作实体类就相当于操作数据库表,可以不再重

点关注 SQL 语句。

Q7:JPA如何使⽤?

只需要持久层接⼝继承 JpaRepository 即可,泛型参数列表中第⼀个参数是实体类类型,第⼆个参数是

主键类型。

运⾏时通过 JdkDynamicAopProxy 的 invoke ⽅法创建了⼀个动态代理对象

SimpleJpaRepository , SimpleJpaRepository 中封装了 JPA 的操作,通过 hibernate (封装了

JDBC)完成数据库操作。

Q8:JPA 实体类相关注解有哪些?

@Entity :表明当前类是⼀个实体类。

@Table :关联实体类和数据库表。

@Column :关联实体类属性和数据库表中字段。

@Id :声明当前属性为数据库表主键对应的属性。

@GeneratedValue : 配置主键⽣成策略。

@OneToMany :配置⼀对多关系,mappedBy 属性值为主表实体类在从表实体类中对应的属性名。

@ManyToOne :配置多对⼀关系,targetEntity 属性值为主表对应实体类的字节码。

@JoinColumn :配置外键关系,name 属性值为外键名称,referencedColumnName 属性值为主表主

键名称。

Q9:对象导航查询是什么?

通过 get ⽅法查询⼀个对象的同时,通过此对象可以查询它的关联对象。

对象导航查询⼀到多默认使⽤延迟加载的形式,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌风_Java高性能架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值