2024全网Java面试题及答案整理汇总

一、mybatis:

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

1、使用as关键字起别名

 
  1. ​<sql id="Base_Column_List">

  2. <!--数据库种表的字段 as 实体类属性-->

  3. uid as id, userName as name, age as age,

  4. email as email, create_time as createTime,

  5. update_time as updateTime, is_deleted as deleted

  6. </sql>

2、使用resultMap标签映射:column的值为数据库中的字段名,property的值为实体类中的属性名

 
  1. <!-- type:指定需要映射的实体类 -->

  2. <resultMap id="userMap" type="User">

  3. <!-- column:数据库表中的字段名 -->

  4. <!-- property:实体类中的属性 -->

  5. <id column="uid" property="id" />

  6. <result column="userName" property="name" />

  7. <result column="age" property="age" />

  8. <result column="email" property="email" />

  9. <result column="create_time" property="createTime" />

  10. <result column="update_time" property="updateTime" />

  11. <result column="is_deleted" property="deleted" />

  12. </resultMap>

  13. <select id="getUserList" resultMap="userMap">

  14. select uid,userName,age,email,create_time,update_time,is_deleted from t_user;

  15. </select>

2、#{}和${}的区别是什么

#{}是预编译参数占位符,可以防止sql注入。

${}是字符串替换占位符,无法防止sql注入。

sql注入:sql注入是指攻击者向数据库中插入恶意的sql语句,从而来获取或篡改数据库中的数据。

3、Mybatis 分页插件的原理是什么

MyBatis 分页插件的原理是通过拦截 SQL 执行过程,在执行前和执行后对 SQL 进行改写,添加分页相关的语句,实现数据库分页查询功能。

具体原理包括:

1、拦截器:MyBatis 分页插件通过拦截器拦截 Executor 的 query 方法,在执行 SQL 之前和之后进行处理。

2、SQL 改写:在执行前,插件会将原始 SQL 语句改写成分页查询语句,通常是在原始 SQL 后面添加 LIMIT 或 OFFSET 等关键字,限制返回结果的数量。

3、参数处理:插件还会处理分页相关的参数,如页码和每页数据量,以便构建正确的分页查询语句。

4、结果处理:在执行后,插件会对查询结果进行处理,将结果封装成分页对象,包括总记录数、当前页码、每页数据量等信息。

通过以上步骤,MyBatis 分页插件实现了对 SQL 查询结果的分页处理,使得开发者可以方便地进行数据库分页查询。

4、一对一、一对多的关联查询

1、一对一使用association标签

2、一对多使用collection标签

案例:一个商品对应一个价格,一个价格对应多个商品

实体类:

篇幅限制下面就只能给大家展示小册部分内容了。包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题

 需要全套面试笔记的【点击此处即可】即可免费获取

  1. public class Product {

  2. private Long id;

  3. private String name;

  4. private Price price;

  5. // Getters and setters

  6. }

 
  1. public class Price {

  2. private Long id;

  3. private Double value;

  4. private List<Product> products;

  5. // Getters and setters

  6. }

xml:

 
  1. <select id="selectProductWithPrice" resultMap="productWithPrice">

  2. SELECT p.id AS product_id, p.name, pr.id AS price_id, pr.value

  3. FROM product p

  4. LEFT JOIN price pr ON p.id = pr.product_id

  5. </select>

  6. <resultMap id="productWithPrice" type="Product">

  7. <id property="id" column="product_id"/>

  8. <result property="name" column="name"/>

  9. <association property="price" javaType="Price">

  10. <id property="id" column="price_id"/>

  11. <result property="value" column="value"/>

  12. </association>

  13. </resultMap>

 
  1. <select id="selectPriceWithProducts" resultMap="priceWithProducts">

  2. SELECT pr.id AS price_id, pr.value, p.id AS product_

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值