mybatis详细教程

article/2025/8/20 4:50:18

文章目录

    • @[toc]
    • 1. 概述
      • 1.1 什么是Mybatis?
      • 1.2 Mybatis 操作数据库的方式
      • 1.3 Mybatis 操作数据库的七大步骤?
      • 1.4 Mybatis 的开发优点
    • 2. Mybatis 操作数据库具体实现
      • 2.1 创建一个数据库表
      • 2.2 创建一个maven项目,配置pom.xml文件,导入相关依赖
      • 2.3 创建mybatis 核心配置文件
      • 2.4 创建与数据库对应的实体类
      • 2.5 创建数据操作持久层接口
      • 2.5-1 补充 创建数据操作持久层接口实现配置文件`UserMapper.xml`
      • 2.6 创建测试类,测试
      • 2.7 基于注解开发修改
      • 2.6 创建测试类,测试基于注解的mybatis开发
    • 运行结果

1. 概述

1.1 什么是Mybatis?

Mybatis 是一个优秀的持久层框架,是对JDBC操作数据库的过程进行了封装.

1.2 Mybatis 操作数据库的方式

  1. 可以通过xml文件的方式执行sql;
  2. 可以通过注解的方式执行SQL;

1.3 Mybatis 操作数据库的七大步骤?

  1. SQLSession 传递SQL骨架给MappedStatement
  2. 由MappedStatement 结合骨架和SQL参数映射成完整的SQL语句
  3. 将完整的SQL语句交给Executer
  4. 执行SQL语句
  5. 返回结果集给MappedStatement
  6. 封装结果集
  7. 将结果集返回给SQLSession

1.4 Mybatis 的开发优点

  1. 简化了JDBC代码
  2. 支持连接池,提高程序执行效率
  3. Mybatis 是将SQL配置在mapper文件中,修改SQL不需要重新编译
  4. 将返回结果ResultSet自动封装成java对象

2. Mybatis 操作数据库具体实现

  • 项目结构
    在这里插入图片描述

2.1 创建一个数据库表

create database mytest;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (`id` int(11) NOT NULL AUTO_INCREMENT,`NAME` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '匿名',`age` int(11) NOT NULL,`sex` varchar(1) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT '男',`address` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,`email` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `email`(`email`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '匿名', 11, '男', '1111', '11111');

在这里插入图片描述

2.2 创建一个maven项目,配置pom.xml文件,导入相关依赖

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.it</groupId><artifactId>mybatis_lean</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.5</version></dependency>
<!--        连接mysql数据库驱动,这里是8.0以上版本--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.26</version></dependency><!-- 日志 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.30</version></dependency></dependencies></project>

2.3 创建mybatis 核心配置文件

jdbc.properties文件,描述连接数据库的属性

jdbc.driver = com.mysql.cj.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/mytest
jdbc.username = root
jdbc.password = 123456

mybatis-config.xml , mybatis 核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--    导入jdbc配置资源--><properties resource="jdbc.properties"/><settings><setting name="mapUnderscoreToCamelCase" value="true"/><!-- 开启log4j来记录日志 --><setting name="logImpl" value="STDOUT_LOGGING"/></settings><environments default="test"><environment id="test">
<!--            使用jdbc管理事务  , MANAGER 是使用mybatis管理事务--><transactionManager type="JDBC"></transactionManager>
<!--开启连接池  ,   UNPOOLED 不开启--><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments>
<!--    加载映射文件 ,加载mapper文件夹下所有--><mappers><mapper resource="mapper/UserMapper.xml"></mapper></mappers>
</configuration>
  • 注意:如果mapper/*.xml 报错,把*改成具体的mapper.xml文件名称,具体原因尚未明确

2.4 创建与数据库对应的实体类

package com.it.pojo;public class User {private long id;private String name;private int age;private String sex;private String address;private String email;public User(long id, String name, int age, String sex, String address, String email) {this.id = id;this.name = name;this.age = age;this.sex = sex;this.address = address;this.email = email;}public User() {}public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", sex='" + sex + '\'' +", address='" + address + '\'' +", email='" + email + '\'' +'}';}
}

2.5 创建数据操作持久层接口

package com.it.dao;import com.it.pojo.User;
import java.util.Collection;
@Mapper
public interface UserDao {Collection<User> findAll();User findById(long id);void save(User user);void update(User user);void delete(long id);
}

2.5-1 补充 创建数据操作持久层接口实现配置文件UserMapper.xml

<?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.it.dao.UserDao"><select id="findAll" resultType="com.it.pojo.User">select * from user</select><select id="findById" resultType="com.it.pojo.User">select * from user where id = #{id}</select><insert id="save">insert into user value(#{id},#{name},#{age},#{sex},#{address},#{email})</insert><update id="update">update user set name = #{name} where id = #{id}</update><delete id="delete">delete from user where id = #{id}</delete>
</mapper>

2.6 创建测试类,测试

package com.it.test;import com.it.dao.UserDao;
import com.it.pojo.User;
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.Collection;public class Test01 {static SqlSessionFactoryBuilder builder  =new SqlSessionFactoryBuilder();static  UserDao userDao;public static void findAll(){Collection<User> all = userDao.findAll();System.out.println("查询所有结果");System.out.println("---------------------------------");for (User user:all){System.out.println(user.toString());}}public static void findById(){User user = userDao.findById(1);System.out.println("查询所有结果");System.out.println("---------------------------------");System.out.println(user.toString());}public static void save(){User user = new User(3,"ls",22,"男","llll.","000000");userDao.save(user);System.out.println("新增数据"+user.toString()+"成功");}public static void update(){User user = new User(2,"zhangs",22,null,"","");userDao.update(user);System.out.println("修改数据"+user.toString()+"成功");}public static void delete(){userDao.delete(2);System.out.println("删除成功");}public static void main(String[] args) {SqlSession session=null;SqlSessionFactory factory = null;try {factory = builder.build(Resources.getResourceAsStream("mybatis-config.xml"));session = factory.openSession();userDao = session.getMapper(UserDao.class);System.out.println("============================");findAll();System.out.println("============================");findById();System.out.println("============================");save();findAll();System.out.println("============================");update();findAll();System.out.println("============================");delete();findAll();} catch (IOException e) {e.printStackTrace();}finally {if (session!=null){session.commit();session.close();}}}
}

2.7 基于注解开发修改

修改dao层的代码,创建数据操作接口

package com.it.dao;import com.it.pojo.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;import java.util.Collection;/*** 使用注解执行sql* @author ZRY* @version 1.0*/
public interface UserDao1 {@Select("select * from user")Collection<User> findAll();@Select("select * from user where id = #{id}")User findById(long id);@Insert("insert into user value(#{id},#{name},#{age},#{sex},#{address},#{email})")void save(User user);@Update(" update user set name = #{name}  where id=#{id}")void update(User user);@Delete("delete from user where id=#{id}")void delete(long id);
}

修改核心配置文件,mybatis-config.xml
新增 <mapper class="com.it.dao.UserDao1"/>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--    导入jdbc配置资源--><properties resource="jdbc.properties"/><environments default="test"><environment id="test">
<!--            使用jdbc管理事务  , MANAGER 是使用mybatis管理事务--><transactionManager type="JDBC"></transactionManager>
<!--开启连接池  ,   UNPOOLED 不开启--><dataSource type="POOLED"><property name="dirver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments>
<!--    加载映射文件 ,加载mapper文件夹下所有--><mappers><!--        基于xml配置文件的--><mapper resource="mapper/UserMapper.xml"></mapper>
<!--        基于注解的,需要绑定类--><mapper class="com.it.dao.UserDao1"/></mappers>
</configuration>

2.6 创建测试类,测试基于注解的mybatis开发

package com.it.test;import com.it.dao.UserDao;
import com.it.dao.UserDao1;
import com.it.pojo.User;
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.Collection;public class Test02 {static SqlSessionFactoryBuilder builder  =new SqlSessionFactoryBuilder();static UserDao1 userDao1;public static void findAll(){Collection<User> all = userDao1.findAll();System.out.println("查询所有结果");System.out.println("---------------------------------");for (User user:all){System.out.println(user.toString());}}public static void findById(){User user = userDao1.findById(1);System.out.println("查询所有结果");System.out.println("---------------------------------");System.out.println(user.toString());}public static void save(){User user = new User(2,"ls",22,"男","llll","");userDao1.save(user);System.out.println("新增数据"+user.toString()+"成功");}public static void update(){User user = new User(3,"zhangs",22,null,"","");userDao1.update(user);System.out.println("修改数据"+user.toString()+"成功");}public static void delete(){userDao1.delete(2);System.out.println("删除成功");}public static void main(String[] args) {SqlSession session=null;SqlSessionFactory factory = null;try {factory = builder.build(Resources.getResourceAsStream("mybatis-config.xml"));session = factory.openSession();userDao1 = session.getMapper(UserDao1.class);System.out.println("============================");findAll();System.out.println("============================");findById();System.out.println("============================");save();findAll();System.out.println("============================");update();findAll();System.out.println("============================");delete();findAll();} catch (IOException e) {e.printStackTrace();}finally {if (session!=null){session.commit();session.close();}}}
}

运行结果

在这里插入图片描述


http://chatgpt.dhexx.cn/article/Rfw7ueZb.shtml

相关文章

MyBatis教程(看这一篇就够了)

一.全面了解Mybatis 环境变量 jdk 8 MySQL 8.0.27maven-3.6.1IDEA 2021.2.2 学习前需要掌握&#xff1a; JDBCMySQLJava基础MavenJunit&#xff08;单元测试&#xff09; 什么是MyBatis Myba是一款优秀的持久层框架MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及…

fsck命令使用

由于错误操作Linux导致系统无法正常开机&#xff0c;系统提示需要checking filesystems。如下图所示&#xff1a; 根据图中提示&#xff0c;先输入root用户密码进入root用户&#xff0c;然后在root用户中执行命令&#xff1a; fsck -f -y /dev/sda2 命令解释&#xff1a; fsc…

linux基本功之fsck命令详解

&#x1f493; 大家好&#xff0c;我是沐风晓月&#xff0c;双一流院校英语计算机双专业在读&#xff1b; &#x1f493; 想要学好Linux&#xff0c;命令是基本功&#xff0c;企业中常用的命令大约200多个&#xff0c;不管是写shell脚本还是管理操作系统&#xff0c;最常用的命…

fsck命令详解

fsck命令来自于英文词组“filesystem check”的缩写&#xff0c;其功能是用于检查与修复文件系统。若系统有过突然断电或磁盘异常的情况&#xff0c;建议使用fsck命令对文件系统进行检查与修复&#xff0c;以防数据丢失。 语法格式&#xff1a;fsck [参数] 文件系统 常用参…

hdfs fsck

转载来自&#xff1a;https://blog.csdn.net/zlfing/article/details/78070951 1.常用指令&#xff1a;打印文件块的位置信息 hdfs fsck /user/hadoop/wkz -files -blocks -locations生产实例&#xff1a;hdfs fsck *文件路径* -list-corruptfileblocks 线上环境降副本后&a…

Linux fsck 机制解析

Linux fsck 机制 0. 概述1. Upstart 方式 (ubuntu 14.04 32bit)1.1 配置fsck启动1.2 配置fsck运行参数1.3 mountall.config1.4 mountall1.5 fsck 2. Systemd 方式 (ubuntu 16.04 64bit)2.1 普通分区的fsck2.2 Root分区的fsck2.3 ext文件系统的限制2.4 强制fsck完整扫描2.5 fsck…

fsck异常

ubuntu 18 开机显示错误。&#xff08;完了&#xff0c;我的数据啊&#xff09; 莫慌&#xff01;&#xff01;&#xff01; 仔细看下报错。 原因大概是上次系统异常断电关机等非正常关机导致 磁盘损坏。 解决方法 fsck -y /dev/sdb6 sdb6为损坏的目标磁盘 修复完 重启就可以了…

Linux磁盘修复命令----fsck

linux下文件信息出现乱码&#xff0c;无法启动服务&#xff0c;也无法删除&#xff0c;改权限等等&#xff0c;那证明你的磁盘已损坏&#xff0c;需要修复&#xff0c;期间不会丢失数据&#xff0c;请放心操作 使用fsck命令修复磁盘时 一定要进入单用户模式去修复 语 法 fsck.…

fsck-磁盘修复工具

1、简介 fsck&#xff08;file system check&#xff09;用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题&#xff0c;可利用fsck命令对文件系统进行检查。 2、参数介绍 -a&#xff1a;自动修复文件系统&#xff0c;不询问任何问题&#xff1b;-A&#xff1a;依照/e…

linux命令中fsck命令 – 检查并修复Linux文件系统

fsck命令的英文全称是“filesystem check”&#xff0c;即检查文件系统的意思&#xff0c;常用于检查并修复Linux文件系统的一些错误信息&#xff0c;操作文件系统需要先备份重要数据&#xff0c;以防丢失。 Linux fsck命令用于检查并修复Linux文件系统&#xff0c;可以同时检…

压缩感知超分辨技术

1.技术原理 利用被测物体在时间、空间以及深度&#xff08;或在相应的变换域&#xff09;内的稀疏性&#xff0c;对信号进行少量的编码测量&#xff0c;而后利用重建算法还原原始信号。 实质&#xff1a;有限系统带宽下提升信息量 1.空间编码—超空间分辨率 优势&#xff1a…

压缩感知介绍

Nyquist采样定理&#xff08;香农采样定理&#xff09;指出&#xff0c;采样速率达到信号带宽的两倍以上时&#xff0c;才能由采样信号精确重建原始信号。可见&#xff0c;带宽是Nyquist采样定理对采样的本质要求。然而随着人们对信息需求量的增加&#xff0c;携带信息的信号带…

压缩感知笔记

压缩感知笔记 CS理论认为&#xff0c;我们可以从比奈奎斯特采样所需的更少的样本中恢复某些信号。如果信号在原始域或变换域中是稀疏的&#xff08;完全恢复&#xff09;或可压缩的&#xff08;近似恢复&#xff09;&#xff0c;我们可以用比奈奎斯特采样所需的更少的采样样本…

压缩感知高斯测量矩阵matlab,压缩感知的常见测量矩阵

题目:压缩感知的常见测量矩阵 下面首先给出十篇参考文献中有关测量矩阵的叙述,然后以一篇硕士论文中对七种常见测量矩阵的描述依据,给出了这七种常见测量矩阵的MATLAB实现代码,以为以后的研究提供一个参考,由于目前还没有一个简单有效的测量矩阵评价方法,因此这里给出的七…

压缩感知算法_CEALeti研发出基于压缩感知的CMOS图像传感器

据麦姆斯咨询报道&#xff0c;法国原子能委员会电子与信息技术实验室(CEA-Leti)近日发表了Wissam Benjilali的博士论文&#xff0c;题为“Exploring analog-to-information CMOS image sensor design taking advantage on recent advances of compressive sensing for low-powe…

压缩感知算法_【封面论文】基于压缩感知算法的无透镜数字全息成像研究

本文为中国激光第1780篇。 欢迎点击在看、转发,让更多人看到。 封面文章 |张华,曹良才,金国藩,白瑞迪. 基于压缩感知算法的无透镜数字全息成像研究[J]. 激光与光电子学进展, 2020, 57(8): 080001 撰稿| 曹良才 导读 来自清华大学和杜克大学的研究人员针对无透镜数字全息成像重…

压缩感知入门①从零开始压缩感知

压缩感知系列博客&#xff1a;压缩感知入门①从零开始压缩感知压缩感知入门②信号的稀疏表示和约束等距性压缩感知入门③基于ADMM的全变分正则化的压缩感知重构算法压缩感知入门④基于总体最小二乘的扰动压缩感知重构算法 文章目录 1. Problem Formulation2. Simulation3. Algo…

形象易懂讲解算法II——压缩感知

作者&#xff1a;咚懂咚懂咚 链接&#xff1a;https://zhuanlan.zhihu.com/p/22445302 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 之前曾经写过一篇关于小波变换的回答&#xff08; 能不能通俗的讲解下傅立叶分析…

CS(压缩感知)总结

CS&#xff08;压缩感知&#xff09;总结 1.符号说明2.理论内容2.1 压缩感知2.2 名词介绍2.3 压缩感知过程2.4 压缩感知问题 为满足笔者自身的需求&#xff0c;遂写了这篇博客&#xff0c;目的是总结一下对压缩感知的理解&#xff0c;记录有关压缩感知的理论知识&#xff01; 1…