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>