美文网首页
MyBatis基于注解开发(动态SQL)

MyBatis基于注解开发(动态SQL)

作者: _FireFly_ | 来源:发表于2020-11-12 10:30 被阅读0次

Emp

package domain;

import java.sql.Date;

public class Emp {

    //自有属性
    private Integer empno;
    private String ename;
    private String job;
    private Integer mgr;
    private Date hiredate;
    private Float sal;
    private Float comm;
    //为了通过员工 查询员工对应的部门信息 关联属性
    private Dept dept;//(deptno dname loc)


    public Emp() {
    }

    public Emp(Integer empno, String ename, String job, Integer mgr, Date hiredate, Float sal, Float comm, Dept dept) {
        this.empno = empno;
        this.ename = ename;
        this.job = job;
        this.mgr = mgr;
        this.hiredate = hiredate;
        this.sal = sal;
        this.comm = comm;
        this.dept = dept;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "empno=" + empno +
                ", ename='" + ename + '\'' +
                ", job='" + job + '\'' +
                ", mgr=" + mgr +
                ", hiredate=" + hiredate +
                ", sal=" + sal +
                ", comm=" + comm +
                ", dept=" + dept +
                '}';
    }

    public Integer getEmpno() {
        return empno;
    }

    public void setEmpno(Integer empno) {
        this.empno = empno;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public Integer getMgr() {
        return mgr;
    }

    public void setMgr(Integer mgr) {
        this.mgr = mgr;
    }

    public Date getHiredate() {
        return hiredate;
    }

    public void setHiredate(Date hiredate) {
        this.hiredate = hiredate;
    }

    public Float getSal() {
        return sal;
    }

    public void setSal(Float sal) {
        this.sal = sal;
    }

    public Float getComm() {
        return comm;
    }

    public void setComm(Float comm) {
        this.comm = comm;
    }

    public Dept getDept() {
        return dept;
    }

    public void setDept(Dept dept) {
        this.dept = dept;
    }
}

EmpDynamic

package dynamic;

import org.apache.ibatis.annotations.Param;

public class EmpDynamic {

    //类名随意写
    //方法名   类中只有一个方法    如果使用默认方法名   以后注解找的时候可以省略
    //          provideSql(使用默认的 找寻时可以省略)
    //方法名   自己随意写的也可以   找寻的时候需要告知具体哪个方法

    //一个普通方法    目的自己动态拼接SQL
    //  参数?     job deptno
    //  返回值?    SQL
    public String provideSql(@Param("job")String job,@Param("deptno")Integer deptno){
        StringBuilder sb = new StringBuilder();
        sb.append("select * from emp where 1=1 ");
        if(job!=null && !"".equals(job)){
            sb.append(" and job = #{job}");
        }
        if(deptno!=null){
            sb.append(" and deptno = #{deptno}");
        }
        return sb.toString();
    }


    //一个普通方法    目的是自己动态拼接SQL
    //  参数 数组 集合 empnos
    //  返回值String
    public String getDynamicSQL(@Param("empnos")Integer...empnos){
        StringBuilder sb = new StringBuilder();
        sb.append("select * from emp where empno in ");
        sb.append("(");//open="("
        for(int i=0;i<empnos.length;i++){
            sb.append(empnos[i]);
            sb.append(",");//   separator=","
        }
        sb.delete(sb.length()-1,sb.length());//多余的,删掉
        sb.append(")");//close=")"
        return sb.toString();
    }

}

EmpDao

package dao;

import domain.Dept;
import domain.Emp;
import dynamic.EmpDynamic;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.mapping.FetchType;

import java.util.List;

public interface EmpDao {

//    //设计一个方法  根据员工empno编号 查询员工信息+所属部门信息
//    @Results(
//            id="selectEmp",
//            value={
//                    @Result(property="empno",column="empno",id=true),
//                    @Result(property="ename",column="ename"),
//                    @Result(property="job",column="job"),
//                    @Result(property="mgr",column="mgr"),
//                    @Result(property="hiredate",column="hiredate"),
//                    @Result(property="sal",column="sal"),
//                    @Result(property="comm",column="comm"),
//                    @Result(property="dept",javaType=Dept.class,column="deptno",one=@One(select="selectDept",fetchType=FetchType.LAZY))
//            })
//    @Select("select * from emp where empno = #{empno}")
//    public Emp selectOne(Integer empno);
//
//    //辅助方法
//    @Select("select * from dept where deptno = #{deptno}")
//    public Dept selectDept(Integer deptno);


    //====================================================
    //查询所有的emp信息+每个emp对应的dept对象
//    @Select("select * from emp")
//    @ResultMap("selectEmp")
//    public List<Emp> selectAll();




    //====================================================
    //支持动态SQL的方法    代理处理

    //根据给定的job和deptno查询好多人  job和deptno不一定有没有
    @Select("动态---找别人拼接完成拿回来")
    @SelectProvider(EmpDynamic.class)
    public List<Emp> selectEmpsByJobAndDeptno(@Param("job")String job,@Param("deptno")Integer deptno);


    //根据给定的empno查询好多人   empno不一定有几个
    @SelectProvider(type=EmpDynamic.class,method="getDynamicSQL")
    public List<Emp> selectEmpsByEmpno(@Param("empnos")Integer... empnos);

}

相关文章

  • MyBatis基于注解开发(动态SQL)

    Emp EmpDynamic EmpDao

  • Mybatis基础实践

    Mybatis特点之——动态SQL mybatis的动态sql 是基于强大的OGNL表达式来实现的,主要是用来解决...

  • MyBatis 注解方式的基本用法

    什么是MyBatis的注解方式 MyBatis的注解方式就是将SQL语句直接写在接口上。在MyBatis注解SQL...

  • MyBatis的注解开发

    MyBatis的注解开发MyBatis的映射配置除了使用xml配置以外,还支持注解配置sql语句问题: 为什么有了...

  • Mybatis高级阶段

    Mybatis基于注解开发 这几年来注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以减少编...

  • MyBatis--注解式开发

    MyBatis--注解式开发 MyBatis的注解,主要是用于替换映射文件。而映射文件中无非存放着增删改查的sql...

  • Mybatis注解开发之动态SQL

    Mybatis的开发方式其实有3种: 原始Dao开发(就是把mapper接口、映射文件和实现类都一并开发) xml...

  • MyBatis动态SQL

    MyBatis 动态SQL 内容 Mybatis动态SQL在XML中支持的几种标签: if chose trim、...

  • Mybatis 使用注解和Provider类实现动态条件查询

    Mybatis 提供了基于Xml和注解的自定义SQL查询,相比Xml的方式,注解更加便捷、优雅。为了防止遗忘具体的...

  • MyBatis核心知识点

    (1)Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不? Mybatis动...

网友评论

      本文标题:MyBatis基于注解开发(动态SQL)

      本文链接:https://www.haomeiwen.com/subject/ubdqbktx.html