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水平究竟是个什么样.測试结果就不说了,反正是慘不忍睹. 看了一下 ...
随机推荐
- 【剑指Offer】删除链表中重复的结点 解题报告(Python)
[剑指Offer]删除链表中重复的结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interview ...
- [C++]C++ STL库函数大全
#include <assert.h> //设定插入点 #include <ctype.h> //字符处理 #include <errno.h> //定义错误码 # ...
- Spring企业级程序设计 • 【第4章 Spring持久化层和事务管理】
全部章节 >>>> 本章目录 4.1 配置数据源资源 4.1.1 JdbcTemplate介绍 4.1.2通过ComboPooledDataSource创建数据源 4.1. ...
- .net core使用rabbitmq消息队列 (二)
之前有写过.net core集成使用rabbitmq的博文,见.net core使用rabbitmq消息队列,但是里面的使用很简单,而且还有几个bug,想改下,但是后来想了想,还是算了,之前使用的是. ...
- spring cloud bus 消息总线 动态刷新配置文件 【actuator 与 RabbitMQ配合完成】
1.前言 单机刷新配置文件,使用actuator就足够了 ,但是 分布式微服务 不可能是单机 ,将会有很多很多的工程 ,无法手动一个一个的发送刷新请求, 因此引入了消息中间件 ,常用的 消息中间件 是 ...
- gradle学习(一)
projects和tasks 任何一个Gradle构建都是由一个或者多个project组成 每个project都有多个tasks构成 每个task都代表了构建执行过程中的一个原子性操作.例如 编译 打 ...
- java 8 - java 17 升级指北
2014年发布的java SE 8和2017年发布的java EE 8,至今还是使用最广泛的java版本,大部分java开发者对于java 8之后的升级总是敬而远之,这跟java 9以后的破坏性升级和 ...
- MySQL 中如何定位 DDL 被阻塞的问题
经常碰到开发.测试童鞋会问,线下开发.测试环境,执行了一个DDL,发现很久都没有执行完,是不是被阻塞了?要怎么解决? 包括在群里,也经常会碰到类似问题:DDL 被阻塞了,如何找到阻塞它的 SQL ? ...
- KMP算法解题模板(更新)
/* kmp算法的主要作用在于对next数组的运用,所以这里只给出next数组的模板 性质1:对于每一个长度len的子串,该子串的最小循环节为len-next[len] 性质2:kmp的next不断向 ...
- MASA Framework - 整体设计思路
源起 年初我们在找一款框架,希望它有如下几个特点: 学习成本低 只需要学.Net每年主推的技术栈和业务特性必须支持的中间件,给开发同学减负,只需要专注业务就好 个人见解:一款好用的框架应该是补充,而不 ...