二、【MyBatis】 MyBatis入门与简单使用

二、【MyBatis】 MyBatis入门与简单使用

二、【MyBatis】 MyBatis入门与简单使用一、什么是ORM二、为什么mybatis是半自动的ORM框架2.1 Hibernate优点2.2 Hibernate缺点2.3 MyBatis与Hibernate区别三、Mybatis快速入门3.1 项目引入Maven相关依赖3.2 创建测试数据库3.3 编写数据源配置文件3.4 根据数据表生成对应POJO类3.5 编写核心配置文件3.6 测试数据库连通性3.7 编写数据表对应接口3.8 编写映射配置文件3.9 核心配置文件加载映射配置文件3.10 完整核心配置文件3.11 完整测试四、总结

一、什么是ORM

Object Relation Mapping 对象关系映射。对象指的是JAVA对象,关系指的是数据库中的关系模型,对象关系映射,指的就是在JAVA对象和数据库的关系模型之间建立一种对象个关系,比如用一个Java的User类,去对应数据库中的一张表goyeer_user类,类中的属性和表中的列一一对应。User类就对应goyeer_userk类中的一行数据。

二、为什么mybatis是半自动的ORM框架

用Mybatis进行开发,需要手动编写SQL语句。而全自动的ORM框架,如Hibernate,则不需要编写SQL语句。用Hibernate开发,只需要定义好ORM映射关系,就可以直接进行CRUD操作。

2.1 Hibernate优点

  • 开发者不需要熟练地操作SQL语句的编写。Hibernate会根据指定的存储逻辑,自动的生成对应的SQL,并调用JDBC接口执行,所以其开发效率高于Mybatis。

2.2 Hibernate缺点

  • 在多表关联时,对SQL查询的支持较差;

  • 更新数据时,需要发送所有字段;

  • 不支持存储过程;

  • 不能通过优化SQL来优化性能等;

这些问题导致其只适合在场景不太复杂且对性能要求不高的项目中使用。

2.3 MyBatis与Hibernate区别

  • Mybatis 和 hibernate 不同,它不完全是一个 ORM 框架,因为 MyBatis 需要程序员自己 编写 Sql 语句,不过 mybatis 可以通过 XML 或注解方式灵活配置要运行的 sql 语句,并将 java 对象和 sql 语句映射生成最终执行的 sql,最后将 sql 执行的结果再映射生成 java 对 象。

  • Mybatis 学习门槛低,简单易学,程序员直接编写原生态 sql,可严格控制 sql 执行性 能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运 营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的 前提是 mybatis 无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定 义多套 sql 映射文件,工作量大。、

  • Hibernate 对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如 需求固定的定制化软件)如果用 hibernate 开发可以节省很多代码,提高效率。但是 Hibernate 的缺点是学习门槛高,要精通门槛更高,而且怎么设计 O/R 映射,在性能和对象 模型之间如何权衡,以及怎样用好 Hibernate 需要具有很强的经验和能力才行。 总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都 是好架构,所以框架只有适合才是最好。

三、Mybatis快速入门

3.1 项目引入Maven相关依赖

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version>
</dependency>
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version>
</dependency>
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version>
</dependency>

3.2 创建测试数据库

DROP TABLE IF EXISTS `school`;
CREATE TABLE `school` (`Id` int(11) NOT NULL AUTO_INCREMENT,`schoolid` varchar(255) DEFAULT NULL,`schoolcode` varchar(255) DEFAULT NULL,`schoolname` varchar(255) DEFAULT NULL,`province` varchar(255) DEFAULT NULL,PRIMARY KEY (`Id`)
) ENGINE=MyISAM AUTO_INCREMENT=2786 DEFAULT CHARSET=utf8mb4;

3.3 编写数据源配置文件

编写 src/main/resources/jdbc.properties数据库连接文件

# 数据库驱动
jdbc.driver=com.mysql.cj.jdbc.Driver 
#jdbc:mysql://IP地址:接口地址/数据库
jdbc.url=jdbc:mysql://localhost:3306/school_db
#登录名
jdbc.username=root
#密码
jdbc.password=123456

3.4 根据数据表生成对应POJO类

package org.goyeer.domain;
@Data
public class School {public int id;public String schoolId;public String schoolCode;public String schoolName;public String province;
}

3.5 编写核心配置文件

src/main/resources/mybatis-config.xml

<?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><!--这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置--><properties resource="jdbc.properties"/><!--MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。--><!--默认使用的环境 ID(比如:default="development")。--><environments default="development"><!--每个 environment 元素定义的环境 ID(比如:id="development")。--><environment id="development"><!--事务管理器的配置(比如:type="JDBC")。--><!--事务管理器(transactionManager)在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。这两种事务管理器类型都不需要设置任何属性。它们其实是类型别名,换句话说,你可以用 TransactionFactory 接口实现类的全限定名或类型别名代替它们。--><transactionManager type="JDBC"/><!--数据源的配置(比如:type="POOLED")--><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>
</configuration>

3.6 测试数据库连通性

@Test
public void testConetion() throws IOException {// 核心配置文件classpath路径String resource = "mybatis-config.xml";// 加载配置文件Reader reader = Resources.getResourceAsReader(resource);// 构建会话工厂SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);// 从SqlSessionFactory对象中获取SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();System.out.println(sqlSession.getConnection());// 归还连接给数据源sqlSession.close();
}

3.7 编写数据表对应接口

com.goyeer.repository.mapper;

package com.goyeer.repository.mapper;
import com.goyeer.domain.School;
import java.util.List;
public interface SchoolMapper {List<School> findAll();School selectOne(int id);
}

3.8 编写映射配置文件

src/main/resources/mapper/SchoolMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace=" com.goyeer.repository.mapper.SchoolMapper"><select id="findAll" resultType="org.goyeer.domain.School">select * from school</select><select id="selectOne" resultType="org.goyeer.domain.School">select * from school where id =#{id}</select>
</mapper>

3.9 核心配置文件加载映射配置文件

<mappers><mapper resource="mapper/SchoolMapper.xml"></mapper>
</mappers>

3.10 完整核心配置文件

<?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><properties resource="jdbc.properties"/><environments default="development"><environment id="development"><transactionManager type="JDBC"/><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><mappers><mapper resource="mapper/EduSchoolMapper.xml"></mapper></mappers>
</configuration>

3.11 完整测试

@Test
public void tstFindAll() throws Exception {String conf_path = "mybatis-config.xml";InputStream resourceStream = Resources.getResourceAsStream(conf_path);SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(resourceStream);SqlSession session = sessionFactory.openSession();SchoolMapper mapper = session.getMapper(SchoolMapper.class);List<School> schools = mapper.findAll();
}

四、总结

我们可以使用Mybatis的注解开发一些简单映射语句,这样可以是代码显得更加简介。对于稍微复杂一点的语句Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/115629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sealos一键部署K8S环境(sealos3.0时代教程过时了,目前已经4.0了,请移步使用Sealos一键安装K8S)

1 安装Sealos(4.0版本) sealos部署k8s贼方便&#xff0c;只需要一条init命令即可&#xff0c;3分钟部署完&#xff08;下载安装包的时间不算&#xff09;。 官方教程&#xff1a;https://www.sealyun.com/instructions/1st #主机名&#xff1a; hostnamectl set-hostname mas…

PROSTATEx-2 上前列腺癌的 3D CNN 分类

内容 本文介绍了在多参数 MRI 序列上使用 3D CNN 对前列腺癌进行显着性或不显着性分类。内容如下: 数据集描述Dicom 到 Nifti 文件格式的转换不同 MRI 序列的联合配准

redis底层数据结构

总所周知&#xff0c;redis支持五种数据类型String、Hash、List、Set、ZSet。在支持这些复杂数据结构的同时&#xff0c;redis不仅需要保证读写的性能&#xff0c;还能提供各种微操作&#xff0c;比如直接修改Hash字典中的某个field的值&#xff0c;或者直接往ZSet中插入某个值…

【人工智能Ⅰ】2-知识表示

【人工智能Ⅰ】2-知识表示 知识是智能的基础 一阶谓词逻辑、产生式、框架等知识表示方法 文章目录 【人工智能Ⅰ】2-知识表示2.1 知识与知识表示的概念知识的概念知识的特性 2.2 一阶谓词逻辑表示法谓词谓词公式一阶谓词逻辑知识表示方法一阶谓词逻辑表示法的特点 2.3 产生式…

Failed to start The nginx HTTP and reverse proxy server.

本章教程主要分享一下&#xff0c;当nginx 启动时&#xff0c;遇到报这个错误时的一个解决问题思路。 目录 1、观察报错信息 2、尝试性解决 1、观察报错信息 根据日志的信息&#xff0c;我们至少可以知道2个比较信息。 1、操作用户执行命令是在非root权限下进行操作的。 2、Ad…

Xcode14创建github远程仓库Token

1.点击Create a Token on GitHub 2.在打开的网页中,登陆GitHub 3.点击生成Token 这是不能为空 4.Token创建成功如下: 5.复制Token到Xcode然后点击Sign In登陆 正在创建远程我仓库 正在将本地仓库代码推入远程仓库 创建成功

C++项目——云备份-②-第三方库认识

文章目录 专栏导读1. json 认识1.1 JSON 数据结构的特点 2. jsoncpp库认识3. json实现序列化案例4. json实现反序列化案例5. bundle文件压缩库认识6. bundle库实现文件压缩案例7.bundle库实现文件解压缩案例8.httplib库认识9. httplib库搭建简单服务器案例10. httplib库搭建简单…

YOLO目标检测——密集人群人头检测数据集【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;在公共场所&#xff0c;如车站、商场、景区等&#xff0c;可以通过人头目标检测技术来监测人群流量数据集说明&#xff1a;人头检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注…

聊聊KafkaListener的实现机制

序 本文只要研究一下KafkaListener的实现机制 KafkaListener org/springframework/kafka/annotation/KafkaListener.java Target({ ElementType.TYPE, ElementType.METHOD, ElementType.ANNOTATION_TYPE }) Retention(RetentionPolicy.RUNTIME) MessageMapping Documented …

python实现excel的数据提取

一文带你实现excel表格的数据提取 今天记录一下如何使用python提取Excel中符合特定条件的数据 在数据处理和分析的过程中&#xff0c;我们经常需要从Excel表格中提取特定条件下的数据。Python的pandas库为我们提供了方便的方法来进行数据查询和过滤。 Pandas 是 Python 语言…

SELECT COUNT(*) 会造成全表扫描吗?

前言 SELECT COUNT(*)会不会导致全表扫描引起慢查询呢&#xff1f; SELECT COUNT(*) FROM SomeTable 网上有一种说法&#xff0c;针对无 where_clause 的 COUNT(*)&#xff0c;MySQL 是有优化的&#xff0c;优化器会选择成本最小的辅助索引查询计数&#xff0c;其实反而性能…

LeetCode 面试题 10.10. 数字流的秩

文章目录 一、题目二、C# 题解 一、题目 假设你正在读取一串整数。每隔一段时间&#xff0c;你希望能找出数字 x 的秩(小于或等于 x 的值的个数)。请实现数据结构和算法来支持这些操作&#xff0c;也就是说&#xff1a; 实现 track(int x) 方法&#xff0c;每读入一个数字都会调…

基于深度学习实现一张单图,一个视频,一键换脸,Colab脚本使用方法,在线版本,普通人也可以上传一张图片体验机器学习一键换脸

基于深度学习实现一张单图,一个视频,一键换脸,Colab脚本使用方法,在线版本,普通人也可以上传一张图片体验机器学习一键换脸。 AI领域人才辈出,突然就跳出一个大佬“s0md3v”,开源了一个单图就可以进行视频换脸的项目。 项目主页给了一张换脸动图非常有说服力,真是一图…

aarch64-poky-linux-gcc交叉编译报错缺少头文件.h解决方案

0x00 前言 演示用操作系统&#xff1a;Ubuntu 18.04.6 LTS \n \l aarch64-poky-linux-gcc版本&#xff1a;gcc version 10.2.0 (GCC) 最后更新日期&#xff1a;2023-10-19 0x01 解决方案 aarch64-poky-linux-gcc交叉编译时报错缺少头文件.h可能是因为没有设置--sysroot编译…

JavaScript从入门到精通系列第二十三篇:JavaScript中的数组

前言 1&#xff1a;对象的分类 在JavaScript中&#xff0c;对象可以分为以下几种类型&#xff1a; 内置对象&#xff1a;这些对象是由JavaScript引擎提供的&#xff0c;如Object、Array、String、Date、RegExp等。 宿主对象&#xff1a;这些对象是由宿主环境&#xff08;浏览…

Fiber Golang:Golang中的强大Web框架

揭示Fiber在Go Web开发中的特点和优势 在不断发展的Web开发领域中&#xff0c;选择正确的框架可以极大地影响项目的效率和成功。介绍一下Fiber&#xff0c;这是一款令人印象深刻的Golang&#xff08;Go语言&#xff09;Web框架。以其飞快的性能和强大的特性而闻名&#xff0c;…

【算法训练-动态规划 一】【应用DP问题】零钱兑换、爬楼梯、买卖股票的最佳时机I、打家劫舍

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【动态规划】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

VR虚拟现实技术在法院技能培训中的应用

开展法治宣传教育&#xff0c;是全面贯彻落实科学发展观的重要决策&#xff0c;也是保障和促进经济设备会发展和实施“十一五”规划的内在要求。为了让全民法治文化宣传深入人们群众中&#xff0c;突破性地采用VR虚拟现实、web3d开发和三维仿真技术&#xff0c;开发线上法治文化…

大数据技术学习笔记(二)—— Hadoop运行环境的搭建

目录 1 准备模版虚拟机hadoop1001.1 修改主机名1.2 修改hosts文件1.3 修改IP地址1.3.1 查看网络IP和网关1.3.2 修改IP地址 1.4 关闭防火墙1.5 创建普通用户1.6 创建所需目录1.7 卸载虚拟机自带的open JDK1.8 重启虚拟机 2 克隆虚拟机3 在hadoop101上安装JDK3.1 传输安装包并解压…

<蓝桥杯软件赛>零基础备赛20周--第1周

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列。 每个周末发1个博客&#xff0c;共20周&#xff0c;到明年3月初结束。跟上本博客的节奏&#xff0c;省赛三等奖跑不掉。 每周3…