Mybatis(十一)注解配置SQL映射器(二)
2016-03-20 14:53
295 查看
有时候我们需要根据输入条件动态地构建SQL语句。Mybatis提供了各种注解比如InsertProvider等来构建SQL语句。
在我们的Mapper中有如下操作:
这里我们使用了@SelectProvider来指定一个类,及其内部的方法的方法,用来提供需要执行的SQL语句。
这里使用字符串构建SQL语句是非常困难的,并且容易出错。所以Mybatis提供了一个SQL工具类不使用字符串拼接的方式,简化构造动态SQL语句。如下
如果有多个参数可以采取用Map装载:
@SelectProvider
创建一个SqlProvider类,以及提供Sql的方法。public class TutorDynaSqlProvider { public String findTutorByIdSql(int tutorId) { return "SELECT TUTOR_ID AS tutorId, NAME, EMAIL FROM TUTORS WHERE TUTOR_ID=" + tutorId; } }
在我们的Mapper中有如下操作:
@SelectProvider(type=TutorDynaSqlProvider.class, method="findTutorByIdSql") Tutor findTutorById(int tutorId);
这里我们使用了@SelectProvider来指定一个类,及其内部的方法的方法,用来提供需要执行的SQL语句。
这里使用字符串构建SQL语句是非常困难的,并且容易出错。所以Mybatis提供了一个SQL工具类不使用字符串拼接的方式,简化构造动态SQL语句。如下
public class TutorDynaSqlProvider { public String findTutorByIdSql(final int tutorId) { return new SQL() { { SELECT("tutor_id as tutorId, name, email"); FROM("tutors"); WHERE("tutor_id=" + tutorId); } } .toString(); } }
如果有多个参数可以采取用Map装载:
@SelectProvider(type = TutorDynaSqlProvider.class, method = "findTutorByNameAndEmailSql") Tutor findTutorByNameAndEmail(String name, String email); public String findTutorByNameAndEmailSql(Map<String, Object> map) { String name = (String) map.get("param1"); String email = (String) map.get("param2"); //you can also get those values using 0,1 keys //String name = (String) map.get("0"); //String email = (String) map.get("1"); return new SQL() { { SELECT("tutor_id as tutorId, name, email"); FROM("tutors"); WHERE("name=#{name} AND email=#{email}"); } } .toString(); }对于我们join,orderby和groupby:
public class TutorDynaSqlProvider { public String selectTutorById() { return new SQL() { { SELECT("t.tutor_id, t.name as tutor_name, email"); SELECT("a.addr_id, street, city, state, zip, country"); SELECT("course_id, c.name as course_name, description, start_date, end_date"); FROM("TUTORS t"); LEFT_OUTER_JOIN("addresses a on t.addr_id=a.addr_id"); LEFT_OUTER_JOIN("courses c on t.tutor_id=c.tutor_id"); WHERE("t.TUTOR_ID = #{id}"); } } .toString(); } }
相关文章推荐
- Mysql之创建表
- mysql(一)
- Oracle 11g ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
- mysql如何修改uft8,完美支持中文
- Redis事件管理(三)
- Mybatis(十)-注解配置SQL映射器(一)
- MYSQL to_days(date)用法
- MongoDB ObjectId
- Mysql 5.7.11压缩版安装及问题解决
- SQL SERVER 系统库查询
- Session共享之Memcached部署
- MongoDB监控
- MySQL服务正在启动,MSQL服务无法启动,服务没有报告任何错误。
- 扒扒数据库长长知识(下载资源组合看day2)之10(创建和管理表DDL)
- mysql 怎样清空一个数据库中的所有表
- 扒扒数据库长长知识(下载资源组合看day2)之09 (DML语言)
- 扒扒数据库长长知识(下载资源组合看day2)之08 (集合运算)
- MySQL 查看约束,添加约束,删除约束 添加列,修改列,删除列
- mysql 主从复制 主主配置
- Redis集群功能配置以及Redis Sentinel配置