MyBatis-10MyBatis注解方式之Provider注解

举报
小工匠 发表于 2021/09/11 00:33:42 2021/09/11
【摘要】 概述@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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。