smart-plugin-mybatis 是Smart框架的一个Mybatis插件,使用这个插件你能够比较方便的使用Mybatis。 java
这里主要介绍如何在Smart中使用该插件。 mysql
smart-plugin-mybatis插件将mybatis的配置信息从mybatis-config.xml转移到了smart.properties,该插件目前提供了几个主要的配置选项,其余比较经常使用的会看状况添加。 git
首先使用Mybatis须要配置数据库链接,在Smart中不须要额外的配置,只须要使用Smart原有的配置内容: sql
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是要配置的别名,后面跟的是类的全限定名称。 session
使用过Mybatis的人应该知作别名的做用,这里在专门说明一下,别名一般是为了方便写代码而配置的,一般会在resultType="Pro",也就是查询的返回结果类型上。若是不用别名,就须要这么写resultType="com.smart.sample.entity.Product",后面这种写法比较麻烦,优势是直观,能直接看到是哪一种类型。 mybatis
接下来是一个很不经常使用,不多见的Mybatis配置项: app
mybatis.logImpl = LOG4JlogImpl是一个不多见的配置,可是这个配置对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
除此以外,还能够写本身的实现类,在配置该参数时,须要填写全限定类名。 url
再来看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内容: