MyBatis-10MyBatis注解方式之Provider注解
【摘要】
概述@SelectProvider
1.开发PrivilegeProvider类2.PrivilegeMapper接口增加接口方法3.单元测试 小结
概述
除了@S...
概述
除了@Select @Insert @Update @Delete四种注解可以使用简单的SQL外,MyBatis还提供了4中Provider注解,分别是 @SelectProvider @InsertProvider @UpdateProvider @DeleteProvider .同样可以实现CRUD操作。
下面通过@SelectProvider来了解下Provider注解方式的基本用法
@SelectProvider
1.开发PrivilegeProvider类
package com.artisan.mybatis.xml.provider;
/**
*
*
* @ClassName: PrivilegeProvider
*
* @Description: 权限Mapper对应的Provider实现
*
* @author: Mr.Yang
*
* @date: 2018年4月19日 上午3:30:41
*/
public class PrivilegeProvider {
/**
*
*
* @Title: selectSysPrivilegeById
*
* @Description: 记得数据库字段和Java实体类属性映射,否则取出的来的是null
*
* @param id
* @return
*
* @return: String
*/
public String selectSysPrivilegeById(Long id) {
return "SELECT id, privilege_name privilegeName, privilege_url privilegeUrl FROM sys_privilege WHERE id = #{id} ";
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
Provider注解中提供了两个必填属性 type和method.
type配置的是一个包含method属性指定方法的类,这个类必须有空的构造函数。 这个方法的值就是要执行的SQL,并且method属性指定的方法返回值必须是String类型。
如果SQL较长后者需要拼接,推荐使用 new SQL(){…}.toString()方法
比如
public String selectSysPrivilegeById(final Long id){
return new SQL(){
{
SELECT("id, privilege_name privilegeName, privilege_url privilegeUrl");
FROM("sys_privilege");
WHERE("id = #{id}");
}
}.toString();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
2.PrivilegeMapper接口增加接口方法
package com.artisan.mybatis.xml.mapper;
import org.apache.ibatis.annotations.SelectProvider;
import com.artisan.mybatis.xml.domain.SysPrivilege;
import com.artisan.mybatis.xml.provider.PrivilegeProvider;
/**
*
*
* @ClassName: PrivilegeMapper
*
* @Description: 演示Provider方式
*
* @author: Mr.Yang
*
* @date: 2018年4月19日 上午3:26:13
*/
public interface PrivilegeMapper {
@SelectProvider(type = PrivilegeProvider.class, method = "selectSysPrivilegeById")
SysPrivilege selectSysPrivilegeById(Long id);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
3.单元测试
package com.artisan.mybatis.xml.mapper;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.Assert;
import org.junit.Test;
import com.artisan.mybatis.xml.domain.SysPrivilege;
public class PrivilegeMapperTest extends BaseMapperTest {
private static final Logger logger = Logger.getLogger(PrivilegeMapperTest.class);
SqlSession sqlSession;
@Test
public void selectSysPrivilegeByIdTest() {
logger.info("selectSysPrivilegeByIdTest");
try {
// 获取SqlSession
sqlSession = getSqlSession();
// 获取接口
PrivilegeMapper privilegeMapper = sqlSession.getMapper(PrivilegeMapper.class);
// 调用接口方法
SysPrivilege sysPrivilege = privilegeMapper.selectSysPrivilegeById((long) 1);
// 期待不为空
Assert.assertNotNull(sysPrivilege);
// 期望为PrivilegeName为"用户管理"
Assert.assertEquals("用户管理", sysPrivilege.getPrivilegeName());
logger.info("sysPrivilege Info:" + sysPrivilege);
} finally {
sqlSession.close();
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
2018-04-19 03:45:47,408 INFO [main] (BaseMapperTest.java:26) - sessionFactory bulit successfully
2018-04-19 03:45:47,412 INFO [main] (BaseMapperTest.java:29) - reader close successfully
2018-04-19 03:45:47,415 INFO [main] (PrivilegeMapperTest.java:19) - selectSysPrivilegeByIdTest
2018-04-19 03:45:47,904 DEBUG [main] (BaseJdbcLogger.java:145) - ==> Preparing: SELECT id, privilege_name privilegeName, privilege_url privilegeUrl FROM sys_privilege WHERE id = ?
2018-04-19 03:45:47,979 DEBUG [main] (BaseJdbcLogger.java:145) - ==> Parameters: 1(Long)
2018-04-19 03:45:48,011 TRACE [main] (BaseJdbcLogger.java:151) - <== Columns: id, privilegeName, privilegeUrl
2018-04-19 03:45:48,011 TRACE [main] (BaseJdbcLogger.java:151) - <== Row: 1, 用户管理, /users
2018-04-19 03:45:48,015 DEBUG [main] (BaseJdbcLogger.java:145) - <== Total: 1
2018-04-19 03:45:48,016 INFO [main] (PrivilegeMapperTest.java:32) - sysPrivilege Info:SysPrivilege [id=1, privilegeName=用户管理, privilegeUrl=/users]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
小结
最常用的注解我们简单的介绍了下使用方式,但是注解方式并不是主流,因此不深究,更多用法请参考MyBatis官方项目的测试用例 11.4章节。
文章来源: artisan.blog.csdn.net,作者:小小工匠,版权归原作者所有,如需转载,请联系作者。
原文链接:artisan.blog.csdn.net/article/details/80006244
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)