mybatis3中几个@Provider的使用方式
Mybatis的原身是ibatis,现在已经脱离了apache基金会,新官网是http://www.mybatis.org/。Mybatis3中增加了使用注解来配置Mapper的新特性,这里主要介绍@SelectProvider、@UpdateProvider、@InsertProvider和@DeleteProvider的使用方式
这几个注解声明在Mapper对应的interface的方法上的,注解用于生成查询用的sql语句。如果对应的Mapper中已使用@Param来注解参数,则在对应的Prodiver的方法中无需写参数。
注解中的参数:
type参数指定的Class类,必须要能够通过无参的构造函数来初始化;
method参数指定的方法,必须是public的,返回值必须为String,可以为static。
一、@SelectProvider
@ResultMap注解用于从查询结果集RecordSet中取数据然后拼装实体bean。
public interface UserMapper {
@SelectProvider(type = SqlProvider.class, method = "selectUser")
@ResultMap("userMap")
public User getUser(long userId);
}
public class SqlProvider {
public String selectUser(long userId){
SELECT("id, name, email");
FROM("USER");
WHERE("ID = #{userId}");
}
}
上例中定义了一个Mapper接口,其中定义了一个getUser方法,这个方法根据用户id来获取用户信息,并返回相应的User。而对应的SQL语句则写在SqlProvider类中。
二、@InsertProvider
public interface UserMapper {
@InsertProvider(type = SqlProvider.class, method = "addUser")
@Options(useGeneratedKeys = true, keyProperty = "id")
int addUser(Tutor tutor);
}
public class SqlProvider {
public String addUser(User user) {
return new SQL() {
{
INSERT_INTO("USER");
if (user.getName() != null) {
VALUES("NAME", "#{name}");
}
if (user.getEmail() != null) {
VALUES("EMAIL", "#{email}");
}
}
}.toString();
}
}
三、@UpdateProvider
public interface UserMapper {
@UpdateProvider(type = SqlProvider.class, method = "updateUser")
int updateUser(User user);
}
public class SqlProvider {
public String updateUser(User user) {
return new SQL() {
{
UPDATE("USER");
if (user.getName() != null) {
SET("NAME = #{name}");
}
if (user.getEmail() != null) {
SET("EMAIL = #{email}");
}
WHERE("ID= #{id}");
}
}.toString();
}
}
四、@DeleteProvider
public interface UserMapper {
@DeleteProvider(type = SqlProvider.class, method = "deleteUser")
int deleteUser(int id);
}
public class SqlProvider {
public String deleteUser(int id) {
return new SQL() {
{
DELETE_FROM("USER");
WHERE("ID= #{id}");
}
}.toString();
}
}
注意:在Mapper接口和@SelectProvide方法类中,不要使用重载,也就是说,不要使用方法名相同参数不同的方法。
mybatis3中几个@Provider的使用方式的更多相关文章
- mybatis3中@SelectProvider的使用技巧
mybatis的原身是ibatis,现在已经脱离了apache基金会,新官网是http://www.mybatis.org/. mybatis3中增加了使用注解来配置Mapper的新特性,本篇文章主要 ...
- 转:mybatis3中@SelectProvider的使用技巧
mybatis3中@SelectProvider的使用技巧 mybatis的原身是ibatis,现在已经脱离了apache基金会,新官网是http://www.mybatis.org/. mybati ...
- 64位环境中使用SQL查询excel的方式解决
--64位环境中使用SQL查询excel的方式 环境: OS:Windows Server 2008 R2 Enterprise MSSQL:Microsoft SQL Server 2008 R2 ...
- Spring RestTemplate中几种常见的请求方式GET请求 POST请求 PUT请求 DELETE请求
Spring RestTemplate中几种常见的请求方式 原文地址: https://blog.csdn.net/u012702547/article/details/77917939 版权声明 ...
- linux内核分析作业4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
系统调用:库函数封装了系统调用,通过库函数和系统调用打交道 用户态:低级别执行状态,代码的掌控范围会受到限制. 内核态:高执行级别,代码可移植性特权指令,访问任意物理地址 为什么划分级别:如果全部特权 ...
- 修改win7电脑中所有文件的默认查看方式
怎么修改win7电脑中所有文件的默认查看方式 如何设置才可以得到如下的效果:比如说打开一个盘符或者一个文件夹,进行设置之后,这个盘符里或者这个文件夹下的所有子文件夹.所有子文件夹里的所有文件都以“ ...
- 详细讲解nodejs中使用socket的私聊的方式
详细讲解nodejs中使用socket的私聊的方式 在上一次我使用nodejs+express+socketio+mysql搭建聊天室,这基本上就是从socket.io的官网上的一份教程式复制学习,然 ...
- JavaScript学习12 JS中定义对象的几种方式
JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...
- Oracle中“行转列”的实现方式
在报表的开发当中,难免会遇到行转列的问题. 以Oracle中scott的emp为例,统计各职位的人员在各部门的人数分布情况,就可以用“行转列”: scott的emp的原始数据为: EMPNO ENAM ...
随机推荐
- event.currentTarget与event.target的差别介绍
event.currentTarget与event.target的差别想大家在使用的时候不是非常在意.本文以測试代码来解说它门之间的不同.即,event.currentTarget指向事件所绑定的元素 ...
- BZOJ 1455 罗马游戏 左偏树
题目大意:给定n个点,每一个点有一个权值,提供两种操作: 1.将两个点所在集合合并 2.将一个点所在集合的最小的点删除并输出权值 非常裸的可并堆 n<=100W 启示式合并不用想了 左偏树就是快 ...
- Cocos2d-x 3.0final 终结者系列教程02-开发环境的搭建
本文主要以Mac平台和XCode5为基本系统环境和C++编程工具来介绍Cocos2d-x3.0final版的安装. 一.系统准备(预计要花掉半个月工资) MacBook Pro一台(本人的比較老.11 ...
- HDU 5218 The E-pang Palace (简单几何—2014广州现场赛)
题目链接:pid=5128">http://acm.hdu.edu.cn/showproblem.php? pid=5128 题面: The E-pang Palace Time Li ...
- c19---指针和字符串
// // main.c // 指针和字符串 // // Created by xiaomage on 15/6/14. // Copyright (c) 2015年 xiaomage. All ri ...
- git分支演示
https://learngitbranching.js.org https://github.com/pcottle/learnGitBranching no demo模式可以随便玩 https:/ ...
- 【转】ios蓝牙开发学习笔记(四)ios蓝牙应用的后台处理 -- 不错
原文网址:http://dev.ailab.cn/article-1038-220511-1.html 默认情况下,当应用进入后台或挂起时,蓝牙任务是不执行的.但是,你可以把应用声明为支持蓝牙后台执行 ...
- [Pulgin] jQuery插件之ajaxFileUpload
一.ajaxFileUpload是一个异步上传文件的jQuery插件. 传一个不知道什么版本的上来,以后不用到处找了. 语法:$.ajaxFileUpload([options]) options参数 ...
- C - Puzzles
Problem description The end of the school year is near and Ms. Manana, the teacher, will soon have t ...
- WordPress的wordfence插件的设置方法