`

mybatis 注解动态sql

阅读更多
之前学习的mybatis都是采用xml方式进行sql的解析。
最近看了下使用annotation的方式进行数据库sql语句封装。
这里记录下使用annotation的方式使用动态sql。
基本来说他有两种方案进行封装。
第一种方式:采用select的方式,使用<script>进行拼接。
第二种方式:使用SelectProvider,然后在另外的方法中返回sql语句。然后进行。
一下是两种方案的操作:
代码简单,实现功能为:如果传入的用户有name,那么sql语句加入name like "%xxx%"
第一种方法:
    @Select("<script>select * from t_user" +
            "<where>" +
            "<if test='#{name} != null'>name like concat('%',#{name},'%')</if>" +
            "</where>" +
            "</script>")
    List<User> DynaSQL2(User u);



第二种方法:
    @SelectProvider(type = com.duduli.li.sql.DynamicsSQL.class,method = "getLoginSQL")
    List<User> DynaSQL(User u);

sql拼接方法:
package com.duduli.li.sql;

import com.duduli.li.domain.User;
import org.apache.ibatis.jdbc.SQL;

public class DynamicsSQL {
    public String getLoginSQL(User u){
        SQL sql = new SQL();
        String name = u.getName();

        sql.SELECT("*").FROM("t_user");
            if(name != null){
                sql.WHERE("name LIKE concat('%',concat(#{name},'%'))");
            }
        System.out.println(sql.toString());
        return sql.toString();
    }
}


测试代码:
		User u = new User();
		u.setName("xx");
		List<User> list = userMapper.DynaSQL2(u);
//		List<User> list = userMapper.DynaSQL(u);
		for(User uu : list){
			System.out.println(uu.toString());
		}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics