文档章节

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

Liuzh_533
 Liuzh_533
发布于 2014/04/09 21:29
字数 1908
阅读 696
收藏 10

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

© 著作权归作者所有

Liuzh_533

Liuzh_533

粉丝 790
博文 21
码字总数 40530
作品 5
石家庄
程序员
私信 提问
加载中

评论(3)

Liuzh_533
Liuzh_533 博主

引用来自“linapex”的评论

好像很麻烦的样子。
建议,myBatis 的 xml文件可以通过扫描目录自动导入,我实现过,共勉。
并不麻烦,只是太灵活。。
linapex
linapex
好像很麻烦的样子。
建议,myBatis 的 xml文件可以通过扫描目录自动导入,我实现过,共勉。
黄勇
黄勇
感谢兄弟对 Smart 开源项目所作出的贡献!期待将来有更好的合作。
黄勇/smart-framework

Smart Framework 简介 1. 它是一款轻量级 Java Web 框架 内置 IOC、AOP、ORM、DAO、MVC 等特性 基于 Servlet 3.0 规范 使用 Java 注解取代 XML 配置 2. 它使应用充分做到“前后端分离” 客户...

黄勇
2013/09/23
0
0
Cache Plugin 实现过程

本文是《轻量级 Java Web 框架架构设计》的系列博文。 前几天写过一篇文章,关于如何实现 Cache Plugin,错过的朋友可以看这篇:《能否让 Cache 变得更加优雅?》。 今天,我想和大家分享一下...

黄勇
2013/11/07
2.2K
4
Eclipse轻松玩转SmartFramework

SmartFramework框架和 SmartSample都是使用Maven构建,使用IDEA开发的。对于像我这样使用Eclipse,又不熟悉Maven的人来说,想玩转smart多少有些难度。这里是我在Eclipse中运行smart-sample的...

大漠真人
2013/11/24
1K
2
Smart Framework v2.3 发布

历时一个多月,Smart Framework v2.3 终于发布了! 在该版本中,主要对代码进行了重构,让结构更加清晰,职责更加合理。在框架中对外暴露了一些接口,框架自身提供了一个默认的实现,这样非常...

黄勇
2014/06/04
7.7K
12
Elasticsearch 使用中文分词

原文出处:Way Lau 本文演示了如何使用IK Analysis 插件来实现在 Elasticsearch 中的中文分词功能。 使用中文分词 在“Spring Boot应用企业级博客系统”课程中(http://coding.imooc.com/cla...

Way Lau
2017/12/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS 7 搭建源码包搭建LNMP环境

1,安装epel源 yum install -y epel-release 2, 安装需要的软件 yum install -y gcc automake autoconf libtool make gcc-c++ glibc libxslt-devel \libjpeg libjpeg-devel libpng libpng......

hansonwong
50分钟前
7
0
基于 K8s 做应用发布的工具那么多, 阿里为啥选择灰姑娘般的 Tekton ?

作者 | 邓洪超,阿里云容器平台工程师, Kubernetes Operator 第二人,云原生应用标准交付与管理领域知名技术专家 导读:近年来,越来越多专门给 Kubernetes 做应用发布的工具开始缤纷呈现,...

阿里巴巴云原生
52分钟前
4
0
ZStack的普惠云计算到底是“随大流”还是真功夫?(转自社区)

作为一名深耕技术圈的“老男人”,也算是经历过云计算领域的成长。近些年云计算技术不断成熟,百行百业开始云上之路,各大云计算厂商开始逐渐意识到云计算是一项“普惠”技术。 我一直很看好...

ZStack社区版
53分钟前
5
0
一个备份MySQL数据库的简单Shell脚本

Shell脚本是我们写不同类型命令的一种脚本,这些命令在这一个文件中就可以执行。我们也可以逐一敲入命令手动执行。如果我们要使用shell脚本就必须在一开始把这些命令写到一个文本文件中,以后...

旺仔大战肥五花
57分钟前
3
0
TiDB Binlog 源码阅读系列文章(四)Pump server 介绍

作者: satoru 在 上篇文章 中,我们介绍了 TiDB 如何通过 Pump client 将 binlog 发往 Pump,本文将继续介绍 Pump server 的实现,对应的源码主要集中在 TiDB Binlog 仓库的 pump/server.go...

TiDB
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部