selectprovider 分页_MyBatis注解-动态SQL 一个 SqlProvider的demo

Provider动态语言注解

MyBatis提供了多个注解如:@InsertProvider,@UpdateProvider,@DeleteProvider和@SelectProvider,这些都是建立动态语言和让MyBatis执行这些语言。

先贴上代码:这个实现了一个对teacher实体类进行动态的多条件查询

1、新建一个类 TeacherSqlProvider 这个最好这么命名比较符合规范吧

1 public classTeacherSqlProvider {

2

3

4 public String queryStudentByTeacher(Mapmap){

5 BEGIN();

6 SELECT("sname,s.sex,tname");

7 FROM("student s");

8 INNER_JOIN("teacher t on s.tid=t.tid");

9 if(map.get("sname")!=null)

10 WHERE("sname=#{sname}");

11 if(map.get("sex")!=null){

12 WHERE("t.sex=#{sex}");

13 }

14 returnSQL();

15 }

16

17 }

2、在TeacherDao加入查询方法:

1 @SelectProvider(type=TeacherSqlProvider.class,method="queryStudentByTeacher")

2 public List> queryStudentByTeacher(Map map);

这里注意了 我们用map来传递参数(map的key-value格式与json数据格式无缝集成),返回的类型也必须是map

3、在JUnit中测试

1 @Test

2 public voidtestMap(){

3 Map map = new HashMap();

4 map.put("sname", "小明");

5 map.put("sex", "男");

6 List> res = session.getMapper(StudentDao.class).queryScoreByStudent(map);

7 System.out.println(res);

8 }

下面说说@InsertProvider 直接贴上代码吧

1 public String save3(finalDemo demo){

2 return newSQL(){{

3 INSERT_INTO("demo");

4 //多个写法.

5 INTO_COLUMNS("name","email");

6 INTO_VALUES("#{name}","#{email}");

7

8 //条件写法.

9 // if(demo.getName() != null){

10 // VALUES("name","#{name}");

11 // }

12 // if(demo.getEmail() != null){

13 // VALUES("email","#{email}");

14 // }

15

16 }}.toString();

17 }

1 @InsertProvider(type=DemoSqlProvider.class,method="save3")

2 @Options(keyProperty="id",keyColumn="id",useGeneratedKeys=true)

3 public void save3(Demo demo);

@UpdateProvider

1 public String update2(finalDemo demo){

2 return newSQL(){{

3 UPDATE("demo");

4

5 //条件写法.

6 if(demo.getName() != null){

7 SET("name=#{name}");

8 }

9 if(demo.getEmail() != null){

10 SET("email=#{email}");

11 }

12 WHERE("id=#{id}");

13 }}.toString();

14 }

1 @UpdateProvider(type=DemoSqlProvider.class,method="update2")

2 public int update2(Demo demo);

@DeleteProvider

1 publicString delete2(){

2 return newSQL(){{

3 DELETE_FROM("demo");

4 WHERE("id=#{id}");

5 }}.toString();

6 }

1 @UpdateProvider(type=DemoSqlProvider.class,method="delete2")

2 public int delete2(int id);

sql_@SelectProvider及使用注意:

项目中使用了PageHelper 进行分页,与@@SelectProvider这个注解不能一起使用。。

nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'providerTakesParameterObject' in 'class org.apache.ibatis.builder.annotation.ProviderSqlSource'

出现以上问题,是由于我们使用的PageHelper版本导致的,升级版本即可。

1

2 com.github.pagehelper

3 pagehelper

4    4.2.1

5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值