mybatis注解实现动态sql
2019-05-03 20:54
148 查看
在整合ssm的时候,遇到一个多表联合(多表,多条件组合,分页)查询的问题,需要自定义mapper.xml, 但本人又比较反感写xml文件,总感觉配置文件没有注解来的简洁,于是用到了 “注解实现动态sql” ,所以总结一下供日后回顾。
//简单的查询
第一步:定义一个实体类Student用作映射。
public class Student { private Integer id; private String username; private String password; private String addr; //Generate Getter and Setter 此处省略 }
第二步:定义mapper, 在对应接口的类上和方法加对应的注解 type指定生成sql的类,method指定用哪个方法。
/** * Created with IDEA * author:bigStone * Date:2019/5/2 **/ @MapperScan //把Mapper交给spring管理 public interface StudentMapper { @SelectProvider(type = StudentSqlProvider.class, method="select") List<Student> findAll(Student student) throws Exception; @InsertProvider(type = StudentSqlProvider.class , method = "insertStudent" ) void insert(Student student) throws Exception; @DeleteProvider(type = StudentSqlProvider.class, method = "delete") void delete(Student student) throws Exception; @UpdateProvider(type = StudentSqlProvider.class, method = "update") void update(Student student) throws Exception; }
第三步:定义生成sql的类StudentSqlProvider,并定义需要的方法
import org.apache.ibatis.jdbc.SQL; import yycg.base.domain.test.Student; /** * Created with IDEA * author:bigStone * Date:2019/5/2 **/ public class StudentSqlProvider { //插入 public String insertStudent(Student student) { SQL sql = new SQL(); sql.INSERT_INTO("student"); if (student.getId() != null) { sql.VALUES("id", "#{id}"); } if (student.getUsername() != null) { sql.VALUES("username", "#{username}"); } if (student.getPassword() != null) { sql.VALUES("password", "#{password}"); } if (student.getAddr() != null) { sql.VALUES("addr", "#{addr}"); } return sql.toString(); } //查询 public String select(Student student) { return new SQL() {{ SELECT("id, username, password, addr"); FROM("student"); if (student != null) { if (student.getId() != null) { WHERE("id = #{id}"); } if (student.getUsername() != null) { WHERE("username like '%' || #{username} || '%'"); } if (student.getPassword() != null) { WHERE("password = #{password}"); } if (student.getAddr() != null) { WHERE("addr like '%' || #{addr} || '%' "); } } }}.toString(); } //删除 public String delete(Student student) { return new SQL() {{ DELETE_FROM("student"); if (student.getId() != null) { WHERE("id = #{id}"); } }}.toString(); } //更新 public String update(Student student) { return new SQL() {{ UPDATE("student"); if (student.getUsername() != null) { SET("username = #{username}"); } if (student.getPassword() != null) { SET("password = #{password}"); } if (student.getAddr() != null) { SET("addr = #{addr}"); } WHERE("id = #{id}"); }}.toString(); } }
然后调用mapper接口的方法即可.
注意: 模糊查询的时候用 ‘%${param}%’ 发现会出错,后来改用 || 才解决问题。
相关文章推荐
- SpringBoot入门-19(springboot集成mybatis注解形式增删查改properties配置,利用《script》实现动态SQL)
- SpringBoot入门-20(springboot集成mybatis注解形式properties配置,利用@Provider实现动态SQL)
- Mybatis之注解实现动态sql
- MyBatis实现@Select等注解动态组合SQL语句
- mybatis注解实现动态sql
- SpringBoot入门-21(springboot集成mybatis注解形式增删查改properties配置,利用@Provider实现动态SQL)
- mybatis04(注解实现一对一动态sql 的增删改查)
- mybatis3通过provider注解结合动态sql实现增删改查,不再依赖xml成为可能
- oracle+mybatis 使用动态Sql在要insert的字段不确定的情况下实现批量insert
- mybatis03(配置文件实现一对一动态sql 的增删改查)
- mybatis注解动态sql
- MyBatis中用于实现动态SQL
- oracle+mybatis 使用动态Sql在要insert的字段不确定的情况下实现批量insert
- oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
- Springboot + Mybatis (注解+动态Sql)+RESTFUL+thymeleaf
- MyBatis 注解使用动态SQL
- Mybatis 3 注解方式创建动态SQL
- oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
- MyBatis注解应用之动态SQL语句
- 使用Mybatis实现动态SQL(一)