mybatis 接口中定义方法、映射文件、实体类之间的关系?

一、定义实体类 ,注意需求 是一对多还是多对一。  这里用员工和部门  多对一的关系举例。

  

package com.zs.entity;
/*
* /*
 *       多对一?
 *       多个员工  对应一个部门  一个部门里面有很多信息
 *       我们用一个java bean对象来表示
 *       如何表示 一个部门  Dept dept;
 *
 * */
public class Emp {
    private int id;
    private String ename;
    private String job;
    private Dept dept;   
    private double sal;

    public Emp() {
    }

    public Emp(int id) {
        this.id=id;
    }

    public Emp(int id, String ename) {
        this.id = id;
        this.ename = ename;
    }

    public Emp(int id, String ename, String job, Dept dept, double sal) {
        this.id = id;
        this.ename = ename;
        this.job = job;
        this.dept = dept;
        this.sal = sal;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    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 Dept getDept() {
        return dept;
    }

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

    public double getSal() {
        return sal;
    }

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

    @Override
    public String toString() {
        return "Emp{" +
                "id=" + id +
                ", ename='" + ename + '\'' +
                ", job='" + job + '\'' +
                ", dept=" + dept +
                ", sal=" + sal +
                '}';
    }
}
package com.zs.entity;

import java.util.List;

public class Dept {
    private int deptno;
    private String dname;
    private List<Emp> emps;

    public Dept() {

    }

    public Dept(int deptno) {
        this.deptno = deptno;
    }

    public int getDeptno() {
        return deptno;
    }

    public void setDeptno(int deptno) {
        this.deptno = deptno;
    }

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }

    public List<Emp> getEmps() {
        return emps;
    }

    public void setEmps(List<Emp> emps) {
        this.emps = emps;
    }

    @Override
    public String toString() {
        return "Dept{" +
                "deptno=" + deptno +
                ", dname='" + dname + '\'' +
                ", emps=" + emps +
                '}';
    }
}

 

 

二、1.在接口中带定义增删改查的方法  注意接口中的参数设置    

    2.映射文件中添加增删改查。

  

package com.zs.dao;

import com.zs.entity.Emp;

import java.util.List;

public interface EmpDao {
    List<Emp> listEmp();

    //添加员工
     int insertEmp(Emp emp);

     //删除员工  1.id是int 类型的,这里可以直接定义 (int id) 删除数据 使用 int deleteEmp (int id);
     // 2.定义(emp id)也是根据id 删除信息,但是这种方法需要在emp实体类中设置一个关于 id 的构造方法。
     //3. 综上所述 ,在删除信息是 还是直接定义 int id 来解决问题。
    int deleteEmp(Emp id);

    //修改  1.根据id 修改信息 需要在实体类中添加构造方法  这里的id 需要用到emp 实体类中的id 所以类型用到emp
    //2.直接定义 int id; 再修改值的时候需要传值,就是需要加入 我们所要修改的值,只定义一个id,
    int updateEmp(Emp id);
}

 

 

三、测试

import com.zs.dao.EmpDao;
import com.zs.entity.Dept;
import com.zs.entity.Emp;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.util.List;

public class Test {
    public static void main(String[] args) throws IOException {
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
        SqlSession sqlSession = sqlSessionFactory.openSession();
        EmpDao empDao = sqlSession.getMapper(EmpDao.class);


        //添加值的方式。 1.通过构造方法直接填入   2.通过set 方法
        Dept dept = new Dept(1);
        Emp emp2 = new Emp();
        emp2.setDept(dept);

        Emp emp1 = new Emp(1, "典韦", "将军", dept, 100);
        empDao.insertEmp(emp1);
        sqlSession.commit();

     //   System.out.println(emp1);

        List<Emp> empList = empDao.listEmp();
        for (Emp emp : empList) {
            System.out.println(emp);
        }

    }
}

 

<?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.zs.dao.EmpDao">

        <!--
            多个员工指向一个部门  多对一  select * from emp inner join dept on emp.deptno=dept.deptno;
            在emp实体类中并没有直接设置deptno的私有属性 但是设置了dept这个对象啊。  可以通过打点的方式 来调用 dept.deptno
         -->
    <resultMap id="emp" type="com.zs.entity.Emp" autoMapping="true">
        <association property="dept" column="deptno" javaType="com.zs.entity.Dept" autoMapping="true"/>
    </resultMap>

    <select id="listEmp" resultMap="emp">
        select emp.*,dept.deptno from emp inner  join dept where emp.deptno=dept.deptno order  by emp.deptno desc ;
    </select>

    <!--增删改 不需要返回值-->
    <insert id="insertEmp"  >
        insert  into emp (ename, job, sal, deptno)values (#{ename},#{job},#{sal},#{dept.deptno});
    </insert>

    <delete id="deleteEmp">
      delete from  emp where id=#{id};
    </delete>

    <update id="updateEmp" >
        update emp set ename=#{ename} where  id=#{id};
    </update>


</mapper>

 

posted @ 2019-07-29 16:24  送外卖的小菜鸟  阅读(841)  评论(0编辑  收藏  举报