mybatis3中几个@Provider的使用方式
2024-08-31 09:07:53
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方法类中,不要使用重载,也就是说,不要使用方法名相同参数不同的方法。
最新文章
- linux基本知识2
- 基于1.3.3版本tooltip的datagrid单元格tip实现
- CentOS6.3 编译安装LAMP(2):编译安装 Apache2.4.6
- 从HTML原型到jsp页面完美转型攻略(教你即使不会写代码也能弄出漂亮的网页)
- 在VNC中Xfce4中Tab键失效的解决方法
- [转]关于GCD与多线程
- 内核驱动中常见的miscdevice、platform_device、platform_driver
- Java之Arrays.asList陷阱
- clock_gettime测代码运行时间
- 在Ubuntu上安装使用Systemtap
- [Java] Collections - 源代码学习笔记
- Java面向对象基础二
- JAVA经BigDecimal圆角的解决方案及注意事项
- iOS 常用公共方法
- hdu 4747 线段树
- 用Xstream时候遇到的两个小异常
- Python之多线程多进程
- css 实现加载中3个点跳动
- IDEA常用快捷键总结
- Dart 的function
热门文章
- hdu 4865 Peter&;#39;s Hobby(2014 多校联合第一场 E)
- SEAndroid安全机制框架分析
- #leetcode#Anagrames
- leetcode || 56、 Merge Intervals
- 【翻译自mos文章】Oracle GoldenGate 怎么在源头的传输进程和目的端的server/collector进程之间分配 port?
- ubuntu清华源【转】
- hdoj-- Walking Ant
- express 4.2.0 使用session和cookies
- Hdu-6230 2017CCPC-哈尔滨站 A.Palindrome Manacher 主席树
- Redis(一)、Redis五种数据结构