关于mybatis已经给大家讲过很多次了,下面要接着给大家介绍mybatis注解动态sql的内容,一起来了解一下mybatis注解开发之三种动态sql吧。
1、脚本sql
对于XML配置方式的动态SQL这里的话就不怎么讲了,下面的内容是用的方式将他照搬过来,用注解来实现。
这个比较适用于xml配置转换到注解配置。
其实,可以很明显的看出,在java当中写xml可读性和维护性真的是比较的差的,尤其是在SQL非常长的时候,超级的麻烦。
2、在方法中构建sql
这里的话,我们借用内部类来生成动态SQL。
增改删有对应的@InsertProvider、@UpdateProvider、@DeleteProvider。
这样的话会更加的清晰一些,它比较的适合用于查询语句不是特别的长,条件不多的场景。
但是,在写非常长的SQL的时候,这样的方式也是会比较的麻烦,写到不想写了。
@Mapper public interface MybatisDao { //使用UserDaoProvider类的findUserById方法来生成sql @SelectProvider(type = UserDaoProvider.class, method = "findUserById") public List < User > findUserById(User user); class UserDaoProvider { public String findUserById(User user) { String sql = "SELECT * FROM user"; if (user.getId() != null) { sql += " where id = #{id}"; } return sql; } }
3、结构化SQL
这里的话,将前面的内部类进行了一下改造。
public String findUserById(User user) { return new SQL() { { SELECT("id,name"); SELECT("other"); FROM("user"); if (user.getId() != null) { WHERE("id = #{id}"); } if (user.getName() != null) { WHERE("name = #{name}"); } //从这个toString可以看出,其内部使用高效的StringBuilder实现SQL拼接 } }.toString(); }
上面的一些例子都只是一些很基础的用法介绍,假如你还想了解更多的用法,请继续关注奇Q工具网的常见问题栏目来进行了解吧。
推荐阅读: