mybatis注解动态sql详解

关于mybatis已经给大家讲过很多次了,下面要接着给大家介绍mybatis注解动态sql的内容,一起来了解一下mybatis注解开发之三种动态sql吧。

1、脚本sql

对于XML配置方式的动态SQL这里的话就不怎么讲了,下面的内容是用1.png的方式将他照搬过来,用注解来实现。

这个比较适用于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工具网的常见问题栏目来进行了解吧。

推荐阅读:

mybatis二级缓存面试大全,mybatis企业必问面试题java

mybatis打印sql语句方法有哪些?具体方法介绍

简述mybatis执行流程都有哪些?