mybatis3 中 @Provider 的使用方式

 

若用MyBatis注解方式写sql,又想要XML写法的判断入参拼接条件,可以通过@SelectProvider方式实现。

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

新建Provider

public class RateProvider {private final String table_name = "rate_finish";public String getFinishRate(Map<String, Object> para) {String sql = "SELECT create_at FROM rate_finish WHERE 1=1 ";if (para.get("deviceType") != null ) {sql += "AND device_type = " + para.get("deviceType");}       sql += "ORDER BY homework_type";return sql;}
}

这里的 para 可以通过 key 方式或者 index 方式获取对应参数。

新建Entity

public class RateFinish extends AbstractModel {private int id;private String deviceType;private String level;private String finishCount;private String count;private String homeworkType;private String createAt;

编写 Mapper 接口,使用注解

    @SelectProvider(type = RateProvider.class, method = "getFinishRate")@Results({@Result(property = "homeworkType", column = "homework_type"),@Result(property = "deviceType", column = "device_type"),@Result(property = "level", column = "level"),@Result(property = "finishCount", column = "finish_count"),@Result(property = "count", column = "count"),@Result(property = "createAt", column = "create_at")})List<RateFinish> getFinishRate(@Param("deviceType") String deviceType;

说明:

注解中的参数:type参数指定的Class类,必须要能够通过无参的构造函数来初始化;method参数指定的方法,必须是public的,返回值必须为String,可以为static。

例二

 @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}");}
}
public class SqlProvider {public String deleteUser(int id) {return new SQL() {{DELETE_FROM("USER");WHERE("ID= #{id}");}}.toString();}
}

 上例中定义了一个 Mapper 接口,其中定义了一个 getUser 方法,这个方法根据用户 id 来获取用户信息,并返回相应的 User。而对应的 SQL 语句则写在 SqlProvider 类中。

例三

1)一个参数的@SelectProvide方法
若在getUser方法中,userId使用了@Param注解,那么selectUser方法须以Map<String, Object>为参数:
UserMapper.java:

@SelectProvider(type = SqlProvider.class, method = "selectUser2")
@ResultMap("userMap")
public User getUser(@Param("userId") long userId);

SqlProvider.java:

public String selectUser(Map<String, Object> para) {return "select * from user where userId=" + para.get("userId");
}

2)多参数的@SelectProvide方法
以 Map<String, Object> 为参数,
若有 @Param注解,则参数在 Map中以 @Param的值为 key,如下例中的 userId;
若参数未使用 @Param注解,则参数在 Map中以参数的顺序为 key,如下例中的 password:

UserMapper.java:

 @SelectProvider(type = SqlProvider.class, method = "selectUserCheck")@ResultMap("userMap")public User getUserCheck(@Param("userId") long Id, String password);

SqlProvider.java:

public String selectUserCheck(Map<String, Object> para) {return "select * from user where userId=" +para.get("userId") + " and password='" + para.get("1") + "'";
}

 

注意:在Mapper接口和@SelectProvide方法类中,不要使用重载,也就是说,不要使用方法名相同参数不同的方法 。

 

转自:

https://my.oschina.net/u/1000241/blog/1608635?nocache=1541480270547

http://www.cnblogs.com/JoeyWong/p/9457118.html

https://www.cnblogs.com/he-px/p/7134524.html

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科目三电子路考易错细节总结

小编咨询了多家驾校的教练员&#xff0c;总结了科目三电子路考中&#xff0c;考生犯错率最高的几个细节&#xff0c;下面就一起来看看是哪些吧&#xff0c;希望对还没参加科目三考试的朋友有所帮助。 ●起步前不使用安全带 在等待了约2小时后&#xff0c;考生史某终于坐上了考…

java 查询功能实现的八种方式

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 只是记录一下 1. HQL 2. Mybatis : mapper.xml 中写 sql 。 3. Mybatis : 注解 Select Select("select * from xxx_order wher…

科目三夜考考试内容及过关攻略

驾考科目三夜考&#xff0c;考试内容是什么&#xff1f;夜考到底难不难&#xff1f;具体评判标准是什么&#xff1f;夜考有什么驾驶技巧吗&#xff1f;本文&#xff0c;小编将一一为大家解析&#xff01; ●夜考过关攻略 场外考试的新增内容就是&#xff1a;在夜间和低能见度…

联合索引:创建、删除、查看 (解决报错:Duplicate key name)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 创建联合索引&#xff1a; CREATE INDEX idx_xxx_stitution ON xxx_order (status,institution_code) idx_xxx_stitution &#x…

科目三场外考试易出错的环节

现在很多的城市都已经开始实行电子考试&#xff0c;这使得科目三考试更加公平公正&#xff0c;但还是有考生在考试中忽略了场外易出错的环节导致成绩不合格。●起步前不使用安全带在等待了约2小时后&#xff0c;考生史某终于坐上了考试车。史某很兴奋地调整了座位&#xff0c;观…

FreeSql (八)插入数据时指定列

插入数据时指定列&#xff0c;和忽略列对应&#xff0c;未被指定的列将被忽略。 var connstr "Data Source127.0.0.1;Port3306;User IDroot;Passwordroot;" "Initial Catalogcccddd;Charsetutf8;SslModenone;Max pool size10";IFreeSql fsql new FreeSq…

mybatis 中 Example 的使用 :条件查询、排序、分页(三种分页方式 : RowBounds、PageHelpler 、limit )

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 import tk.mybatis.mapper.entity.Example;import com.github.pagehelper.PageHelper;...Overridepublic List<Repayxxx> listRep…

科目三大路考8个驾驶技巧

驾考科目三考试&#xff0c;大路考的考试内容是什么&#xff0c;有什么考试要点&#xff0c;考试时&#xff0c;有哪些细节要注意&#xff1f;下面&#xff0c;就跟着小编一起来看看吧&#xff01; 科目三大路考驾驶技巧是在实际道路上驾驶机动车进行起步前的准备、起步、通过…

FreeSql (九)删除数据

删除是一个非常危险的操作&#xff0c;FreeSql对删除支持并不强大&#xff0c;仅支持了单表有条件的删除方法。 不想过多的介绍拉长删除数据的系列文章&#xff0c;删除数据的介绍仅此一篇。 若Where条件为空的时候执行方法&#xff0c;FreeSql仅返回0或默认值&#xff0c;不执…

解决: IDEA 代码 commit 后,Local Changes 中代码依旧在,提交失败,报错:is out of date

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 代码提交后 Local Changes 中的代码未消失。查看 Event log 发现提交失败。 如下 红框中位置就是 Event log&#xff0c;或者点击…

FreeSql (十)更新数据

FreeSql支持丰富的更新数据方法&#xff0c;支持单条或批量更新&#xff0c;在特定的数据库执行还可以返回更新后的记录值。 var connstr "Data Source127.0.0.1;Port3306;User IDroot;Passwordroot;" "Initial Catalogcccddd;Charsetutf8;SslModenone;Max po…

科目三的7个小步骤

科目三路考中&#xff0c;做好几个步骤就可以顺利的通过考试了&#xff0c;以下来分享下路考中需要注意的几个点。1、上车前&#xff0c;无论你在车辆的什么位置&#xff0c;请务必从车的右侧绕过车头走到驾驶室门前&#xff0c;先观察车前道路上是否有障碍&#xff0c;再观察车…

解决:The ‘Access-Control-Allow-Origin‘ header contains multiple values‘x, *‘, but only one is allowed.

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 跨域问题报错&#xff1a; Access to XMLHttpRequest at http://xx.xx.xx.xx/getUser from origin http://ergouzi.fun has been bloc…

科目三道路考试技巧流程详解

科目三是公认最难的考试科目&#xff0c;它不像科目二练习是在驾校训练场&#xff0c;有些技术不错的学员也会卡在这个项目上&#xff0c;由于突发状况多&#xff0c;了解考试流程是必不可少的。考试流程&#xff1a;1、上车前的准备工作2、上车起步3、变更车道4、直线行驶5、学…

springbootajaxhas been blocked by CORS policy: No ‘Access-Control-Allow-Origin

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 ajaxspringboot解决跨域问题&#xff0c;以下报的错误就是html跨域的问题 Access to XMLHttpRequest at http://localhost:8080/user/l…

起步前要做哪些准备?

开车前&#xff0c;做好起步的准备工作是必不可少的&#xff0c;有的人可能还不知道开车前要做那些起步工作。一、开车起步前&#xff0c;检查工作不能忘1、检查车子轮胎是否完好&#xff0c;若发现轮胎有损毁&#xff0c;及时更换。2、检查地面是否有会造成伤害的事或物&#…

什么是响应式布局设计

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 看一个例子&#xff1a;Mashable 的首页&#xff1a; 浏览器窗口最大化时&#xff1a; 缩小浏览器窗口&#xff1a; 再缩小&#x…

科目三电子路考细节部分

科目三考试是电子监控&#xff0c;相对之前的考官监考更为严格&#xff0c;没有了考官的提醒&#xff0c;我们更要注意什么&#xff1f;其实电子路考考的就是一种意识&#xff0c;一种安全意识。这也就是为什么在考试之前教练反复强调的不是技巧&#xff0c;而是打转向灯按喇叭…

PHP 与 JSP 比较(PHP、ASP、JSP是什么)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 PHP PHP&#xff08;Hypertext Preprocessor&#xff09;是一种嵌入HTML页面中的脚本语言。它大量地借用C和Perl语言的语法&#xff0c;…

FreeSql (十四)批量更新数据

FreeSql支持丰富的更新数据方法&#xff0c;支持单条或批量更新&#xff0c;在特定的数据库执行还可以返回更新后的记录值。 var connstr "Data Source127.0.0.1;Port3306;User IDroot;Passwordroot;" "Initial Catalogcccddd;Charsetutf8;SslModenone;Max po…