【Smart插件】smart-plugin-mybatis 介绍

喜夏-厌秋 提交于 2019-12-06 03:04:53

smart-plugin-mybatis 是Smart框架的一个Mybatis插件,使用这个插件你可以比较方便的使用Mybatis。

这里主要介绍如何在Smart中使用该插件。

smart-plugin-mybatis插件将mybatis的配置信息从mybatis-config.xml转移到了smart.properties,该插件目前提供了几个主要的配置选项,其他比较常用的会看情况添加。


首先使用Mybatis需要配置数据库连接,在Smart中不需要额外的配置,只需要使用Smart原有的配置内容:

jdbc.type = mysql
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/sample
jdbc.username = root
jdbc.password = root
在Smart中配置的数据库,仍然可以使用Smart自带的DataSet操作数据库。


接下来是Mybatis独有的配置,首先是Mybatis的别名(Aliases)配置,插件支持以下两种别名配置方式:

mybatis.aliases.package.pk1 = com.smart.sample.entity
mybatis.aliases.package.pk2 = com.smart.sample.bean

mybatis.aliases.name.Pro = com.smart.sample.entity.Product
mybatis.aliases.name.Ur = com.smart.sample.entity.User
第一种就是针对包进行别名设置,使用的mybatis.aliases.package.pkgname,这里的 pkgname是为了区分不同的包名,没有其他实际的意义,插件会根据后面的包名对整个包配置别名,会把类名作为别名。多个包可以像上面例子一样配置多个,重名的类会冲突,这一点在使用的时候需要注意。


第二种是针对类进行别名的配置,使用的mybatis.aliases.name.AliasesName,这里的AliasesName是要配置的别名,后面跟的是类的全限定名称。

使用过Mybatis的人应该知道别名的作用,这里在专门说明一下,别名通常是为了方便写代码而配置的,通常会在resultType="Pro",也就是查询的返回结果类型上。如果不用别名,就需要这么写resultType="com.smart.sample.entity.Product",后面这种写法比较麻烦,优点是直观,能直接看到是哪种类型。


接下来是一个很不常用,很少见的Mybatis配置项:

mybatis.logImpl = LOG4J
logImpl是一个很少见的配置,但是这个配置对Mybatis来说,很可能至关重要,可能就是你需要但是又找不到的一个配置选项,一定有不少人遇到过Mybatis无法输出日志的情况,通过配置logImpl能够顺利的解决问题,上面的示例是针对log4j的,如果你有一个log4j.properties文件,只要rootLogger设置为DEBUG你就能看到Mybatis的日志,更多关于该配置的内容参看: http://blog.csdn.net/isea533/article/details/22931341


在Smart中,只需要填写如上的配置即可使用log4j输出日志,除log4j外,还支持以下配置选项:

SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING

除此之外,还可以写自己的实现类,在配置该参数时,需要填写全限定类名。


再来看2个相关的最重要的配置,Mybatis支持Mapper接口形式的调用和xml形式的调用(以及两者的结合,通常是xml通过namespace关联到Mapper接口,通过接口无法找到相应的xml),在Smart中,对这两种形式的配置如下:

##推荐的方式,推荐使用xml形式,多个xml使用逗号(,)隔开,支持文件夹形式.
mybatis.mapper.xml = /mapper,/sys/UserMapper.xml,/sys/RoleMapper.xml

##包扫描只能针对使用Mybatis注解的方法,如使用@Select注解的方法
mybatis.mapper.package = com.smart.sample.mapper
第一个是mybatis.mapper.xml,这个配置用来指定Mybatis加载那些Mybats的xml配置文件,这里可以配置多项,支持文件夹和xml文件两种格式,多项之间使用逗号(,)隔开。这一个配置项也是smart-plugin-mybatis插件首先加载的内容。由于Mybatis对同一个Mapper接口或xml中的namespace+id不允许重复,只会加载一次,由于xml形式更丰富,更常用,并且可以包含接口的形式,因而放在第一位进行加载,这里强烈推荐使用这种配置。


第二个是mybatis.mapper.package,针对Mapper接口类进行扫描,这里也允许多个包名逗号隔开。Mybatis在处理这种情况时,只会处理含有Mybatis注解的方法,如标注了@Select的方法,没有注解的方法调用的时候都会报错(即使在xml里面配置了,这种情况也会失败,因为通过接口无法找到相应的xml)。

这里还有一种没有提到的方式,针对Mapper少的情况可以使用,这就是@Mapper注解,使用@Mapper不带参数的注解时,处理方式和上面的第二个是一样的,只会解决注解的情况。当@Mapper("/sys/UserMapper.xml")这样配置时,插件会优先去加载"/sys/UserMapper.xml",这就和第一种情况一样了,如果接口Mapper和xml一致,那么接口中的注解方法也能识别,可以正常调用。

所以第三种@Mapper注解的方式涵盖了上述两种情况,而且还能省去配置文件,使用注解时,需要注意的是,插件只会检测app.package(smart中的一个基本配置)包下的类。


最后还有一个参数和注解需要说明,在Mybatis中,推荐每一个线程分配一个新的SqlSession,而且用户必须在使用完SqlSession后必须关闭。因而为了方便使用Mybatis,插件提供了一个Aop切面代理类,该切面类会在Smart中自动加载,这个代理会对所有标注了@Service注解(Smart业务层注解)的类进行代理。不需要对该aop代理进行任何配置。这里要说的参数和注解都会对该aop代理行为产生影响。先看如下参数配置:

##mybatis.session.auto - 默认为false,即只有使用注解才会自动处理Mybatis的Session
##                     - 当设置为true的时候,会对所有@Service类的方法进行自动Session处理,即使在不需要使用Mybatis的地方也会触发Session的自动处理,因而强烈不推荐使用该方法
mybatis.session.auto = false
参数mybatis.session.auto默认值为false,这里可以不去配置,当配置为true的时候aop代理会对代理内的所有方法执行代理,每个方法执行的时候都会创建一个SqlSession,退出方法后会自动关闭SqlSession,出现异常时会自动回滚。由于Service中不是每个方法都要使用Mybatis,因而这种方式会影响效率影响数据库的连接。所以这里推荐不设置该参数,而使用@MybatisSession注解。


使用@MybatisSession注解的方法都会被aop代理自动处理SqlSession,另外提醒一下,如果需要在Service方法中调用Service方法,请不要使用该注解(如果调用了一个注解方法,会导致SqlSession关闭),自己手动关闭SqlSession是一种最好的解决办法。


以上内容是smart-plugin-mybatis的配置介绍,下面简单代码说明如何在项目中使用Mybatis,如下:

UserMapper mapper = MybatisHelper.getMapper(UserMapper.class);

推荐使用接口来使用Mybatis,获取mapper之后可以正常调用接口方法。

还有另外一种方式:

MybatisHelper.getSqlSession().selectOne("com.smart.sample.mapper.UserMapper.selectUserById",userid);

以上是Mybatis的两种用法,在Smart中通过MyabtisHelper操作即可。


该插件项目地址:

http://git.oschina.net/free/smart/tree/master/smart-plugin-mybatis


更多有关Smart内容:

http://my.oschina.net/huangyong/blog?catalog=386891

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!