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水平究竟是个什么样.測试结果就不说了,反正是慘不忍睹. 看了一下 ...
随机推荐
- 基于Spring MVC + Spring + MyBatis的【密室逃脱游戏主题排行榜】
资源下载: https://download.csdn.net/download/weixin_44893902/25706959 一.语言和环境 1. 实现语言:Java语言 2. 环境要求:ecl ...
- Java中关于super关键字的作用
在子类继承父类中,一般有一行super的语句,需要记住三种使用方法: 1.super.变量/对象名: 使用这种方法可以直接访问父类中的变量或对象,进行修改赋值等操作 2.super.方法名(): 直接 ...
- SQL Server 添加字段,修改字段类型,修改字段名,删除字段
-- 1.添加字段-- 基本语法alter table 表 add 列名 字段类型 null-- 例:给学生表添加Telephone字段并指定类型为vachar,长度为50,可空alter table ...
- windows 安装GCC
1. 下载GCC执行文件 https://pan.baidu.com/s/1foOeAo29gLr_8HhTo_69pA 提取码 cs93 2. 解压文件到D:\mingw64 3. 新建系统环境变 ...
- EasySharding.EFCore 如何设计使用一套代码完成的EFCore Migration 构建Saas系统多租户不同业务需求且满足租户自定义分库分表、数据迁移能力?
下面用一篇文章来完成这些事情 多租户系统的设计单纯的来说业务,一套Saas多租户的系统,面临很多业务复杂性,不同的租户存在不同的业务需求,大部分相同的表结构,那么如何使用EFCore来完成这样的设计呢 ...
- Linux登录时,下游回显非常慢
问题现象 登录linux时,远程连接正常,[root@...]回显非常慢,在执行脚本时,很容易导致命令下发错乱 原因分析 家目录下的.bash_history文件太大,导致每次登陆时读取这个文件耗时太 ...
- vuex从后台数据后页面已完成渲染无法显示数据的解决办法
一.在store中state定义一个变量 来控制是否显示 二.在完成数据获取后把isShow设为true 三.把state状态映射到页面的computed中 四.在模板中使用v-if来判断是否显示 来 ...
- systemd学习及使用
什么是systemd? (译)systemd是linux系统的一组基础构件块.它提供了一个系统和服务的管理,它以PID 1 的形式运行并启动系统的其余部分.systemd 使用积极的并行化功能,使用s ...
- ElasticSearch的应用
一.介绍 全文检索技术: 分布式: Restful风格: 近实时搜索 二.部署 下载:https://thans.cn/mirror/elasticsearch.html 新建用户,并登录: 解压: ...
- Elasticsearch基础知识学习
概要 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Ap ...