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