zoukankan      html  css  js  c++  java
  • mybatis注解开发-动态SQL

    mybatis注解开发-动态SQL

    实体类以及表结构

    在mybatis-config.xml中注册mapper接口

    --------------------------

    动态查询@SelectProvider

    EmployeeMapper接口

    复制代码
    package Intefaceproxy.Dyno;
    
    import java.util.List;
    import java.util.Map;
    import org.apache.ibatis.annotations.SelectProvider;
    import model.Employee;
    
    public interface EmployeeMapper {
        //动态查询  type:指定一个类    method:使用这个类中的selectWhitParamSql方法返回的sql字符串  作为查询的语句
        @SelectProvider(type=Intefaceproxy.Dyno.EmployeeDynaSqlProvider.class,method="selectWhitParamSql")
        List<Employee> selectWithParam(Map<String,Object> param);
    }
    复制代码

    返回sql语句的类

    复制代码
    package Intefaceproxy.Dyno;
    
    import java.util.Map;
    
    import org.apache.ibatis.jdbc.SQL;
    
    public class EmployeeDynaSqlProvider {
        //方法中的关键字是区分大小写的  SQL SELECT WHERE
        //该方法会根据传递过来的map中的参数内容  动态构建sql语句
        public String selectWhitParamSql(Map<String, Object> param) {
            return new SQL() {
                {
                    SELECT("*");
                    FROM("tb_employee");
                    if (param.get("id")!=null) {
                        WHERE("id=#{id}");
                    }
                    if(param.get("loginname")!=null) {
                        WHERE("loginname=#{loginname}");
                    }
                    if(param.get("password")!=null) {
                        WHERE("password=#{password}");
                    }
                    if(param.get("name")!=null) {
                        WHERE("name=#{name}");
                    }
                    if(param.get("sex")!=null) {
                        WHERE("sex=#{sex}");
                    }
                    if(param.get("age")!=null) {
                        WHERE("age=#{age}");
                    }
                    if(param.get("phone")!=null) {
                        WHERE("phone=#{phone}");
                    }
                    if(param.get("sal")!=null) {
                        WHERE("sal=#{sal}");
                    }
                    if(param.get("state")!=null) {
                        WHERE("state=#{state}");
                    }
                }
                
            }.toString();
        }
    }
    复制代码

    测试:

    当然也可以传递employee对象

    接口:

    //传递employee对象
    @SelectProvider(type=Intefaceproxy.Dyno.EmployeeDynaSqlProvider.class,method="selectWhitEmployeeSql")
    List<Employee>selectWithEmployee(Employee employee);

    返回sql的类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    //selectWhitEmployeeSql
        public String selectWhitEmployeeSql(Employee employee) {
            return new SQL() {
                {
                    SELECT("*");
                    FROM("tb_employee");
                    if (employee.getId()!=null) {
                        WHERE("id=#{id}");
                    }
                    if(employee.getLoginname()!=null) {
                        WHERE("loginname=#{loginname}");
                    }
                    if(employee.getPassword()!=null) {
                        WHERE("password=#{password}");
                    }
                    if(employee.getName()!=null) {
                        WHERE("name=#{name}");
                    }
                    if(employee.getSex()!=null) {
                        WHERE("sex=#{sex}");
                    }
                }
            }.toString();
        }

    测试:

    ------------------------------

    动态插入@InsertProvider

    1
    2
    3
    4
    //动态插入
        @InsertProvider(type=Intefaceproxy.Dyno.EmployeeDynaSqlProvider.class,method="insertEmployeeSql")
        @Options(useGeneratedKeys=true,keyProperty="id")
        int insertEmployee(Employee employee);

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    //insertEmployeeSql
        public String insertEmployeeSql(Employee employee) {
            return new SQL() {
                {
                    INSERT_INTO("tb_employee");
                    if(employee.getLoginname()!=null) {
                        VALUES("loginname","#{loginname}");
                    }
                    if(employee.getPassword()!=null) {
                        VALUES("password""#{password}");
                    }
                    if(employee.getName()!=null) {
                        VALUES("name""#{name}");
                    }
                    if(employee.getSex()!=null) {
                        VALUES("sex""#{sex}");
                    }
                    if(employee.getAge()!=null) {
                        VALUES("age""#{age}");
                    }
                    if(employee.getPhone()!=null) {
                        VALUES("phone""#{phone}");
                    }
                    if(employee.getSal()!=null) {
                        VALUES("sal""#{sal}");
                    }
                    if(employee.getState()!=null) {
                        VALUES("state""#{state}");
                    }
                }
            }.toString();
        }

    测试:

    -------------------------

    @UpdateProvider

    1
    2
    3
    //动态更新
        @UpdateProvider(type=Intefaceproxy.Dyno.EmployeeDynaSqlProvider.class,method="updateEmployeeSql")
        void updateEmployee(Employee employee);
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    //updateEmployeeSql
        public String updateEmployeeSql(Employee employee) {
            return new SQL() {
                {
                    UPDATE("tb_employee");
                    if(employee.getLoginname()!=null) {
                        SET("loginname=#{loginname}");
                    }
                    if(employee.getPassword()!=null) {
                        SET("password=#{password}");
                    }
                    if(employee.getName()!=null) {
                        SET("name=#{name}");
                    }
                    if(employee.getSex()!=null) {
                        SET("sex=#{sex}");
                    }
                    if(employee.getAge()!=null) {
                        SET("age=#{age}");
                    }
                    if(employee.getPhone()!=null) {
                        SET("phone=#{phone}");
                    }
                    if(employee.getSal()!=null) {
                        SET("sal=#{sal}");
                    }
                    if(employee.getState()!=null) {
                        SET("state=#{state}");
                    }
                    WHERE("id=#{id}");
                }
            }.toString();
        }

    测试:

    ----------------------------

    @DeleteProvider

    1
    2
    3
    //动态删除
    @DeleteProvider(type=Intefaceproxy.Dyno.EmployeeDynaSqlProvider.class,method="deleteEmployeeSql")
    void deleteEmployee(Employee employee);

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    //deleteEmployeeSql
    public String deleteEmployeeSql(Employee employee) {
        return new SQL() {
            {
                DELETE_FROM("tb_employee");
                if(employee.getLoginname()!=null) {
                    WHERE("loginname=#{loginname}");
                }
                if(employee.getPassword()!=null) {
                    WHERE("password=#{password}");
                }
                if(employee.getName()!=null) {
                    WHERE("name=#{name}");
                }
            }
        }.toString();
    }

     测试:

     

    原文地址:https://www.cnblogs.com/Joke-Jay/p/8524722.html

  • 相关阅读:
    leetcode-剑指19-OK
    leetcode-剑指38-?
    leetcode-剑指36-OK
    leetcode-剑指41-OK
    leetcode-剑指20-OK
    leetcode-剑指16-OK
    nginx重写路由隐藏入口文件报错引发的思考
    Go之并发
    Go之接口
    Go实现学生管理系统
  • 原文地址:https://www.cnblogs.com/weibanggang/p/12856651.html
Copyright © 2011-2022 走看看