mybatis官网中文文档(Mybatis插件和通用Mapper使用)

本文目录
- Mybatis插件和通用Mapper使用
- mybatis+创建文档实例错误
- mybatis传值同时传入list和string该怎么弄
- hibernate和mybatis能放在一起用吗
- “mybatis” 这个单词怎么读
- 关于slf4j不能输出日志到文件,怎么解决
Mybatis插件和通用Mapper使用
1、mybatis执行过程分析
2、mybatis插件
3、通用Mapper使用
1.1 getMapper的到MapperProxy实例:
部分源码:
DefaultSqlSession类:
Configuration类:
MapperRegistry类:
MapperProxyFactory类:
1.2 Executor执行的过程:
部分源码:
MapperProxy类:
MapperMethod类:
DefaultSqlSession类:
BaseExecutor类:执行器的实现类:
SimpleExecutor类:
1.3 执行流程描述
执行器:
SimpleExecutor:默认的执行器
BatchExecutor:批处理的执行器
ReuseExecutor:预处理,重用的执行器
MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:
1、创建拦截器类:
调试效果:
2、在全局配置文件中注册拦截器:
源码分析:
Plugin类:
3、测试;
2.2、pagehelper分页插件使用:
***隐藏网址***
1、引入jar包:
2、注册拦截器:
参考官网用法
3、使用:
通用Mapper简介:
通用Mapper都可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法。
极其方便的使用MyBatis单表的增删改查。
支持单表操作,不支持通用的多表联合查询。
官方文档参考
1、引入依赖:
2、定义实体类型:
泛型实体类的要求:
示例:
3、创建Dao接口:
4、测试:
部分接口说明:
Select
接口:SelectMapper《T》
方法:List《T》 select(T record);
说明:根据实体中的属性值进行查询,查询条件使用等号
接口:SelectByPrimaryKeyMapper《T》
方法:T selectByPrimaryKey(Object key);
说明:根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号
Insert
接口:InsertMapper《T》
方法:int insert(T record);
说明:保存一个实体,null的属性也会保存,不会使用数据库默认值
接口:InsertSelectiveMapper《T》
方法:int insertSelective(T record);
说明:保存一个实体,null的属性不会保存,会使用数据库默认值
Update
接口:UpdateByPrimaryKeyMapper《T》
方法:int updateByPrimaryKey(T record);
说明:根据主键更新实体全部字段,null值会被更新
接口:UpdateByPrimaryKeySelectiveMapper《T》
方法:int updateByPrimaryKeySelective(T record);
说明:根据主键更新属性不为null的值
Example 方法
接口:SelectByExampleMapper《T》
方法:List《T》 selectByExample(Object example);
说明:根据Example条件进行查询
重点:这个查询支持通过Example类指定查询列,通过selectProperties方法指定查询
测试之前的准备:
示例1:根据主键进行查询:
没有设置@Id的结果:
设置@Id后的结果1:
示例2:录入测试:
示例3:query by criteria
查询命令如下:
通用Mapper也可以使用MBG自动生成;
1、Mybatis的执行流程分析
2、Mybatis的插件机制
3、通用Mapper使用
mybatis+创建文档实例错误
如果您在使用MyBatis-Plus创建文档实例时出现错误,可能是以下几个方面导致的:
实体类没有继承父类Model
在使用MyBatis-Plus创建文档实例时,需要保证实体类继承了父类Model,例如:- csharpCopy codepublic class User extends Model《User》 { // ...}
实体类的属性没有添加@TableField注解
在实体类中需要添加@TableField注解,用于指定实体类的属性对应数据库表中的列名,例如:- kotlinCopy codepublic class User extends Model《User》 { @TableField("user_name")
- private String userName; // ...}
实体类的主键没有添加@TableId注解
在实体类中需要添加@TableId注解,用于指定实体类的主键对应数据库表中的主键列名,例如:- kotlinCopy codepublic class User extends Model《User》 { @TableId("id")
- private Long id; // ...}
缺少依赖
使用MyBatis-Plus创建文档实例需要依赖MyBatis-Plus和MyBatis框架,如果您没有正确添加这些依赖,可能会导致出现错误。请确保您的项目中正确添加了以下依赖:- phpCopy code《!-- MyBatis-Plus --》《dependency》
- 《groupId》com.baomidou《/groupId》
- 《artifactId》mybatis-plus-boot-starter《/artifactId》
- 《version》最新版本号《/version》《/dependency》《!-- MyBatis --》《dependency》
- 《groupId》org.mybatis《/groupId》
- 《artifactId》mybatis《/artifactId》
- 《version》最新版本号《/version》《/dependency》
如果您仍然无法解决问题,请提供更具体的错误信息或代码,以便更好地帮助您解决问题。
mybatis传值同时传入list和string该怎么弄
您好,这么弄:
① 现在很多学校的老师都在吃老本,不思进取的,或者停留在理论基础上……
② 网上的很多关于mybatis都是过时的,很多方法都是遗留之前的ibatis。其实官方有翻译的中文文档,多看几遍,你就受益匪浅。
③ 使用Mybatis自带的注解@Param 即可轻松解决你的问题!
public interface UserMapper(){
public List《User》 findByNo(@Param("teacher") String teacher,
@Param("noList") List《String》 noList
)
}
hibernate和mybatis能放在一起用吗
第一章 Hibernate与MyBatis
Hibernate 是当前最流行的O/R mapping框架,它出身于sf.net,现在已经成为Jboss的一部分。 Mybatis 是另外一种优秀的O/R mapping框架。目前属于apache的一个子项目。
***隐藏网址***
***隐藏网址***
1.1 Hibernate 简介
Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。
1.2 MyBatis简介
iBATIS 的着力点,则在于POJO 与SQL之间的映射关系。然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。 相对Hibernate“O/R”而言,iBATIS 是一种“Sql Mapping”的ORM实现。
第二章 开发对比
开发速度
Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。
开发社区
Hibernate 与Mybatis都是流行的持久层开发框架,但Hibernate开发社区相对多热闹些,支持的工具也多,更新也快,当前最高版本4.1.8。而Mybatis相对平静,工具较少,当前最高版本3.2。
开发工作量
Hibernate和MyBatis都有相应的代码生成工具。可以生成简单基本的DAO层方法。
针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。
第三章 系统调优对比
Hibernate的调优方案
制定合理的缓存策略;
尽量使用延迟加载特性;
采用合理的Session管理机制;
使用批量抓取,设定合理的批处理参数(batch_size);
进行合理的O/R映射设计
Mybatis调优方案
MyBatis在Session方面和Hibernate的Session生命周期是一致的,同样需要合理的Session管理机制。MyBatis同样具有二级缓存机制。 MyBatis可以进行详细的SQL优化设计。
SQL优化方面
Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。
Hibernate HQL语句的调优需要将SQL打印出来,而Hibernate的SQL被很多人嫌弃因为太丑了。MyBatis的SQL是自己手动写的所以调整方便。但Hibernate具有自己的日志统计。Mybatis本身不带日志统计,使用Log4j进行日志记录。
扩展性方面
Hibernate与具体数据库的关联只需在XML文件中配置即可,所有的HQL语句与具体使用的数据库无关,移植性很好。MyBatis项目中所有的SQL语句都是依赖所用的数据库的,所以不同数据库类型的支持不好。
第四章 对象管理与抓取策略
对象管理
Hibernate 是完整的对象/关系映射解决方案,它提供了对象状态管理(state management)的功能,使开发者不再需要理会底层数据库系统的细节。也就是说,相对于常见的 JDBC/SQL 持久层方案中需要管理 SQL 语句,Hibernate采用了更自然的面向对象的视角来持久化 Java 应用中的数据。
换句话说,使用 Hibernate 的开发者应该总是关注对象的状态(state),不必考虑 SQL 语句的执行。这部分细节已经由 Hibernate 掌管妥当,只有开发者在进行系统性能调优的时候才需要进行了解。
而MyBatis在这一块没有文档说明,用户需要对对象自己进行详细的管理。
抓取策略
Hibernate对实体关联对象的抓取有着良好的机制。对于每一个关联关系都可以详细地设置是否延迟加载,并且提供关联抓取、查询抓取、子查询抓取、批量抓取四种模式。 它是详细配置和处理的。
而Mybatis的延迟加载是全局配置的。
第五章 缓存机制对比
Hibernate缓存
Hibernate一级缓存是Session缓存,利用好一级缓存就需要对Session的生命周期进行管理好。建议在一个Action操作中使用一个Session。一级缓存需要对Session进行严格管理。
Hibernate二级缓存是SessionFactory级的缓存。 SessionFactory的缓存分为内置缓存和外置缓存。内置缓存中存放的是SessionFactory对象的一些集合属性包含的数据(映射元素据及预定SQL语句等),对于应用程序来说,它是只读的。外置缓存中存放的是数据库数据的副本,其作用和一级缓存类似.二级缓存除了以内存作为存储介质外,还可以选用硬盘等外部存储设备。二级缓存称为进程级缓存或SessionFactory级缓存,它可以被所有session共享,它的生命周期伴随着SessionFactory的生命周期存在和消亡。
MyBatis缓存
MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。MyBatis 3 中的缓存实现的很多改进都已经实现了,使得它更加强大而且易于配置。
默认情况下是没有开启缓存的,除了局部的 session 缓存,可以增强变现而且处理循环 依赖也是必须的。要开启二级缓存,你需要在你的 SQL 映射文件中添加一行: 《cache/》
字面上看就是这样。这个简单语句的效果如下:
映射语句文件中的所有 select 语句将会被缓存。
映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。
缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。
根据时间表(比如 no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序 来刷新。
缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用。
缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而 且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。
所有的这些属性都可以通过缓存元素的属性来修改。
“mybatis” 这个单词怎么读
MyBatis的读音是:,中文音译:麦-波蒂斯,MyBatis的前世是ibatis,这个词是由"internet"和"abatis"组合而成,创始人是Clinton Begin。MyBatis中文官网
关于slf4j不能输出日志到文件,怎么解决
你好,项目采用SpringMVC+Mybatis的架构,日志工具还是最常用的log4j,整合了其他框架之后,发现无法打印SQL语句,然而项目中的显示调用日志却可以正常打印出来,还有当SQL拼写有错误的时候会打印出来
然后开始看Mybatis的官方文档,关于日志这一块是怎么处理的
最近Mybatis有中文文档了,虽然不全,不过已经很好了,这里面发现了项目中存在的问题。项目中引入了shiro框架,集成了slf4j日志,导致了Mybatis无法引用log4j的配置文件打印SQL语句
问题原因:这个是Mybatis默认查找日志的顺序,自上而下,也就是说,如果项目中有前面3个日志框架时,对于Mybatis,log4j就不会生效
SLF4J
Apache Commons Logging
Log4j 2
Log4j
JDK logging
解决办法:在MyBatis的配置文件mybatis-config.xml里面添加一项setting来指定log4j
log4j中对指定内容进行输出,其中example为包名,可以继续细化处理
log4j.logger.example=DEBUG

本文相关文章:
浏览器调用webservice接口(如何通过浏览器发送webservice请求)
2026年9月21日 21:20
sqlserver2000sp4补丁(sqlserver 2000 sp4补丁安装失败)
2026年9月20日 20:50
jsondecodeerror翻译中文(猫和老鼠出现这个json decode error怎么办)
2026年9月10日 05:50
cluster bomb unit(cluster bomb 是什么意思)
2026年9月3日 17:20
js怎么用ajax(js如何通过Ajax的方式提交表单(注意不是以jquery而是以js原生代码的方式提交))
2026年8月26日 15:20
js代码转换jquery工具(js jquery是怎么转换的)
2026年8月26日 05:50
scripture psalms(“christmas worship service” 这个是什么意思,求解释和简单介绍)
2026年8月26日 01:40
更多文章:
avantage怎么设置为中文(Avantage安装丢失GIT)
2026年10月15日 03:00
activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)
2026年10月14日 20:30
excel连接sql数据库教程(excel怎么连接sql数据库)
2026年10月14日 19:40




