Mybaties入门

文章目录

  • 介绍
    • 持久层
    • 框架
    • Jdbc缺点
    • Mybaties简化
    • 整体框架
    • ORM方式
  • Mybaties快速入门(Mapper代理)
  • 核心配置文件
  • 映射文件配置
  • 编写会话工具类

介绍

Mybaties是一款优秀的持久层框架,用于简化JDBC开发

持久层

  • 负责将数据保存到数据库的那一层代码
  • JavaEE三层架构:开发层,业务层,持久层

框架

  • 框架就是一个半成品软件,是一套可重用的,通用的,软件基础代码模型
  • 在框架的基础上构建软件编写更加高效,规范,通用,可扩展

Jdbc缺点

Snipaste_2024-04-19_20-35-38.png

Mybaties简化

Snipaste_2024-04-19_20-38-04.png

整体框架

Snipaste_2024-04-19_20-40-08.png

ORM方式

Object Relational Mapping对象关系映射
Snipaste_2024-04-19_20-41-53.png

Mybaties快速入门(Mapper代理)

  1. 先在数据库中创建表,并添加数据
  2. 创建maven工程,导入mysql,junit,mybaties坐标
  3. 在mian下面的resources下创建Mybaties核心配置文件config.xml,并将里面的代码换成自己数据库的
    1. mapper标签中resource为下面映射文件的全限定名
  4. 在main下面的java目录下创建Mapper接口
  5. 在main下面的resources下面创建和Mapper接口同名的SQL映射文件(比如第五步是com.itheima.dao.UserMapper,那么这一步在resources下创建com/itheima/dao/UserMapper.xml )
    1. :这里必须用/来分层,用.只会是一个连着的文件名,用/能确保接口和映射文件在同一目录下
  6. 在main下面的java创建实体类对象,对象的成员变量和第一步创建的表的字段一一对应(com.itheima.pojo.User)
  7. 在Mapper接口中定义方法,方法名是对应映射文件中标签的id,返回类型为实体对象的全限定名
  8. 编码进行执行
//mybaties坐标<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.1</version></dependency>
// 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><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/db8"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="com/itheima/dao/UserMapper.xml"/></mappers>
</configuration>
//SQL映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.itheima.dao.UserMapper"><select id="quaryUser" resultType="com.itheima.pojo.User">select id,name,sex from user</select>
</mapper>
//编码执行String file = "config.xml";InputStream is = Resources.getResourceAsStream(file);SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();//创建sqlf对象SqlSessionFactory sqlSessionFactory = ssfb.build(is);//创建sqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();//执行sql语句,获取代理对象UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> users = mapper.quaryUser();for (User user : users) {System.out.println(user);}sqlSession.close();

核心配置文件

Snipaste_2024-04-20_18-20-17.png
:书写标签用遵循上图的顺序

  1. properties(属性)

加载外部的java文件(properties文件)
通过properties标签resource属性引入加载外部properties文件
使用${key}获取设置的属性值

  1. settings(设置)

Snipaste_2024-04-20_19-25-33.png
还有很多可以去这里去找

  1. typeAliases(类型别名)

Snipaste_2024-04-20_19-38-40.png
package:全部小写或者与类名一致
Snipaste_2024-04-20_20-02-32.png

  1. typeHandlers(类型处理器)

Snipaste_2024-04-20_19-58-23.png
这个可以将mysql中的varchar转换成java中的String

  1. environment(环境)

Snipaste_2024-04-20_20-05-05.png
环境变量有开发(dev),测试(test),生产(prod)
事务管理器默认和jdbc的默认事务相同
数据源就是数据库连接池,使用的是POOLED

  1. mappers(映射器)

Snipaste_2024-04-20_20-10-30.png

映射文件配置

  1. select标签

Snipaste_2024-04-20_20-29-38.png
id = #{id}

  1. insert标签

Snipaste_2024-04-20_20-36-34.png

  1. update标签

Snipaste_2024-04-20_20-46-31.png

  1. delete标签

Snipaste_2024-04-20_20-54-10.png

编写会话工具类

Snipaste_2024-04-20_21-02-22.png

public class MybatiesUtil {private MybatiesUtil(){}private static SqlSessionFactoryBuilder ssfb = null;private static SqlSessionFactory sqlSessionFactory = null;static{try {InputStream is = Resources.getResourceAsStream("config.xml");ssfb =  new SqlSessionFactoryBuilder();sqlSessionFactory= ssfb.build(is);} catch (IOException e) {throw new RuntimeException(e);}}public static SqlSession openSession(){return  sqlSessionFactory.openSession();}public static SqlSession openSession(boolean flag){return  sqlSessionFactory.openSession(flag);}public static void commit(SqlSession session){session.commit();session.close();}public static void rollback(SqlSession session){session.rollback();session.close();}
}

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

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

相关文章

【双曲几何】圆盘上的三角形概念

目录 一、说明二、对偶三角形概念2.1 反演关系2.2 对偶关系2.3 找出三角形的对偶三角形 三、正交三角形概念3.1 通过对偶三角形&#xff0c;找到垂心3.2 正交三角形的概念3.3 中心射影点的概念 四、后记 一、说明 本文对双曲空间的三角形进行分析&#xff0c;本篇首先给出&am…

漆包线行业你了解多少?专业漆包线行业MES生产管理系统

今天就说说漆包线行业&#xff0c;漆包线是工业电机&#xff08;包括电动机和发电机&#xff09;、变压器、电工仪表、电力及电子元器件、电动工具、家用电器、汽车电器等用来绕制电磁线圈的主要材料。 漆包线上游是铜杆行业&#xff0c;下游是各种消费终端&#xff0c;主要是电…

代码优化实践之税率计算问题

开篇 今天的问题来自于《编程珠玑》第三章【数据决定程序结构】&#xff0c;这里提出了几条代码优化相关的原则&#xff0c;受益不浅。下面是提到的几条原则&#xff1a; 使用数组重新编写重复代码。冗长的相似代码往往可以使用最简单的数据结构——数组来更好的表述&#xff1…

C++入门之类和对象(中)

C入门之类和对象(中) 文章目录 C入门之类和对象(中)1. 类的6个默认对象2. 构造函数2.1 概念2.2 特性2.3 补丁 3. 析构函数3.1 概念3.2 特性3.3 总结 4. 拷贝构造函数4.1 概念4.2 特性4.3 总结 1. 类的6个默认对象 如果一个类中什么都没有&#xff0c;那么这个类就是一个空类。…

什么是代理IP?如何正确使用代理IP?

代理IP&#xff08;Proxy IP&#xff09;是一种网络技术&#xff0c;它允许用户通过一个中介服务器&#xff08;即代理服务器&#xff09;来访问互联网。具体来说&#xff0c;代理IP隐藏了用户的真实IP地址&#xff0c;使用第三方的IP地址进行网络访问。当用户发起网络请求时&a…

CAD小软件diy-读柴油机壳体装配图

读取一个柴油机壳体dxf图纸&#xff0c;一般这种装配体轮廓曲线都是用直线和圆弧拟合的&#xff0c;全部都是显示的白色实现&#xff0c;发现有线段间隙&#xff0c;拖动线段补上间隙。 这个测试放在蓝奏云上面 https://wwf.lanzout.com/ip1Xx1vvhbkh

tcp bbr pacing 的对与错

前面提到 pacing 替代 burst 是大势所趋&#xff0c;核心原因就是摩尔定律逐渐失效&#xff0c;主机带宽追平交换带宽&#xff0c;交换机不再能轻易吸收掉主机突发&#xff0c;且随着视频类流量激增&#xff0c;又不能以大 buffer 做带宽后备。因此&#xff0c;主机必须 pacing…

A-1:树状数组

A-1:树状数组 1.介绍Q1:树状数组解决什么问题&#xff1f;Q2:树状数组的使用1.前置知识&#xff1a;lowbit(x)2.单点修改3.求[1,n]的和4.区间查询5.hh Q3:树状数组是否优化了Q4:上图上例子解释上面说的东西(Important) 2.习题练习 1.介绍 树状数组是一个比较难以理解的高级数据…

C语言---单链表(二)

文章目录 前言1.准备工作2,打印链表、创建新的节点、销毁链表2.1.打印链表2.2.创建节点2.3.销毁链表 3.尾插、头插、尾删、头删3.1.尾插3.2.头插3.3.尾删3.4.头删 4.在特殊位置之前、之后插入、删除以及查找节点4.1.查找节点4.2.在指定位置之前插入4.3.在指定位置之后插入数组4…

亚信安全入选中国数据安全市场图谱

近日&#xff0c;全球领先的IT市场研究和咨询公司IDC发布了《IDC Market Glance&#xff1a;中国数据安全市场图谱&#xff0c;2024》报告&#xff08;以下简称“报告”&#xff09;&#xff0c;报告展示了中国数据安全市场的构成和格局&#xff0c;遴选出不同细分市场领域的主…

C语言中的结构体:从定义到传递

前言 结构体是C语言中一种重要的数据类型&#xff0c;它允许我们将不同类型的数据组合成一个整体&#xff0c;并以自定义的方式进行操作。通过结构体&#xff0c;我们可以更加灵活地管理和处理复杂的数据结构&#xff0c;从而提高程序的可读性和可维护性。本篇博客将从结构体的…

jetcache fastjson 泛型复杂对象JSON序列 ,反序列化

Jetcache fastjson 泛型复杂对象JSON序列 ,反序列化 默认的FastJson2 序列化存在问题增强FastJson 支持Encode 编码器Decode 解码器 默认的FastJson2 序列化存在问题 默认的序列化不能转换List 中的泛型数据类型, 从缓存拿取的list集合对象数据全部都转换成了JSONObject 增强F…

nginx--Nginx转发真实的IP

Nginx转发真实的IP 前言给nginx.conf 设置proxy_set_headerjava 程序里获取 前言 在使用nginx的时候可能会遇到判断是不是本机在做操作&#xff0c;这样的话web端我们是可以通过ip和端口进行远程连接的这样的话我们就需要从后端获取到真实ip来判断是不是指定的机器了&#xff…

Linux 序列化、反序列化、实现网络版计算器

目录 一、序列化与反序列化 1、序列化&#xff08;Serialization&#xff09; 2、反序列化&#xff08;Deserialization&#xff09; 3、Linux环境中的应用实例 二、实现网络版计算器 Sock.hpp TcpServer.hpp Jsoncpp库 Protocol.hpp 类 Request 类 Response 辅助函…

稳压二极管仿真实验

稳压二极管仿真实验 1、稳压管稳压实验 用Multisim搭建如下的仿真电路图&#xff0c;选用5.1V的稳压管&#xff0c;12V的直流电源&#xff0c;开启仿真后&#xff0c;12V电压将稳压管击穿&#xff0c;稳压管将两端的电压稳压到5.07V&#xff0c;该电压与限流电阻R1的阻值有关…

跟着Carl大佬学leetcode之977 有序数组的平方

来点强调&#xff0c;刷题是按照代码随想录的顺序进行的&#xff0c;链接如下https://www.programmercarl.com/本系列是记录一些刷题心得和学习过程&#xff0c;就看到题目自己先上手试试&#xff0c;然后看程序员Carl大佬的解释&#xff0c;自己再敲一遍修修补补&#xff0c;练…

msyql中SQL 错误 [1118] [42000]: Row size too large (> 8126)

场景&#xff1a; CREATE TABLE test-qd.eqtree (INSERT INTO test.eqtree (idocid VARCHAR(50) NULL,sfcode VARCHAR(50) NULL,sfname VARCHAR(50) NULL,sfengname VARCHAR(50) NULL,…… ) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_general_ci;或 alter table eqtre…

Token 在 LLM

大语言模型不能理解原始文本,所以需要把原始文本转换成大语言模型可以理解的数字表示形式,经过大模型处理以后,需要将该数字表示形式转换为人可以理解的文本。 原始文本到 token 原始文本转换为token序列的过程通常是在LLM的预处理阶段完成的。 在大型语言模型(LLM)中,tok…

力扣:LCR 022. 环形链表 II

力扣&#xff1a;LCR 022. 环形链表 II 给定一个链表&#xff0c;返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点。如果链表无环&#xff0c;则返回 null。 为了表示给定链表中的环&#xff0c;我们使用整数 pos 来表示链…

学习java时候的笔记(十九)

正则表达式 作用: 校验字符串是否满足规则在一段文本中查找满足要求的内容 字符类(只匹配一个字符) 说明[abc]只能是a,b或c[^abc]除了a,b,c之外的任何字符[a-zA-Z]a 到 z, A 到 Z(范围)[a-d[m-p]]a 到 d, 或 m 到 p[a - z && [def]]a 到 z和def的交集。为: d, e, f…