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

时间:2022-04-03 20:36:50

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

  

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>