ibatis

Mybatis源码之美:2.13.解析databaseIdProvider元素,配置数据库类型唯一标志生成器

梦想的初衷 提交于 2020-08-17 17:00:21
解析databaseIdProvider元素,配置数据库类型唯一标志生成器 mybatis 中定义了一个名为 DatabaseIdProvider 的接口,该接口的作用是获取不同数据源在 mybatis 中的唯一标志。 DatabaseIdProvider 定义了两个方法, setProperties() 方法用于配置自定义属性, getDatabaseId() 方法用于获取指定数据源对应的 databaseId 。 /** * 在需要使用多数据库特性的时候,可以实现该接口来构建自己的DatabaseIdProvider * <p> * @author Eduardo Macarron */ public interface DatabaseIdProvider { // 配置自定义属性 void setProperties(Properties p); /** * 获取指定数据源的databaseId * * @param dataSource 数据源 */ String getDatabaseId(DataSource dataSource) throws SQLException; } 通常来说, setProperties() 方法会在 getDatabaseId() 方法前被调用。 借助于 DatabaseIdProvider 和映射语句中配置的 databaseId

Mybatis日志(5)

泪湿孤枕 提交于 2020-08-17 01:16:36
日志工厂 如果数据库出现异常错误,排错的时候,日志便是最好的工具助手 SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING SLF4J LOG4J 【掌握】 LOG4J2 JDK_LOGGING COMMONS_LOGGING STDOUT_LOGGING 【掌握】 NO_LOGGING 在MyBatis中使用哪个日志实现,在设置中进行配置 标准日志的实现 例如:使用 STDOUT_LOGGING 首先在配置文件中配置日志 <settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> 结果(日志打印): Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter. PooledDataSource forcefully closed/removed all connections. PooledDataSource forcefully closed/removed all connections. PooledDataSource forcefully closed/removed all

mybatis整合 遇见的问题

南笙酒味 提交于 2020-08-15 16:50:57
当sql连接不上的时候,先检查是否是sql连接缺少时区问题,当连接少了?serverTimezone=UTC 会各种错误。 比如遇见到的 Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1c4542cb] was not registered for synchronization because synchronization is not active Mapper method has an unsupported return type: class com.lee.entity.Employee 如果sql语句执行成功,那么只是返回类型出了问题。 出现这样的问题是因为 类型不匹配。 解决方法: insert、delete、update操作默认返回一个int类型的整数,将增删改的接口改成int或者void即可。 select操作返回的类型可以是自定义的Map或者是List(目前遇到的),这里等我总结了resultType相关知识再回来补充! 如果有帮助点个赞,一起学习吧! 来源: oschina 链接: https://my.oschina.net/u/4375750/blog/4326491

Mybatis 和 JPA 选用哪个好

99封情书 提交于 2020-08-15 06:36:24
一、事件起因 关于 Mybatis 和 JPA 孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。 我也看过知乎上一些问答,各有各的理由,感觉都挺有道理。如果让我不带感情色彩地去分辨,其实我也是懵的,因为真的是公说公有理婆说婆有理。 而在国内,不得不承认,用 Mybatis 的公司确实是要比用 JPA 的多,但是在 2015 年以前,用 Hibernate 的公司确实也是很多的。 为什么在国内,会有这样的现象发生? 二、目前生态 在最近(2018)的 JVM 生态报告中 可以看出,Mybatis 的占比只有可怜的 6%,大家看到这个统计结果应该会很吃惊,你会觉得,不对啊,我公司以及我很多朋友都在用 Mybatis 啊,好像没听说过有人用 JPA 的,这个统计结果是错的吧? 再从下面这个对比来看,MyBatis 的关注主要集中在中日韩。 首先,必须指出,对于青年程序员,其实都会质疑这个图的可信度。 中老年程序员都在感叹国外其实更注重开发效率和面向对象的分析和设计。但我可以非常负责任地告诉你,这图是真的。那么,造成这种现象的原因是? 三、国人喜欢 Mybatis 的原因 总结起来,有如下原因: 1.大厂带节奏 国内做互联网的 Java 程序很多都是拷贝阿里的,阿里一开始用例 iBatis,大量的老系统都是基于 iBatis/MyBatis 的

myBatis源码解析-缓存篇(2)

浪尽此生 提交于 2020-08-15 04:02:37
上一章分析了mybatis的源码的日志模块,像我们经常说的mybatis一级缓存,二级缓存,缓存究竟在底层是怎样实现的。此次开始分析缓存模块 1. 源码位置,mybatis源码包位于org.apache.ibatis.cache下,如图 2. 先从org.apache.ibatis.cache下的cache接口开始 // 缓存接口 public interface Cache { // 获取缓存ID String getId(); // 放入缓存 void putObject(Object key, Object value); // 获取缓存 Object getObject(Object key); // 移除某一缓存 Object removeObject(Object key); // 清除缓存 void clear(); // 获取缓存大小 int getSize(); // 获取锁 ReadWriteLock getReadWriteLock(); } mybatis提供了自定义的缓存接口,功能通俗易懂,没什么好解释的。有接口,必然有实现,看一下缓存接口的基本实现类PerpetualCache,所在路径为org.apache.ibatis.cache.impl下。 public class PerpetualCache implements Cache { //

Java路径问题最终解决方案

懵懂的女人 提交于 2020-08-13 17:15:52
前言 Java的路径问题,非常难搞。最近的工作涉及到创建和读取文件的工作,这里我就给大家彻底得解决Java路径问题。 我编写了一个方法,比ClassLoader.getResource(String 相对路径)方法的能力更强。它可以接受“../”这样的参数,允许我们用相对路径来定位classpath外面的资源。这样,我们就可以使用相对于classpath的路径,定位所有位置的资源! Java路径 Java中使用的路径,分为两种:绝对路径和相对路径。具体而言,又分为四种: 一、URI形式的绝对资源路径 如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b URL是URI的特例。URL的前缀/协议,必须是Java认识的。URL可以打开资源,而URI则不行。 URL和URI对象可以互相转换,使用各自的toURI(),toURL()方法即可! 二、本地系统的绝对路径 D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b Java.io包中的类,需要使用这种形式的参数。 但是,它们一般也提供了URI类型的参数,而URI类型的参数,接受的是URI样式的String。因此,通过URI转换,还是可以把URI样式的绝对路径用在java.io包中的类中。 三、相对于classpath的相对路径 如

MybatisPlus SQL 打印控制台

点点圈 提交于 2020-08-12 17:55:54
#applicaton.yml 配置 mybatis-plus: configuration: # 是否将sql打印到控制面板(该配置会将sql语句和查询的结果都打印到控制台) log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #效果: 来源: oschina 链接: https://my.oschina.net/u/4374048/blog/4488438

mybatis源码分析——数据的绑定

大城市里の小女人 提交于 2020-08-12 15:15:35
  orm的演进过程,jdbc——ibatis——mybatis,jdbc最基础的访问数据库的方式,ibatis基于jdbc进行了封装,程序员 可以直接在xml里面写sql,通过调用dao中的方法执行数据库的操作,mybatis省略了dao的步骤,只需要mapper中的方法与 mapper.xml中的sqlId映射上,就可以直接调用。   1:通过mybatis源码看一下mybatis的实现原理 实现原理就是动态代理,动态代理有两种,jdk代理和cglib代理,jdk代理必须基于接口,在内存中动态生成接口的子类来实现 在上一节中,解析mapper.xml的时候会解析命名空间 public void parse() { if (!configuration.isResourceLoaded(resource)) { // 解析sql,生成mapperStatement configurationElement(parser.evalNode("/mapper")); configuration.addLoadedResource(resource); // 解析命名空间,绑定代理工厂 bindMapperForNamespace(); } parsePendingResultMaps(); parsePendingChacheRefs();

Mybatis获取Sqlsession的工具类

笑着哭i 提交于 2020-08-12 05:12:23
package com.jyk.mybatis.util; import java.io.IOException; import java.io.Reader; import java.sql.Connection; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; /* * MyBatis工具类 */ public class MyBatisUtil { private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal <SqlSession> (); private static SqlSessionFactory sqlSessionFactory; // 静态块加载src目录下的mybatis配置文件 static { try { Reader reader = Resources.getResourceAsReader("mybatis.xml" );