MyBatis 学习笔记(一)

MyBatis 封装 JDBC :连接、访问、操作数据库中的数据

MyBatis 是一个持久层框架。

MyBatis 提供的持久层框架包括 SQLMaps 和 Data Access Objects(DAO)

  • SQLMaps:数据库中的数据和 Java数据的一个映射关系
    • 封装 JDBC 的过程
  • Data Access Objects(DAO):数据访问对象,使用JDBC 访问数据库,操作数据库中的数据

MyBatis 特性:

  1. MyBatis 是一个持久层的框架
    1. 支持定制化SQL(SQL 需要我们自己手动写)
    2. 存储过程
    3. 高级映射
  2. MyBatis 封装了JDBC
    1. 不需要我们手动写 JDBC 代码、手动设置参数、获取结果集
  3. MyBatis 可以使用简单的 XML或注解用于配置和原始映射
    1. 将接口和Java的POJO(Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录
  4. MyBatis 是一个半自动的ORM(Object Relation Mapping,对象关系映射)框架(ORM 就是将 Java中的实体对象和关系型数据库中的数据创建映射关系)
    1. Object :Java 实体对象
    2. Relation:关系型数据库
    3. Mapping :映射
    4. SQL 关系自己写,自己配置
      1. Hibernate 是一个全自动的ORM 框架
      2. JDBC 是一个全手动的ORM

MyBatis 的下载:

GitHub - mybatis/mybatis-3: MyBatis SQL mapper framework for Java

后缀是 tar.gz 是Linux 系统下的压缩文件后缀

MyBatis  和其他持久层框架的对比

MyBatis 的核心配置文件:

  • 核心配置文件:主要用于配置连接数据库的环境以及 MyBatis 的全局配置信息
  • 核心配置文件存放的位置是:src/main/resources目录下
  • 习惯上命名为:mybatis-config.xml

创建Mapper接口

MyBatis中的mapper接口相当于以前的dao。

区别是:

  • mapper 仅仅是接口,不需要提供实现类。MyBatis里面有面向接口编程
  • dao,有接口和实现类(不知道对不对)

创建MyBatis 映射文件:

ORM(Object Relationship Mapping)对象关系映射

  • 对象:Java实体类对象
  • 关系:关系型数据库
  • 映射:二者之间的对应关系

 

1.先写 mapper 接口中的方法

2.然后写mapper.xml里面的配置文件

核心配置文件:(了解)

<?xml version="1.0" encoding="UTF-8" ?>
<!--配置文件中的约束-->
<!--DOCTYPE 后面的是根标签:configuration-->
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--    配置连接数据库的环境environments:配置多个连接数据库的环境属性:default:设置默认使用的环境的id
--><environments default="development">
<!--environment:配置某个具体的环境属性:id:表示连接数据库的环境的唯一标识,不能重复 ,
--><environment id="development">
<!--            当前事务管理器,事务管理器的类型是JDBC;JDBC:事务的开启、提交和回滚都需要手动处理transactionManager:事务管理器,用来设置事务管理方式的属性:type="JDBC/MANAGED"JDBC:表示当前环境中,执行SQL时,使用的是JDBC中原生的事务管理方式,事务的提交或回滚需要手动处理MANAGED:被管理,例如被Spring管理
--><transactionManager type="JDBC"/>
<!--            数据源,连接数据库的信息。type=pooled,表示使用数据库连接池dataSource:配置数据源属性:type:设置数据源的类型type="POOLED/UNPOOLED/JNDI"POOLED:表示使用数据库连接池缓存数据库连接UNPOOLED:表示不使用数据库连接池JNDI:表示使用上下文中的数据源
--><dataSource type="POOLED"><!--设置连接数据库的驱动--><property name="driver" value="com.mysql.jdbc.Driver"/><!--设置连接数据库的连接地址--><property name="url" value="jdbc:mysql://localhost:3306/mybatis"/><!--设置连接数据库的用户名--><property name="username" value="root"/><!--设置连接数据库的密码--><property name="password" value="123456"/></dataSource></environment></environments>
<!--    引入映射文件-->
<!--    mapper 接口相当于DAODAO 的取名,和我们操作的表和实体类有关。比如实体类是User,表名是t_user,DAO接口名就是 UserDao
--><mappers><mapper resource="mappers/UserMapper.xml"/></mappers>
</configuration>

把连接数据库的信息放在properties文件中

五、MyBatis 获取参数值的两种方式(重点⭐)

设置配置文件的模板:

创建核心配置文件的模板

创建映射文件的模板 

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

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

相关文章

C++入门:从C语言到C++的过渡(3)

目录 1.内联函数 1.1内联函数的定义 1.2特性 2.auto关键字 2.1auto的简介 2.2注意事项 3.范围for 4.nullptr空指针 1.内联函数 在C语言中&#xff0c;无论使用宏常量还是宏函数都容易出错&#xff0c;而且无法调试。而C为了弥补这一缺陷&#xff0c;引入了内联函数的概…

为了“降本增效”,我用AI 5天将SpringBoot迁移到了Nodejs

背景 大环境不好&#xff0c;各行各业都在流行“降本增效”&#xff0c;IT行业大肆执行“开猿节流”&#xff0c;一顿操作效果如何&#xff1f;普通搬砖人谁会在乎呢。 为了收紧我的口袋&#xff0c;决定从头学习NodejsTypeScript&#xff0c;来重写我的Java后端服务。 其实这…

浅谈面向对象--知识补充

This关键字 this 内存图 this关键字表示当前对象本身&#xff0c;一般用于类的内部&#xff0c;其内部存在一个地址&#xff0c;指向当前初始化的对象本身。 当new一个对象时&#xff0c;实际上产生了两个引用&#xff0c;一个是供类Dog内部调用其成员变量和成员方法的this关键…

kotlinx.coroutines.debug.AgentPremain

大家好 我是苏麟 . 项目引入AI大模型 debug 出现报错 设置 勾选

配置docker阿里云镜像地址

一、安装docker的步骤&#xff1a; 1.yum install -y yum-utils 2.yum-config-manager --add-repo http://mirrors.aliyun.com/docker- ce/linux/centos/docker-ce.repo --配置阿里云仓库3.yum makecache fast4.yum install docker-ce -y5.docker version …

Vue3实战笔记(43)—Vue3组合式API下封装可复用ECharts图表组件

文章目录 前言一、封装echart图标钩子二、使用步骤总结 前言 接上文&#xff0c;已经安装好了ECharts&#xff0c;开始封装组件方便使用。 一、封装echart图标钩子 首先应用我们之前学习的钩子方式&#xff0c;在hooks目录下创建一个名为 useECharts.js 的文件&#xff0c;用…

【机器学习300问】97、机器学习中哪些是凸优化问题,哪些是非凸优化问题?

在机器学习的领域中&#xff0c;多数模型的参数估计问题实质上可以转化为优化问题。鉴于机器学习模型的多样性&#xff0c;不同的模型会对应着不同的损失函数&#xff0c;进而形成各具特色的优化问题。了解优化问题的形式和特点&#xff0c;对于提升我们求解模型参数的效率和准…

微信好友这样打标签更高效!

为什么要做标签管理? ① 通过标签管理&#xff0c;可以清晰的知道每个私域好友的关系程度&#xff0c;如哪些是忠诚客户&#xff0c;哪些是意向客户&#xff0c;哪些是刚加上的客户等等。 这样就知道下一步要怎么操作&#xff0c;做到精细化运营。如忠诚客户跟进维护&#x…

Embedding 模型的选择和微调

目录 引言 向量模型在 RAG 系统中的作用 1. 对 query 和 私域知识 进行向量化表示 2. 动态更新知识库 3. 数据隐私和安全 有哪些性能不错的向量模型 OpenAI Embedding JinaAI Embedding BAAI/bge Embedding 模型评测 MTEB 排行榜&#xff1a;https://huggingface.co…

第十六节:带你梳理Vue2: 生命周期与钩子函数

前沿: 通过前面几节的学习&#xff0c;我们已经对vue有了初步的了解&#xff0c;大致了解了vue可以帮我们干什么&#xff0c; 那么接下来我们就来看看vue的生命周期和它常用的钩子函数, 1. 理解生命周期的含义 生命周期&#xff1a;就是一个组件从实例化创建并添加到DOM树开…

读论文 | Small object detection model for UAV aerial image based on YOLOv7

目录 1、前言 2、摘要 3、论文的方法 3.1 方法描述 3.2 方法改进 3.3 本论文的模型图 3.4 本文的数据集&#xff1a; 3.5 论文实验 3.6 解决的问题 3.7 论文总结 &#xff08;1&#xff09;文章优点 &#xff08;2&#xff09;方法创新点 &#xff08;3&#xff0…

地质考察AR远程交互展示系统辅助老师日常授课

广东这片充满活力的土地&#xff0c;孕育了一家引领ARVR科技潮流的杰出企业——深圳华锐视点&#xff0c;作为一家专注于VR/AR技术研究与业务开发的先锋公司。多年来&#xff0c;我们不断突破技术壁垒&#xff0c;将AR增强现实技术与各行各业的实际需求完美结合&#xff0c;助力…

Cloneable接口和深拷贝

在java中如何对对象进行拷贝呢&#xff1f;我们可以使用Object类中的clone方法。 一、浅拷贝 在使用clone方法对对象进行拷贝的时候&#xff0c;需要注意&#xff1a; 1.需要重写clone方法&#xff1b; 2.clone方法的返回值是Object类&#xff0c;需要强制类型转化&#xf…

部门来了个测试开发,听说是00后,上来一顿操作给我看蒙了...

公司新来了个同事&#xff0c;听说大学是学的广告专业&#xff0c;因为喜欢IT行业就找了个培训班&#xff0c;后来在一家小公司实习半年&#xff0c;现在跳槽来我们公司。来了之后把现有项目的性能优化了一遍&#xff0c;服务器缩减一半&#xff0c;性能反而提升4倍&#xff01…

阅读笔记——《ProFuzzBench: A Benchmark for Stateful Protocol Fuzzing》

【参考文献】Natella R, Pham V T. Profuzzbench: A benchmark for stateful protocol fuzzing[C]//Proceedings of the 30th ACM SIGSOFT international symposium on software testing and analysis. 2021: 662-665.【注】本文仅为作者个人学习笔记&#xff0c;如有冒犯&…

C++面向对象的第二大特性:继承

1.继承的介绍 首先容我先向大家举一个列子: 我这里定义了一个Person的类 class Person { protected:string name;int age;string address;}; 在这个基础上&#xff0c;我要定义一个关于Student , Worker 的类 由于Student Worker都具有Person类中的成员变量 &#xff0c…

力扣--字符串58.最后一个单词的长度

思路分析 初始化变量: num 用于记录当前单词的长度。before 用于记录上一个单词的长度。 遍历字符串: 如果字符不是空格&#xff0c;增加 num 计数。如果字符是空格&#xff0c;检查 num 是否为 0&#xff1a; 如果 num 为 0&#xff0c;说明之前没有记录到单词&#xff0c;所以…

嵌入式学习——3——UDP TFTP简易文件传输

tftp协议概述 简单文件传输协议&#xff0c;适用于在网络上进行文件传输的一套标准协议&#xff0c;使用UDP传输 特点&#xff1a; 是应用层协议 基于UDP协议实现 数据传输模式 octet&#xff1a;二进制模式&#xff08;常用&#xff09; mail&#xff1a;已经不再支持 TFTP通信…

Qt学习记录(14)线程

前言&#xff1a; 我的臀部已经翘到可以顶起一屁股债了 为什么要使用线程 什么时候用线程 复杂的数据处理 头文件.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimer>//定时器头文件QT_BEGIN_NAMESPACE namespace Ui { class Widget; }…

Python+Flask+Pandas怎样实现任意时间范围的对比数据报表

话不多说,有图有源码: 1.上图 2.因为是低代码的,只能发重要有用的代码片段了 实现思路:1)获取指定时间范围内的数据:2)df合并 #----------年份替换----------------for syear in range(int(byear),int(eyear)1):start_datestr(syear)strbdate[4:]end_datestr(syear)stredate…