Mybatis的课程总结
创始人
2025-05-31 16:09:44

 1.mybatis

Mybatis主要是对代码进行少写,分别加入核心配置文件和mapper映射文件,

核心配置文件主要是为了连接数据库,mapper映射文件是为了编写sql语句

 1.如何配置mybatis

①先创建一个moudle

 ②然后配置jar包

 ③然后进行mybatis的分层

 bean包:主要是进行一些实体类

dao包:主要是进行构建接口和编写sql语句

test包:主要是进行sql语句的测试

 ④在bean包中创建实体类

Emp:

public class Emp {private Integer eid;private String ename;private String job;private double sal;private String phone;private String address;//一对一关系的定义:把外键的did 定义为相关联的 对象private Dept dept;public Integer getEid() {return eid;}public void setEid(Integer eid) {this.eid = eid;}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 double getSal() {return sal;}public void setSal(double sal) {this.sal = sal;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public Dept getDept() {return dept;}public void setDept(Dept dept) {this.dept = dept;}@Overridepublic String toString() {return "Emp{" +"eid=" + eid +", ename='" + ename + '\'' +", job='" + job + '\'' +", sal=" + sal +", phone='" + phone + '\'' +", address='" + address + '\'' +", dept=" + dept +'}';}
}

 ⑤在dao包中创建mapper映射文件和接口

EmpDao接口:

public interface EmpDao {}

EmpDao.xml mapper映射文件





⑥src中创建核心配置文件和jdbc.properties

 

 mybatis.xml:




jdbc.properties:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb
jdbc.user=root
jdbc.password=root
mapper.dao=com.qi.dao

创建jdbc.properties是为了在更换数据库时少改代码

log4j是为了配置日志输出

 ⑦在测试包里创建测试类

 Emptest:

public class EmpTest {InputStream stream = null;SqlSessionFactoryBuilder builder = null;SqlSessionFactory factory = null;SqlSession sqlSession = null;EmpDao empDao= null;@Beforepublic void init() throws IOException {stream = Resources.getResourceAsStream("mybatis.xml");builder = new SqlSessionFactoryBuilder();factory = builder.build(stream);sqlSession = factory.openSession();empDao = sqlSession.getMapper(EmpDao.class);}@Afterpublic void destory() throws IOException {sqlSession.commit();sqlSession.close();stream.close();}
}

配置连接核心文件

2.mybatis的增删改查

①mybatis的增加

在接口中创建增加方法

int addEmp(Emp emp);

然后在mapper映射文件里编写sql语句

insert into emp(ename,job,sal,phone,address,did) values(#{ename},#{job},#{sal},#{phone},#{address},#{did});

然后进行测试

@Testpublic void testaddEmp(){Emp emp=new Emp();emp.setEname("ds");emp.setJob("sdfss");emp.setSal(200);emp.setPhone("213");emp.setAddress("sfsdf");int n = empDao.addEmp(emp);if (n>0){System.out.println("添加成功");}}

结果如下:

 

②mybatis的删除

在接口中创建删除方法

int delEmp(int eid);

 然后在mapper映射文件里编写sql语句

    delete from emp where eid=#{eid};

然后进行测试

@Testpublic void testdeleteEmp(){int n = empDao.delEmp(9);if (n>0){System.out.println("删除成功");}}

结果如下:

③mybatis的修改

在接口中创建修改方法

int reviseEmp(Emp emp);

 然后在mapper映射文件里编写sql语句

    update emp set ename=#{ename},job=#{job},sal=#{sal},phone=#{phone},address=#{address},did=#{did} where eid=#{eid};

然后进行测试

    @Testpublic void testreviseEmp(){Emp oldemp = empDao.selectById(3);System.out.println("修改前:"+oldemp);oldemp.setEname("sdf");oldemp.setJob("sfs");empDao.reviseEmp(oldemp);Emp newemp=empDao.selectById(3);System.out.println("修改后:"+newemp);}

测试结果如下:

 ④mybatis的查询

在接口中创建查询方法

List selectAll();

 然后在mapper映射文件里编写sql语句

    

然后进行测试

    @Testpublic void testSelectAll(){List emps = empDao.selectAll();for (Emp emp : emps) {System.out.println(emp);}}

结果如下:

 3.mybatis的两表联查

1.一对一查询

在bean包中创建实体类Dept

public class Dept {private Integer did;private String dname;private String dinfo;public Integer getDid() {return did;}public void setDid(Integer did) {this.did = did;}public String getDname() {return dname;}public void setDname(String dname) {this.dname = dname;}public String getDinfo() {return dinfo;}public void setDinfo(String dinfo) {this.dinfo = dinfo;}@Overridepublic String toString() {return "Dept{" +"did=" + did +", dname='" + dname + '\'' +", dinfo='" + dinfo + '\'' +'}';}
}

然后创建接口DeptDao

实现根据id查询的接口

public interface DeptDao {Dept selectById(int did);
}

编写sql语句

    
  • 在EmpDao中进行手动查询关联Dept,根据did查询

创建查询id的接口

public interface EmpDao {Emp selectByEid(int eid);}




然后在EmpTest中进行测试

public class EmpTest {InputStream stream = null;SqlSessionFactoryBuilder builder = null;SqlSessionFactory factory = null;SqlSession sqlSession = null;EmpDao empDao= null;@Beforepublic void init() throws IOException {stream = Resources.getResourceAsStream("mybatis.xml");builder = new SqlSessionFactoryBuilder();factory = builder.build(stream);sqlSession = factory.openSession();empDao = sqlSession.getMapper(EmpDao.class);}@Testpublic void testSelectByeid(){Emp emp=empDao.selectByEid(2);System.out.println(emp);}@Afterpublic void destory() throws IOException {sqlSession.commit();sqlSession.close();stream.close();}
}

测试结果如下

 2.一对多

一对多是在Dept中创建emps集合,然后把查询的员工信息全储存到集合中

在Dept中创建集合

public class Dept {private Integer did;private String dname;private String dinfo;//一个部门包含多个员工,一对多关系就是定义集合List emps;public List getEmps() {return emps;}public void setEmps(List emps) {this.emps = emps;}public Integer getDid() {return did;}public void setDid(Integer did) {this.did = did;}public String getDname() {return dname;}public void setDname(String dname) {this.dname = dname;}public String getDinfo() {return dinfo;}public void setDinfo(String dinfo) {this.dinfo = dinfo;}@Overridepublic String toString() {return "Dept{" +"did=" + did +", dname='" + dname + '\'' +", dinfo='" + dinfo + '\'' +", emps=" + emps +'}';}
}

Emp中实体类去掉dept对象

package com.qi.bean;public class Emp {private Integer eid;private String ename;private String job;private double sal;private String phone;private String address;private Integer did;public Integer getDid() {return did;}public void setDid(Integer did) {this.did = did;}
//一对一关系的定义:把外键的did 定义为相关联的 对象public Integer getEid() {return eid;}public void setEid(Integer eid) {this.eid = eid;}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 double getSal() {return sal;}public void setSal(double sal) {this.sal = sal;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "Emp{" +"eid=" + eid +", ename='" + ename + '\'' +", job='" + job + '\'' +", sal=" + sal +", phone='" + phone + '\'' +", address='" + address + '\'' +", did=" + did +'}';}
}

然后根据did一对多查询

在Dept接口中创建selectById方法

public interface DeptDao {Dept selectById(int did);
}

然后编写SQL语句





然后手动实现查询把查询的Dept中的值赋值给emps集合中

根据EmpDao中的did查询进行两表查询

public interface EmpDao {Emp selectByDid(int did);
}

然后编写SQL语句





然后在DeptTest中进行两表联查的测试

public class DeptTest {InputStream stream = null;SqlSessionFactoryBuilder builder = null;SqlSessionFactory factory = null;SqlSession sqlSession = null;DeptDao deptDao= null;@Beforepublic void init() throws IOException {stream = Resources.getResourceAsStream("mybatis.xml");builder = new SqlSessionFactoryBuilder();factory = builder.build(stream);sqlSession = factory.openSession();deptDao = sqlSession.getMapper(DeptDao.class);}@Testpublic void testSelectByDid(){Dept dept = deptDao.selectById(101);System.out.println(dept);}@Afterpublic void destory() throws IOException {sqlSession.commit();sqlSession.close();stream.close();}
}

结果如下:

 

相关内容

热门资讯

头歌--第1关:Linux文件... 任务描述 假设系统中存在一个文件File,修改该文件的权限,根据实际需求...
【Spring从成神到升仙系列... 👏作者简介:大家好,我是爱敲代码的小黄,独...
梦见蜈蚣是什么意思,做梦梦见蜈... 梦见蜈蚣是什么意思目录梦见蜈蚣是什么意思做梦梦见蜈蚣什么意思梦见蜈蚣是什么意思,哪里有解释啊梦见蜈蚣...
小区车位比一般是多少,车库配比... 小区车位比一般是多少目录小区车位比一般是多少车库配比是什么小区总户数8200,总车位是1450个,配...
车锁上的lock什么意思,汽车... 车锁上的lock什么意思目录车锁上的lock什么意思汽车上lock是什么意思?车子上“lock标志”...
kirin710是什么处理器,... kirin710是什么处理器目录kirin710是什么处理器海思kirin710是高通多少?骁龙71...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
跟着文档制作cocos第一个游... 背景 近期打算学习一下cocos creator,想着开发自己的游戏,是...
乌干达是什么梗,网络语乌干达什... 乌干达是什么梗目录乌干达是什么梗网络语乌干达什么意思?乌干达是什么梗乌干达是什么梗乌干达是什么梗 ...
车载电子狗怎么用,怎样使用电子... 车载电子狗怎么用目录车载电子狗怎么用怎样使用电子狗怎么使用电子狗求简答车载电子狗怎么使用车载电子狗怎...
梦见偷东西是什么意思,梦见自己... 梦见偷东西是什么意思目录梦见偷东西是什么意思梦见自己偷东西是什么意思?做梦梦见自己偷东西好不好梦见偷...
黄金瞳到底是什么,黄金瞳电视剧... 黄金瞳到底是什么目录黄金瞳到底是什么黄金瞳电视剧什么时候上映?《黄金瞳》的结局是什么?电视剧《黄金瞳...
前端-session、jwt 目录:   (1)session (2&#x...
企业即时通讯怎样为企业实现移动... 对于企业来说,在办公过程中少不了工作人员相互传递信息和数据传输,企业内部...
骑行选择什么自行车 极速百科网... 骑行选择什么自行车目录骑行选择什么自行车骑行选择什么自行车 1. 山地自行车:适合崎岖不平的路...
蓝色都有哪几种,蓝色都有什么颜... 蓝色都有哪几种目录蓝色都有哪几种蓝色都有什么颜色的蓝图片,蓝色都有什么颜色的蓝二年级蓝色有哪些种类蓝...
如何自学游泳要安全的,初学游泳... 如何自学游泳要安全的目录如何自学游泳要安全的初学游泳的人需要准备哪些东西,注意哪些事项?如何自学游泳...
一年级家长的话怎么写评语,一年... 一年级家长的话怎么写评语目录一年级家长的话怎么写评语一年级学生评价手册家长寄语怎么写一年级最佳家长评...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
docker 镜像管理 查看本地镜像 docker images 可以查看本地下载的镜像 docker images [O...
k8s-1.22.15部署ng... 1.介绍 在前面文章中已经提到,Service对集群之外暴露服务的主要方式有两种&#x...
革命烈士寄语怎么写,清明节缅怀... 革命烈士寄语怎么写目录革命烈士寄语怎么写清明节缅怀先烈的寄语有哪些呢?革命烈士寄语怎么写 革命...
5万元以下新车推荐,5万以下买... 本篇文章极速百科给大家谈谈5万元以下新车推荐,5万以下买什么车好,以及5万以下的新车哪款最好对应的知...
真皮沙发翻新一般多少钱?(真皮... 本篇文章极速百科给大家谈谈真皮沙发翻新一般多少钱?,以及真皮沙发翻新一般多少钱一个对应的知识点,希望...
磨皮什么意思(磨皮是啥?) 磨... 本篇文章极速百科给大家谈谈磨皮什么意思,以及磨皮是啥?对应的知识点,希望对各位有所帮助,不要忘了收藏...
进程间通信【Linux】 1. 进程间通信 1.1 什么是进程间通信 在 Linux 系统中,进程间通信...
从NVIDIA GTC大会,看... 从NVIDIA GTC 2023这场全球行业盛宴,我们可以解读出AI算力行业的哪些重要...
请问什么是童子,什么是童子 极... 请问什么是童子目录请问什么是童子什么是童子古代 童子是什么意思童子是什么意思?请问什么是童子 ...
中招考试考哪些科目,中招考试考... 中招考试考哪些科目目录中招考试考哪些科目中招考试考几门科目一共多少分?中考有哪些科目中考考几科,都什...
做电商如何做,电商怎样做才能赚... 做电商如何做目录做电商如何做电商怎样做才能赚钱?做的好的电商朋友可以教教我怎么做吗新手小白怎么做跨境...