avaybatis基础知识总结腾讯云开发者社区

●谈一谈你对ORM的理解?

对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。当然反过来也是可以的,例如将数据库表当中的记录查询出来,然后映射为Java程序中的Java对象。

● 在MyBatis中#{}和${}的区别?

"#{}是预编译处理,${}是字符串替换"。Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;Mybatis在处理时#{},就是把{}替换成变量的值。使用#{}可以有效的防止SQL注入,提高系统安全性。

● 你对MyBatis的一级缓存和二级缓存有了解吗,说一下?

Mybatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存,一级缓存只是相对于同一个SqlSession而言。所以在参数SQL完全一样的情况下,我们使用同一个SqlSession对象调用一个Mapper方法,往往只执行一次SQL,因为使用SqlSession第一次查询后,MyBatis会将其放在缓存中,以后再查询的时候,如果没有声明需要刷新,并且缓存没有超时的情况下,SqlSession都会取出当前缓存的数据,而不会再次发送SQL到数据库。

MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能。SqlSessionFactory层面上的二级缓存默认是不开启的,二级缓存的开启需要进行配置,实现二级缓存的时候,MyBatis要求返回的POJO必须是可序列化的。 也就是要求实现Serializable接口,配置方法很简单,只需要在映射XML文件配置就可以开启缓存了。

由于我们在实际的开发中目前都会使用第三方的缓存技术,例如Redis,所以MyBatis这块的二级缓存没有太多的了解。

● MyBatis一对多你是怎么实现的?

有联合查询和嵌套查询。联合查询是几个表联合查询,只查询一次,通过在resultMap里面配 置collection节点配置一对多的类就可以完成; 嵌套查询是先查一个表,根据这个表里面的结果的外键id再去另外一个表里面查询数据,也是通过配置collection,但另外一个表的查询通过select节点配置。

● MyBatis的parameterType怎么理解的?

parameterType属性用来指定参数类型,parameterType属性是专门用来给sql语句占位符#{}传值的,底层原理使用了反射机制,#{}的大括号当中需要提供实体类的属性名,底层使用属性名拼接get方法来获取属性值,将属性值传递给sql语句。

● MyBatis的resultType是怎么理解的?

resultType用来指定结果集封装的数据类型,当一个select语句查询之后得到结果集,结果集的列名需要和java实体类的属性名一致,不一致的可以使用as关键字给列起别名,拿着列名拼接set方法,通过反射机制调用set方法给结果集对象的属性赋值。

● MyBatis中resultMap用过吗,它是干什么的?

在MyBatis当中,查询结果集被封装为Java对象,可以通过resultType,也可以通过resultMap,在resultMap当中描述了数据库表的列与Java对象的属性之间的对应关系。在映射关系中,还可以通过resultMap的typeHandler设置实现查询结果值的类型转换。另外,最重要的是通过resultMap的子标签比如、等,可以实现一对一、一对多等的映射。

● MyBatis底层实现原理?

MyBatis是一个持久层框架,实现了ORM思想,可以将查询的结果集自动转换成Java对象,也可以将Java对象转换成一条数据插入到数据库表当中。

其实MyBatis设计最牛的地方当然是采用JDK动态代理的方式生成DAO接口的实现类了。其中DAO接口中的每一个方法名对应sql语句的id。DAO接口中的方法不允许重载,因为id是不允许重复的。以上大概就是我了解的MyBatis实现原理。

● 谈谈MyBatis和Hibernate的区别?

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

也正因为MyBatis的sql语句由程序员自己编写,所以sql更容易优化,这也是目前互联网公司使用MyBatis较多的重要原因。

● MyBatis中除了常见的select|insert|update|delete标签之外,还有哪些标签?还有很多其他的标签,加上动态sql的9个标签,trim|where|set|foreach|if|choose|when|otherwise|bind等,其中为sql片段标签,通过标签引入sql片段,为不支持自增的主键生成策略标签。

● 在MyBatis当中,通常一个Mapper映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?

Dao接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Dao接口生成代理proxy对象,代理对象proxy会拦截接口方法,转而执行MappedStatement所代表的sql,然后将sql执行结果返回。

● MyBatis注解用过吗,都有哪些?

到目前为止,我们在项目中还没有使用过MyBatis的注解,因为MyBatis最主要是编写sql语句,sql语句涉及到后期优化,可能会频繁修改,所以我们一直都在使用配置文件的形式。

● Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理吗?

Mybatis动态sql可以让我们在Xml映射文件内以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能,Mybatis提供了9种动态sql标签trim|where|set|foreach|if|choose|when|otherwise|bind。其执行原理为,使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql,以此来完成动态sql的功能。

● Mybatis是如何将sql执行结果封装为目标对象并返回的?

第一种是使用resultMap,逐一定义列名和对象属性名之间的映射关系。第二种是使用resultType,使用sql列的别名功能,将列别名书写为对象属性名。

● MyBatis接口Mapper中的方法能够重载吗?

● 在MyBatis当中,给sql语句传值,你知道哪几种方式?

通过POJO(Javabean)可以传值,但要求#{}的大括号当中提供POJO的属性名。如果没有合适的POJO,可以使用Map集合进行传值,但要求#{}的大括号当中提供Map集合的key。如果DAO接口的方法参数有多个,并且数量不多,而且每个都是简单类型,也可以通过#{arg0}、#{arg1}的方式传参。

●Mybatis是如何进行分页的?分页插件的原理是什么?Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。

THE END
0.数据库基础与SQL基础知识看这篇就够了!主键外键次要键数据库基础与SQL基础知识看这篇就够了! 一.数据库简介 1. DBMS(DataBaseManagement System,数据库管理系统)和数据库数据库Schema有两种含义,一种是概念上的Schema,指的是一组DDL语句集,该语句集完整地描述了数据库的结构。还有一种是物理上的Schema,指的是数据库中的一个名字空间,它包含一组表、视图和存储过程jvzquC41dnuh0lxfp0tfv8HUFPe`aU^[1cxuklqg1fkucrqu17867=>78
1.SQLServer数据库入门学习总结MsSqlSQLServer数据库学习总结 1.SQL基础 SQL Server2000安装、配置,服务器启动、停止,企业管理器、查询分析器 第一代数据库--网状数据库和层次数据库;第二代数据库--关系数据库 数据库(DB);数据库管理系统(DBMS);数据库系统(DBS) SQL Server 2000 提供了不同版本:企业版、标准版、个人版、开发版 jvzquC41yy}/lk:30pku1jwvkerf1<5;6:4ivv
2.SQL的基础知识汇总sql知识SQL 的基础知识汇总 一、数据库基本概念 数据库(Database):是数据的集合,存储在计算机系统中,用于管理和组织数据。可以包含多个表、视图、存储过程等对象。 表(Table):由行和列组成的数据结构,用于存储特定类型的数据。每一列代表一个属性,每一行代表一条记录。jvzquC41dnuh0lxfp0tfv8r2a7=95?7471gsvrhng1jfvjnnu1754?=796=
3.数据库知识点汇总(最全!!)数据库知识点总结归纳数据库学习3、DCL(Data Control Language):数据控制语句,用于定义用户的访问权限和安全级别。 DML DML用于查询与修改数据记录,包括如下SQL语句: INSERT:添加数据到数据库中 UPDATE:修改数据库中的数据 DELETE:删除数据库中的数据 SELECT:选择(查询)数据 SELECT是SQL语言的基础,最为重要。 jvzquC41dnuh0lxfp0tfv8r2a7?23@6341gsvrhng1jfvjnnu1749?=598<
4.SQL数据库的基础知识点总结skrrrr!SQL数据库的基础知识点总结 skrrrr! 本文深入探讨SQL数据库系统,涵盖系统数据库的功能、数据文件与日志文件的管理,以及SQL语言的基础操作。详解数据查询语句的结构,包括单表与多表连接查询、数据的分组与排序,聚合函数的使用,以及高级查询如CASE函数和子查询的应用。适合初学者和进阶学习者掌握SQL核心技能。jvzquC41dnuh0lxfp0tfv8vsa6;729>241gsvrhng1jfvjnnu1718<8884=