https://www.yuque.com/docs/share/fe42dbdb-7d33-4ea9-9021-48bfcb67411b?# 《数据库》
目录
3.3.6.6、多表查询时字段名与属性名不一致(一对一|多对一)
3.3.6、接口绑定方案
以下实现接口时默认已经以javabean规范创建了与表对应的实体类
接口的命名与映射文件一致 (表名Mapper.java | 表名Mapper.xml)
实体类命名与对应表名一致 (表名.java)
Dept类
public class Dept { private int id; private String name; private String loc; public Dept() { } public Dept(int id, String name, String loc) { this.id = id; this.name = name; this.loc = loc; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getLoc() { return loc; } public void setLoc(String loc) { this.loc = loc; } @Override public String toString() { return "Dept{" + "id=" + id + ", name='" + name + '\'' + ", loc='" + loc + '\'' + '}'; } }
Emp类
public class Emp { private int empno; private String ename; private double sal; private String job; private double comm; private int mgr; private Date hiredate; private int deptno; //属性: javabean : 员工对象所在的部门信息 private Dept pddDept; public Emp() { } public Emp(int empno, String ename, double sal, String job, double comm, int mgr, Date hiredate, int deptno) { this.empno = empno; this.ename = ename; this.sal = sal; this.job = job; this.comm = comm; this.mgr = mgr; this.hiredate = hiredate; this.deptno = deptno; } public Dept getPddDept() { return pddDept; } public void setPddDept(Dept pddDept) { this.pddDept = pddDept; } public int getEmpno() { return empno; } public void setEmpno(int empno) { this.empno = empno; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public double getSal() { return sal; } public void setSal(double sal) { this.sal = sal; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public double getComm() { return comm; } public void setComm(double comm) { this.comm = comm; } public int getMgr() { return mgr; } public void setMgr(int mgr) { this.mgr = mgr; } public Date getHiredate() { return hiredate; } public void setHiredate(Date hiredate) { this.hiredate = hiredate; } public int getDeptno() { return deptno; } public void setDeptno(int deptno) { this.deptno = deptno; } @Override public String toString() { return "Emp{" + "empno=" + empno + ", ename='" + ename + '\'' + ", sal=" + sal + ", job='" + job + '\'' + ", comm=" + comm + ", mgr=" + mgr + ", hiredate=" + hiredate + ", deptno=" + deptno + ", pddDept=" + pddDept + '}'; } }
3.3.6.1、实现方式
1)同名接口
/* 接口绑定方案下的接口 : */ public interface DeptMapper { // 查询所有的部门信息 public List<Dept> queryAll(); }
2)同名sql映射文件
<?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"> <!-- 1.接口与SQL映射文件名字要保持一致,并放在同一个包下 2.SQL映射文件的命名空间namespace定义为与之绑定的接口的包名.类名 3.SQL标签的id属性值与接口中所对应的抽象方法的方法名保持一致 4.SQL语句的参数与返回值要求与对应的抽象方法的参数与返回值保持一致 --> <mapper namespace="com.yjxxt.mappers.DeptMapper"> <!--查询所有的部门信息--> <select id="queryAll" resultType="Dept"> select * from dept </select> </mapper>
3)mybatis添加项
<!--扫描接口 : 接口绑定方案--> <mappers> <!--<mapper class="com.yjxxt.mappers.DeptMapper"/> <mapper class="com.yjxxt.mappers.EmpMapper"/>--> <package name="com.yjxxt.mappers"/> <!--包扫描--> </mappers>
4)接口测试类
/* 测试接口绑定方案 步骤 : 1.定义接口,定义抽象功能 2.定义与接口绑定的SQL文件,定义SQL语句,按照要求进行定义 3.核心配置文件中通过Mapper扫描接口 4.在java代码中通过获取接口实现类对象调用功能 */ public class Class001_InterfaceBind { public static void main(String[] args) { //1.获取会话 SqlSession session = SessionUtils.getSession(); //2.获取接口实现类对象--> 指定哪一个接口 DeptMapper mapper = session.getMapper(DeptMapper.class); //(接口名.class) //3.调用方法 List<Dept> list = mapper.queryAll(); list.forEach(System.out::println); //4.关闭会话 session.close(); } }
3.3.6.2、测试有参查询
1)同名接口
//测试带有参数的查询 public interface EmpMapper { //根据员工编号查询员工信息 Emp queryEmpById(int empno); //根据薪资与部门一起查询 List<Emp> queryEmpBySalDeptno(@Param("sal") double sal,@Param("dno") int deptno); }
2)同名sql映射文件