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>
mybatis 接口中定义方法、映射文件、实体类之间的关系?的更多相关文章
- AE中网络分析的实现 的各个类之间的关系
原文AE中网络分析的实现 的各个类之间的关系 1. 创建网络数据集 在ArcCatalog中勾选网络分析模块,新建个人地理信息数据库—>新建要素数据集—>批量导入要素—>创建 ...
- 请解释ASP. NET中的web页面与隐藏类之间的关系
请解释ASP.NET中的web页面与其隐藏类之间的关系 其实页面与其隐藏类之间就是一个部分类的关系,你在页面上放一个一个的控件就是在这个类中定义一个一个的属性, 因为是同一个类的部分类的关系,所以隐藏 ...
- 教你在Java接口中定义方法
基本上所有的Java教程都会告诉我们Java接口的方法都是public.abstract类型的,没有方法体的. 但是在JDK8里面,你是可以突破这个界限的哦. 假设我们现在有一个接口:TimeClie ...
- 全面解释java中StringBuilder、StringBuffer、String类之间的关系
StringBuilder.StringBuffer.String类之间的关系 java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,在上一篇博文中我 ...
- python中对象、类型和元类之间的关系
在python中对象.类型和元类构成了一个微妙的世界. 他们有在这个世界里和平共处,相辅相成.它们遵循着几条亘古不变的定律: 1.python中无处不对象 2.所有对象都有三种特性:id.类型.值 3 ...
- Python中对象、类型、元类之间的关系
Python里的对象.类型和元类的关系很微妙也很有意思. 1989年圣诞节期间,上帝很无聊,于是创造了一个世界. 对象 在这个世界的运转有几条定律. 1.一切都是对象 对象(object)是这个世界的 ...
- 请解释ASP.NET中的web页面与其隐藏类之间的关系
其实页面与其隐藏类之间就是一个部分类的关系,你在页面上放一个一个的控件就是在这个类中定义一个一个的属性, 因为是同一个类的部分类的关系,所以隐藏类可以访问到页面上控件,这样做是为了把展现与处理逻辑分开 ...
- 请解释ASP.NET 中的web 页面与其隐藏类之间的关系?
一个ASP.NET 页面一般都对应一个隐藏类,一般都在ASP.NET 页面的声明中指定了隐藏类例如一个页面 Tst1.aspx 的页面声明如下 <%@ Page language="c ...
- java中StringBuilder、StringBuffer、String类之间的关系
今天在CSDN的高校俱乐部里看到了"Java基础水平測试(英文)".感觉自己学了java这么久,想看下自己的java水平究竟是个什么样.測试结果就不说了,反正是慘不忍睹. 看了一下 ...
随机推荐
- 『动善时』JMeter基础 — 58、JMeter分布式测试
目录 1.JMeter分布式测试概念 2.JMeter分布式测试前提条件 3.JMeter实现分布式测试 (1)在执行机中的配置 (2)在控制机中的配置 (3)启动执行机中的JMeter服务 (4)在 ...
- IT6516功能兼容芯片|DP转VGA方案|CS5202替代兼容IT6516
台湾联阳T6516是一种高性能的DP显示端口到VGA转换器方案芯片.IT6516结合DisplayPort接收器和三重DAC,通过转换功能支持DisplayPort输入和VGA输出.内置Display ...
- 物联网大赛 - Android学习笔记(一) Android概念
一.Android 概念 Android是开放式的手机和电脑操作系统,是基于Linux系统做的上层开发. android可以做些什么? Android可以开发各种手机应用APP,也可以开发车载系统等, ...
- Oracle 系统函数
函数名称 返回值类型 说明 示例 字符串函数 ascii(str) number 返回str首字母的ASCII码 select ascii('A') from dual; --65select a ...
- 微服务探索之路01篇.net6.0项目本地win10系统docker到服务器liunx系统docker的贯通
本文介绍从创建 net6.0 项目运行在 windows 开发环境的 docker 然后正式部署至 liunx 服务器. 1 windows10 安装 docker 下载docker-desktop ...
- 前端后端通信初步尝试(javascript - flask)
在某项目中,需要使用python flask做后端功能开发,web提供功能入口. 此时需要使用Ajax通信. 由于以前从未接触过网络传输,记录了一些基础知识. 资料参考<HTML5+CSS3+J ...
- Pytest_Hook钩子函数总结(14)
前言 pytest 的钩子函数有很多,通过钩子函数的学习可以了解到pytest在执行用例的每个阶段做什么事情,也方便后续对pytest二次开发学习.详细文档可以查看pytest官方文档https:// ...
- spring源码之refresh第二篇
大家好,我是程序员田同学 上篇文章对spring核心启动方法refresh做了整体的解读,但是只是泛泛而谈,接下来会出一系统文章对每个方法的源码进行深刻解读. 第一篇文章见 spring源码之方法概览 ...
- Redis可视化内存分析工具--RDR:查看Redis中key的占用情况
RDR(redis datareveal)是一个解析redis rdbfile的工具.与redis-rdb-tools 相比,RDR 是由 golang 实现的,速度要快得多(5GB rdbfile ...
- 【Java常用类】BigDecimal
BigDecimal 一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中, 要求数字精度比较高,故用到java.math.BigDecimal类. BigDecimal类支 ...