一、定義實體類 ,注意需求 是一對多還是多對一。 這里用員工和部門 多對一的關系舉例。
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>