首页 > 编程知识 正文

常见sql语句面试题,sql面试常见问题

时间:2023-05-05 02:39:04 阅读:155811 作者:2797

ResultMap与ResultType之差、ParameterMap与parameterType之差ResultMap和ResultType:

它们都表示查询结果集与java对象之间的关系,处理查询结果集并将其映射到java对象。

resultMap:表示查询结果集中的列映射到bean对象的每个属性,一个对应一个。

使用结果图:

您可以根据需要灵活地更改映射查询结果集中的列标签。 映射关系还允许您使用typeHandler设置对查询结果值进行类型转换,包括布尔类型和0/1类型转换。

ResultType:表示bean中的对象类。 在这种情况下,可以省略resultMap标记的映射,但必须确保查询结果集中的属性与bean对象类中的属性是一一对应的。 在这种情况下,大小写不敏感,但有限制。

使用结果类型:

resultType跟resultMap不能同时存在。

ParameterMap(不推荐使用)和parameterType:

与resultMap方法类似,ParameterMap:意味着查询结果集中的列值类型与java对象属性类型一对一映射,在开发过程中不建议使用。

parameterType:

parameterType会直接自动将查询结果列中的值类型映射到java对象属性类型,从而不再构成映射关系的一对一映射。

mybatis中的#和$的区别1. #将所有读取的数据视为字符串,并在自动读取的数据上加双引号。 例如,对于order by #user_id#,如果传递的值为111,则解析为sql时的值为order by '111 ',如果传递的值为id,则解析的sql为order by 'id '。

2. $将接收到的数据直接显示在sql上并生成。 例如,如果order by $user_id$,则传递的值为111,则解析为sql时的值为order by user_id;如果传递的值为id,则解析的sql为order by id。

3. #方式可以大大防止sql注入。  

4.$方式无法防止Sql注入。

5.$方式一般用于传递数据库对象,例如表名。

6 .普通#能用的就不用$。

如果在MyBatis排序期间使用order by动态参数,请小心,请使用$而不是#

替换字符串

缺省情况下,使用#{}格式的语法时,MyBatis会创建预处理语句的属性,并以此为背景创建安全的值(请参见)。 这是安全、迅速和优先的方法。 您可能希望在SQL语句中插入不直接更改的字符串。 例如,像ORDER BY一样,可以使用:

订单by $ { column name }

在这里,MyBatis不会修改或转义字符串。

重要信息:接受用户输出的字符串并提供给语句中不变的字符串是不安全的。 由于这可能会导致SQL注入攻击,因此不应该允许用户输入这些字段,通常也不应该自己转义和检查这些字段。

JDBC编程有什么缺点? MyBatis是怎么解决这些问题的? 使用数据库连接池会频繁地浪费系统资源,影响系统性能。

解决方案:使用SqlMapConfig.xml配置数据链接池,并使用连接池管理数据库链接。

将sql语句写入代码会导致代码难以维护,实际应用sql时很可能会发生更改。 更改sql需要更改java代码。

解决方案:将Sql语句放在XXXXmapper.xml文件中,使其与java代码分离。

向SQL语句传递参数很麻烦。 SQL语句的where条件不是固定的,因此可以有多也可以有少。 占位符必须与参数一一对应。

解决方案: Mybatis自动将java对象映射到sql语句。

如果分析结果集很麻烦,且sql更改导致分析代码更改,并且需要在分析前进行遍历,则可以将数据库记录封装在pojo对象中进行分析,非常有用。

解决方案: Mybatis会自动将sql执行结果映射到java对象。

MyBatis和Hibernate的区别是什么? Mybatis与hibernate不同,并不完全是ORM框架。 因为Mybatis需要程序员自己编写Sql语句。 但是,Mybatis可以灵活地配置使用XML或注释执行的Sql语句,将java对象映射到Sql语句以生成最终执行的Sql,最后映射Sql执行结果以生成java对象。

Mybatis具有低学习门槛,易学易用,程序员可以直接编写原生态sql,严格控制sql的执行性能,灵活性强,对相关数据模型要求不高的软件开发,如

果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。 
  
    Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的缺点是学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。 
总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。

Mybatis执行批量插入,能返回数据库主键列表吗?

Mybatis在插入单条数据的时候有两种方式返回自增主键:    mybatis3.3.1支持批量插入后返回主键ID,

首先对于支持自增主键的数据库:useGenerateKeys和keyProperty。

不支持生成自增主键的数据库:<selectKey>。

这里主要说下批量插入数据时如何返回主键ID

为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?

答:Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而Mybatis在查询关联对象或关联集合对象时,需要手动编写sql来完成,所以,称之为半自动ORM映射工具。

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。