尚医通项目总结(二)-Mybatis与Mybatis Plus

Mybatis是持久层解决方案,它是一个半自动化的ORM框架,底层封装了JDBC,可以简化对数据库的增删改查操作。Mybatis的半自动体现在,在查询关联对象或者关联集合对象时,需要手动编写sql来完成。

Mybatis-Plus是Mybatis的增强工具,是为简化开发、提高效率而生的。使用mp不用写sql语句也不用写xml文件,直接新建接口继承BaseMapper,使用时直接调用BaseMapper中封装好的方法即可。简单的条件查询可以直接使用封装好的方法,当条件复杂时,可以使用QuerryMapper写条件语句。

本人目前的面试中没有遇到过与项目结合的问题,都是一些常见的问题,在此列出,以供交流学习。

{}是预编译处理,${}是字符串替换。

Mybatis在处理#{}时,会将sql中的#{}替换为?,调动PreparedStatement的set方法赋值;在处理${}时就是将其替换成变量的值。因此使用#{}可以防止SQL注入,提高系统的安全性,而${}则会造成SQL注入问题。

1)一级缓存:基于PerpetualCache的HashMap本地缓存,其缓存作用域为Session,当Session flush或close之后,该Session中的所有Cache就将清空,默认打开一级缓存。

2)二级缓存:二级缓存和一级缓存的机制相同,区别在于缓存作用域,其缓存作用域为Mapper(Namespace),并且可以自定义存储源,如Ehcache。默认不打开二级缓存,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置

3)对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存Namespaces)进行了 C/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear。

Dao 接口,就是人们常说的 Mapper 接口,接口的全限名,就是映射文件中的 namespace 的值,接口的方法名,就是映射文件中 MappedStatement 的 id 值,接口方法内的参数,就是传递给 sql 的参数。 Mapper 接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为 key 值,可唯一定位一个 MappedStatement ,举例: com.mybatis3.mappers. StudentDao.findStudentById ,可以唯一找到 namespace 为 com.mybatis3.mappers. StudentDao 下面 id = findStudentByIdMappedStatement 。在 MyBatis 中,每一个 <select></select><insert></insert><update></update><delete></delete> 标签,都会被解析为一个 MappedStatement 对象。

Dao接口里的方法可以重载,但是Mybatis的XML里的ID不允许重复。

Dao接口方法可以重载,但是需要满足以下条件:

1.仅有一个有参方法和一个午餐方法

2.多个有参方法时,参数数量必须一致。且使用相同的@Param,或者使用param1这种。

Original: https://www.cnblogs.com/boboray/p/16287429.html
Author: 啵啵ray
Title: 尚医通项目总结(二)-Mybatis与Mybatis Plus

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/685820/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球