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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM