MyBatis——Annotation注解——动态SQL


MyBatis使用@SelectProvider、@InsertProvider、@UpdateProvider、@DeleteProvider注解来帮助构建动态SQL语句。着四种注解都有type属性,该属性指定一个类;method属性指定该类的方法,其用来提供需要执行的SQL语句。
org.apache.ibatis.SQL类常用方法:
    T SELECT(String columns)。开始或追加SELECT子句。
    T FROM(String table)。启动或追加FROM子句。
    T JOIN(String join)。想JOIN子句添加一个新的查询条件。
    T INNER_JOIN(String join)。内连接。
    T LEFT_OUTER_JOIN(String join)。左外连接。
    T RIGHT_OUTER_JOIN(String join)。右外连接。
    T WHERE(String conditions)。追加一个新的WHERE子句条件。
    T OR()。使用OR拆分当前where子句条件。
    T AND()。使用AND拆分当前where子句条件。
    T GROUP_BY(String columns)。追加一个新的group by子句元素。
    T HAVING(String conditions)。追加一个新的having子句条件。
    T ORDER_BY(String columns)。追加一个新的ordre by子句元素。
    T INSERT_INTO(String tableName)。启动insert语句插入到指定表。
    T VALUES(String columns,String values)。追加的insert语句。
    T DELETE_FROM(String table)。启动delete语句,并指定表删除。
    T UPDATE(String table)。启动一个update语句,并指定表更新。
    T SET(Sting sets)。追加update的set列表。

示例:

/MyBatisAnnotation/src/com/web/mybatis/mapper/User3Mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.web.mybatis.mapper.User3Mapper">

</mapper>

/MyBatisAnnotation/src/com/web/mybatis/mapper/User3Mapper.java

package com.web.mybatis.mapper;

import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.SelectProvider;
import com.web.mybatis.domain.User3;

public interface User3Mapper {
    //动态SQL查询
    @SelectProvider(type=User3DynaSqlProvider.class,method="selectWhitParam1")
    List<User3> selectWhitParm1(Map<String,Object> param);
    
    @SelectProvider(type=User3DynaSqlProvider.class,method="selectWhitParam2")
    List<User3> selectWhitParm2(User3 user);
    
    //动态插入
    @InsertProvider(type=User3DynaSqlProvider.class,method="insertUser3")
    void insertUser3(User3 user);

}

/MyBatisAnnotation/src/com/web/mybatis/mapper/User3DynaSqlProvider.java

package com.web.mybatis.mapper;

import java.util.Map;

import org.apache.ibatis.jdbc.SQL;

import com.web.mybatis.domain.User3;

public class User3DynaSqlProvider {
    //Map参数
    public String selectWhitParam1(Map<String,Object> param) {
        return new SQL() {
            {
                SELECT("*");
                FROM("tb_user3");
                if(param.get("id") != null) {
                    WHERE("id = #{id}");
                }
                if(param.get("loginname") != null) {
                    WHERE("loginname = #{loginname}");
                }
                if(param.get("password") != null) {
                    WHERE("password = #{password}");
                }
            }
        }.toString();
    }
    //User对象参数
    public String selectWhitParam2(User3 user) {
        return new SQL() {
            {
                SELECT("*");
                FROM("tb_user3");
                if(user.getId() != null) {
                    WHERE("id = #{id}");
                }
                if(user.getLoginname() != null) {
                    WHERE("loginname = #{loginname}");
                }
                if(user.getPassword() != null) {
                    WHERE("password = #{password}");
                }
            }
        }.toString();
    }
    
    //动态插入
    public String insertUser3(User3 user) {
        return new SQL() {
            {
                INSERT_INTO("tb_user3");
                if(user.getId() != null) {
                    VALUES("id","#{id}");
                }
                if(user.getLoginname()!=null) {
                    VALUES("loginname","#{loginname}");
                }
                if(user.getPassword()!=null) {
                    VALUES("password","#{password}");
                }
            }
        }.toString();
    }
}

/MyBatisAnnotation/src/com/web/mybatis/test/DynamiSqlTest.java

package com.web.mybatis.test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;

import com.web.mybatis.domain.User3;
import com.web.mybatis.factory.FKSqlSessionFactory;
import com.web.mybatis.mapper.User3Mapper;

public class DynamiSqlTest {
    //Map参数
    public static void testSelectWhitParam1() {
        SqlSession session = FKSqlSessionFactory.getSqlSession();
        User3Mapper um = session.getMapper(User3Mapper.class);
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("loginname", "tom");
        map.put("password", "123456");
        List<User3> list = um.selectWhitParm1(map);
        list.forEach(user->System.out.println(user.toString()));
        session.commit();
        session.close();
    }
    //User3对象参数
    public static void testSelectWhitParam2() {
        SqlSession session = FKSqlSessionFactory.getSqlSession();
        User3Mapper um = session.getMapper(User3Mapper.class);
        User3 user3 = new User3();
        user3.setLoginname("tom");
        user3.setPassword("123456");
        List<User3> list = um.selectWhitParm2(user3);
        list.forEach(user->System.out.println(user.toString()));
        session.commit();
        session.close();
    }
    //动态插入
    public static void testInsertUser3() {
        SqlSession session = FKSqlSessionFactory.getSqlSession();
        User3Mapper um = session.getMapper(User3Mapper.class);
        User3 user3 = new User3();
        user3.setId(2);
        user3.setLoginname("jack");
        user3.setPassword("123456");
        um.insertUser3(user3);
        session.commit();
        session.close();
    }
    
    public static void main(String[] args) {
//        testSelectWhitParam2();
        testInsertUser3();
    }
}

以上为插入和查询的示例,还有更新和删除的示例将不再仔细写例子,以下贴出更新和删除的User3DynaSqlProvider.java中方法

    //动态更新
    public String updateUser3(User3 user) {
        return new SQL() {
            {
                UPDATE("tb_user3");
                if(user.getLoginname() != null) {
                    SET("loginname = #{loginname}");
                }
                if(user.getPassword() != null) {
                    SET("password = #{password}");
                }
                WHERE("id = #{id}");
            }
        }.toString();
    }
    
    //动态删除
    public String deleteUser3(User3 user) {
        return new SQL() {
            {
                DELETE_FROM("tb_user3");
                if(user.getId() != null) {
                    WHERE("id = #{id}");
                }
                if(user.getLoginname() != null) {
                    WHERE("loginname = #{loginname}");
                }
                if(user.getPassword() != null) {
                    WHERE("password = #{password}");
                }
            }
        }.toString();
    }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM