MyBatis提供了多个注解如:@InsertProvider,@UpdateProvider,@DeleteProvider和@SelectProvider,这些都是建立动态语言和让MyBatis执行这些语言。
先贴上代码:这个实现了一个对teacher实体类进行动态的多条件查询
1、新建一个类 TeacherSqlProvider 这个最好这么命名比较符合规范吧
public class TeacherSqlProvider {
public String queryStudentByTeacher(Map map){
BEGIN();
SELECT("sname,s.sex,tname");
FROM("student s");
INNER_JOIN("teacher t on s.tid=t.tid");
if(map.get("sname")!=null)
WHERE("sname=#{sname}");
if(map.get("sex")!=null){
WHERE("t.sex=#{sex}");
}
return SQL();
}
}
2、在TeacherDao加入查询方法:
@SelectProvider(type=TeacherSqlProvider.class,method="queryStudentByTeacher")
public List
3、在JUnit中测试
@Test
public void testMap(){
Map map = new HashMap();
map.put("sname", "小明");
map.put("sex", "男");
List
下面说说@InsertProvider 直接贴上代码吧
public String save3(final Demo demo){
return new SQL(){{
INSERT_INTO("demo");
//多个写法.
INTO_COLUMNS("name","email");
INTO_VALUES("#{name}","#{email}");
//条件写法.
// if(demo.getName() != null){
// VALUES("name","#{name}");
// }
// if(demo.getEmail() != null){
// VALUES("email","#{email}");
// }
}}.toString();
}
@InsertProvider(type=DemoSqlProvider.class,method="save3")
@Options(keyProperty="id",keyColumn="id",useGeneratedKeys=true)
public void save3(Demo demo);
@UpdateProvider
public String update2(final Demo demo){
return new SQL(){{
UPDATE("demo");
//条件写法.
if(demo.getName() != null){
SET("name=#{name}");
}
if(demo.getEmail() != null){
SET("email=#{email}");
}
WHERE("id=#{id}");
}}.toString();
}
@UpdateProvider(type=DemoSqlProvider.class,method="update2")
public int update2(Demo demo);
public String delete2(){
return new SQL(){{
DELETE_FROM("demo");
WHERE("id=#{id}");
}}.toString();
}
@UpdateProvider(type=DemoSqlProvider.class,method="delete2")
public int delete2(int id);
项目中使用了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版本导致的,升级版本即可。
com.github.pagehelper
pagehelper
4.2.1
转自:https://www.cnblogs.com/zyxs/p/8419378.html