2.ORM框架----mybatis

MyBatis 3.2.2:持久层框架的进阶与文档指南 MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。对象关系映射(Object Relational Mapping,ORM)是一种编程技术,用于实现面向对象的编程语言中不同类型系统的数据之间的转换。 阅读详情

框架:程序的半成品,是某些功能的封装,简化操作,提高开发效率


一.ORM类型框架:

Object Relational Mapping 对象关系映射
在这里插入图片描述
原理:把java中的对象(的属性)和数据库中的表(中的列)进行关联映射,简化了JDBC的增删改查操作


二.mybatis框架的搭建

  • 1、新建动态web项目,拷贝jar到lib文件夹下
  • 2、在项目下 新建资源目录 在新建db.properties文件
    编写数据库的连接信息

    在这里插入图片描述
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/supermarket
user=root
pwd=cuichen975541045
  • 3、在resource下,创建mybatis的配置文件
    名字任意.xml
    mybatis-3-config.dtd dtd 文档类型声明:规定了mybatis的配置文件
    里面必须包含哪些标签,标签必须有哪些属性
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
	<!-- 1.   引入数据库连接信息的存放文件 -->
	<properties resource="database.properties"></properties>
	<!-- 2.  给实体类命名别名:可以通过别名来使用类,否则需要使用使用类的完全限定名 -->
	<typeAliases>
		<!-- 命名别名方式1 -->
		<!-- 
			<typeAlias type="cn.qf.smbms.pojo.UserRole" alias="UserRole"/>
		 -->
		 <!-- 方式2:告知Mybatis实体类的位置 -->
		 <package name="cn.qf.smbms.pojo"/>
	</typeAliases>
	<!-- 3.  配置数据库的连接信息 -->
	<environments default="mysqldb">
		<environment id="mysqldb">
			<!-- 
			配置事物管理机制
			JDBC:使用JDBC来管理事务(官方推荐)
			MANAGED:由mybatis进行事物管理
			 -->
			 <transactionManager type="JDBC">
			 	<!-- 设置是否自动提交事物:true 自动提交事务  false 非自动提交 -->
			 	<property name="autoCommit" value="true"></property>
			 </transactionManager>
			 <!-- POOLED:JDBC默认的连接管理 -->
			 <dataSource type="POOLED">
			 	<!-- 配置mybatis连接数据库信息 -->
			 	<!-- 获取数据库连接信息方式1:通过读取配置文件获取 -->
			 	<property name="driver" value="${driverClass}"/>
			 	<property name="url" value="${url}"/>
			 	<property name="username" value="${user}"/>
			 	<property name="password" value="${pwd}"/>
			 </dataSource>
		</environment>
	</environments>
	<!-- 4.   配置dao接口的映射文件位置 -->
	<mappers>
		<mapper resource="cn/qf/smbms/dao/UserMapper.xml"></mapper>
	</mappers>
</configuration>

database.properties

driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/supermarket
user=root
pwd=cuichen975541045

configuration配置:

  • properties属性
  • typeAliases类型命名别名
  • environments 环境
    • environment 环境变量
      1) transactionManager 事务管理器
      2) dataSource 数据源
  • mappers 映射器
  • 4、封装mybatis操作数据库的工具类

    mybatis的工作原理:

    1)、通过mybatis封装的流读取mybatis的xml配置文件
    2)、创建SqlSessionFactoryBuilder 对象
    生命周期:局部变量级别,创建完对象后就销毁
    作用:创建SqlSessionFactory
    3)、通过步骤2得到SqlSessionFactory
    生命周期:和程序一致,只要程序运行SqlSessionFactory就存在
    作用:创建访问数据库的session
    4)、通过SqlSessionFactory 得到session对象
    作用:通过session来完成数据库的增删改查操作
    生命周期:当session的关闭方法调用后,session消失,
    【说明】在session关闭之前可以进行多个SQL操作
    session是线程级别

package cn.qf.smbms.util;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtil {
	private static SqlSessionFactory factory;
	
	//通过静态代码块读取配置文件
	static {
		try {
			//通过流读取配置文件
			InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
			factory=new SqlSessionFactoryBuilder().build(is);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//获取session的方法
	public static SqlSession getSqlSession() {
		return MyBatisUtil.factory.openSession();
	}
	
	//关闭session的方法
	public static void closeSqlSession(SqlSession session) {
		if (session!=null) {
			session.close();
		}
	}
}

  • 5、创建实体类
    别名注解 属性名最好和列名一致

  • 6、编写dao
    【说明】 1)、mybatis基于接口编程
    2)、mybatis基于SQL 编写实体类和表映射的文件

在映射文件中 通过namespace把映射文件和接口进行关联

dao层
UserDao.java

package cn.qf.smbms.dao;

import cn.qf.smbms.pojo.User;

//编写关于smbms_user表的增删改查方法
public interface UserDao {
	
	//添加方法
	public int addUser(User user);
	
	//修改方法
	public int updateUser(User user);
	
	//删除方法
	public int deleteUser(int id);
}

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="cn.qf.smbms.dao.UserDao">
	<!-- 接口中的每一个方法,在此映射文件中,都要有与之关联的sql语句 -->
	<!-- 
		id:对应接口中的方法名
		patameterType:方法的参数类型
		对应insert update delete 的返回值默认是int类型,无需设置
	 -->
	 <insert id="addUser" parameterType="User">
	 	<!-- 编写sql语句 -->
	 	insert into smbms_user(userCode,userName,userPassword)
	 	values
	 	(#{userCode},#{userName},#{userPassword})
	 </insert>
	 <update id="updateUser" parameterType="User">
	 	update smbms_user set userCode=#{userCode},userName=#{userName}
	 	where id=#{id}
	 </update>
	 <delete id="deleteUser" parameterType="Integer">
	 	delete from smbms_user where id=#{id}
	 </delete>
</mapper>

service层:(一定要加try-catch!!!)

	public boolean addUser(User user) {
		//调用dao中的方法
		//mybatis把dao中的接口及接口的关联文件自动生成实现类,且实现接口中的方法
		//1.通过工具类得到sqlsession
		SqlSession session=null;
		int ret=0;
		try {
			session = MyBatisUtil.getSqlSession();
			//利用反射 调用的是实现类的方法
			ret = session.getMapper(UserDao.class).addUser(user);
			//提交事务
			session.commit();
		}catch(Exception ex){
			ex.printStackTrace();
			//回滚事务
			session.rollback();
		}finally {
			//关闭session
			MyBatisUtil.closeSqlSession(session);;
		}
		if (ret==1) {
			return true;
		}else {
			return false;
		}
	}
	
	public boolean update(User user) {
		SqlSession session = null;
		int ret=0;
		try {
			session = MyBatisUtil.getSqlSession();
			ret = session.getMapper(UserDao.class).updateUser(user);
			session.commit();
		}catch(Exception ex){
			ex.printStackTrace();
			session.rollback();
		}finally {
			MyBatisUtil.closeSqlSession(session);
		}
		if (ret==1) {
			return true;
		}else {
			return false;
		}
	}
	
	public boolean deleteUser(int id) {
		SqlSession session = null;
		int ret = 0;
		try {
			session = MyBatisUtil.getSqlSession();
			ret = session.getMapper(UserDao.class).deleteUser(id);
			session.commit();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			session.rollback();
		} finally {
			MyBatisUtil.closeSqlSession(session);
		}
		if (ret==1) {
			return true;
		}else {
			return false;
		}
	}

在这里插入图片描述

SpringBoot 通过 JMS 集成 IBM MQ IBM MQ 作为老牌的企业级消息中间件,虽然在当下云原生时代已不再是主流选择,但在金融、银行、保险等传统行业的核心业务系统中仍然占据着重要地位。这些行业对系统的稳定性、可靠性和事务一致性有着极高的要求,IBM MQ 正是在这些方面表现出色。尽管近年来 RabbitMQ、Apache Kafka 等新一代消息中间件在新兴项目中更受欢迎,但许多金融公司和大型企业仍在使用 IBM MQ 作为核心业务系统的消息传递基础设施。 阅读详情

相关推荐

别再只跑Demo了!用MovieLens数据集完整复现一个电影推荐系统(Python/Pandas实战)

本文详细介绍了如何利用MovieLens数据集从零构建一个完整的电影推荐系统,涵盖数据清洗、特征工程、推荐算法实现(协同过滤和矩阵分解)以及Web服务部署的全流程。通过Python和Pandas实战,读者可以掌握推荐系统的核心技术和生产环境部署技巧,不再局限于简单的Demo运行。

weixin_29062865的博客 150

Android Studio 实现登录注册-源代码 二(Servlet + 连接MySql数据库)

Android 项目当中设置明文传输, 在MyEclipse当中创建Web项目, 在Android Studio当中调用Servlet, 实现登录注册

程序员猫爪 8676

【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Pytorch-DirectML篇)】

这篇是之前Tensorflow-DirectML的姊妹篇,如果对TF感兴趣的可以搜索我的博文。 首先我们丢一个官网地址,但是官网那个会误导新人如果你按那个操作的话。 https://docs.microsoft.com/en-us/windows/ai/directml/gpu-pytorch-windows 这里用我的方法操作: 首先声明一下,因为我的显卡是AMD RX6600,不带XT(性能和RTX3060 12G版本半斤八两),所以目前没有最新的WSL2驱动,如果有了的话欢迎告知我,所以我这里就.

weixin_44029053的博客 2万+

SSH框架增加事务处理(以原有的SSH框架登录)

applicationCotext.xml增加配置 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:a

MZ199290的博客 884

IEC61850实战:从ICD文件解析到模型构建

本文深入解析IEC61850标准中的ICD文件结构,从Header、IED到DataTypeTemplates部分,详细介绍了如何构建电力自动化设备的数据模型。通过实战案例展示ICD文件的创建过程,并分享常见问题的调试技巧,帮助工程师快速掌握IEC61850建模方法,提升电力系统自动化项目的实施效率。

weixin_26841743的博客 497

NXP KW47蓝牙MCU低功耗实测:从8μA睡眠到5年续航的优化实战

在物联网和嵌入式系统开发中,低功耗设计是决定电池供电设备续航能力的关键技术。其核心原理在于通过事件驱动、状态机管理和精细的电源域控制,使设备在空闲时进入深度睡眠,仅在需要时快速唤醒工作,从而将平均电流从毫安级降至微安级。这项技术的工程价值在于能够实现纽扣电池供电设备长达数年的使用寿命,广泛应用于智能家居传感器、可穿戴设备、资产追踪和工业监测等领域。以NXP KW47系列无线MCU为例,其集成的Arm Cortex-M33双核与专用射频单元,配合多级睡眠模式和高效DC-DC转换器,为超低功耗蓝牙应用提供了硬件

weixin_30162121的博客 257

javaee期末复习选择题

javaee复习题(选择)

weixin_53912482的博客 1万+

大数据实时+离线项目架构----智慧物流大数据平台(超流行框架!)

智慧物流大数据平台 文章目录智慧物流大数据平台一、项目背景二、逻辑架构三、解决方案技术亮点:数据流转四、项目的技术选型4.1流式处理平台4.2 分布式计算平台4.3 海量数据存储框架软件版本总结 一、项目背景 本项目基于一家大型物流公司研发的智慧物流大数据平台。该物流公司是国内综合性快递、物流服务商,并在全国各地都有覆盖的网点。经过多年的积累、经营以及布局,拥有大规模的客户群,日订单达上千万。如此规模的业务数据量,传统的数据处理技术已经不能满足企业的经营分析需求。公司需要基于大数据技术构建数据中心,从而挖

weixin_48143996的博客 6431

mybatis —— ORM框架

什么是框架 框架是一种经过校验、具有一定功能的半成品软件品,已经对基础的代码进行了封装并提供相应的API,开发者在使用框架是直接调用封装好的api可以省去很多代码编写,从而提高工作效率和开发速度。 什么是ORM ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体 对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交 道,只需简单的操作对象的属性和方法。 ...

weixin_46610000的博客 4287

【拼多多笔试题汇总】2024-03-24-拼多多春招笔试题

A 小镇上有个奇特的游戏。游戏开始时,A 先生准备了一排 nnn 个物品。K 小姐和卢小姐则轮流进行操作。首先,K 小姐可以选择移除至多 xxx 个物品。接着,卢小姐也可以选择移除剩余物品中的至多 yyy 个。游戏的目标是,K 小姐想尽量让剩余物品的价值之和最大化,而卢小姐则想将剩余物品的价值之和最小化。假设两人都采取最优策略,请问最后剩余物品的价值之和是多少?第一行包含五个正整数 n,m,k,x,yn, m, k, x, yn,m,k,x,y,分别表示物品的总数、K 小姐最多可移除的物品数、卢小姐最多可移

春秋招笔试突围 1万+

Label Studio 数据标注平台,大模型预训练与微调必备

摘要:LabelStudio是一款开源数据标注工具,支持文本、图像等多种数据类型的标注。本文介绍了其安装方法(通过conda创建环境并pip安装)、基础使用流程(创建项目、导入数据、设置标签、标注导出)以及AI自动标注功能的实现。重点讲解了如何通过MLBackend集成LangChain模型实现自动标注:创建自定义模型类、构建预测链、处理返回结果,最后配置到LabelStudio项目中。该功能可显著提升标注效率,标注人员只需在AI预测结果基础上进行修正。

技术引领业务创新 290

MyBatis不是完整的ORM框架

ORM框架:因为对象之间可以存在关联和继承关系,但是在数据库中,关系数据无法表达多对多关联和继承关系。(ps:在数据库原理中,会把逻辑上的多对多转换为多个一对关系才能实现)因此,对象和关系(业务实体的两种表现形式)想要映射正确,项目系统一般以中间件的形式,即持久层框架。 JPA:JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对...

yiyiLy的博客 3706

【WorkBuddy专栏25】如何选择大模型——积分消耗、用途场景、选型决策全指南

【WorkBuddy专栏25】如何选择大模型——积分消耗、用途场景、选型决策全指南

AI人人懂 946

Java-21 深入浅出 MyBatis 手写ORM框架2 手写Resources、MappedStatment、XMLBuilder等

本篇是手写 MyBatis 系列的第二篇,聚焦"框架骨架与 XML 解析层"的实现。在上一篇梳理了原始 JDBC 在连接管理、SQL/参数硬编码、结果集映射、事务、缓存、连接池等方面的 6 大痛点之后,本篇正式落地简化版 ORM 的工程结构:使用端只需维护 `resources/sqlMapConfig.xml`(描述数据源 + 加载 mapper.xml)和 `resources/mapper.xml`(描述具体 SQL、`namespace`、`parameterType`、`resultType`);

谢谢你的喜欢 我们一起无限进步 2700

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ORM框架系列——Mybatis2——工作原理与执行流程

🔥本篇概览:详细讲解了mybatis的工作原理和执行流程。🌈⭕🔥

做一个善良的人,做好自己的事,如果愿意,再发一份光。 991

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

[特殊字符]JAVA 最好用的基于 mybatis 的 ORM 框架,1.10.2 正式发布 绝对不能错过!!!

2 . 不使用 join 使用 @Fetch 注解 + fetchFilter 方法实现 将 A JOIN B 变成 query A + query B。1:为了更好的 JAVA+XML 结合,query 和 where 增加 tableAs (实体类,别名) 方法,用于自定义表名别名。4:强大的各种数据库适配,可在一套代码中 实现多个数据库适配;3:良好的扩展能力:orm+sql 模板 (让 ORM 框架不再死板,扩展性极强)2:代码分页,xml 还可以分页(可以不用 pagehelper 了)

Ai东的博客 612

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

[特殊字符] xbatis ORM 框架 1.9.2 正式发布,一款最好用的基于 mybatis 的 ORM 框架!!

2 . 不使用 join 使用 @Fetch 注解 + fetchFilter 方法实现 将 A JOIN B 变成 query A + query B。1:为了更好的 JAVA+XML 结合,query 和 where 增加 tableAs (实体类,别名) 方法,用于自定义表名别名。3:良好的扩展能力:orm+sql 模板 (让 ORM 框架不再死板,扩展性极强)4 . 使用 SQL 模板,让你 ORM 更简单更容易扩展,再也不怕被框架限制了。6:极简的 api 设计,让开发者 不再迷糊。

Ai东的博客 536

※【mybatis-mp】一款非常好用的 ORM 框架:1.7.2 发布!

2 . 不使用 join 使用 @Fetch 注解 + fetchFilter 方法实现 将 A JOIN B 变成 query A + query B。5:强大的各种数据库适配,可在一套代码中 实现多个数据库适配;3:良好的扩展能力:orm+sql 模板 (让 ORM 框架不再死板,扩展性极强)4 . 使用 SQL 模板,让你 ORM 更简单更容易扩展,再也不怕被框架限制了。7:还很多很多独特优良的设计,只有前往体验,才能感受了;1 . 多表 join A 内嵌 B B 内嵌 C 都可以。

Ai东的博客 368

MyBatis框架

框架是一个提供了可重用的公共结构的半成品,降低了培训成本和软件的维护成本,在结构统一和创造力之间维持合适的平衡。 当前的主流框架 Struts 2 框架:Struts 2 已WebWork优秀的设计思想为核心,吸收了Struts的部分优点,提供了一个更加整洁的基于MVC设计模式实现的Web应用程序框架 Hibernate框架 Hibernate是一个优秀的持久化框架,负责简化数据保存到数据库中,或...

weixin_44309602的博客 200

一款超级强大的 ORM 框架 mybatis-mp 1.6.2 正式发布

一款超级强大的 ORM 框架 mybatis-mp 1.6.2 正式发布

Ai东的博客 648

Java EE部分-- 各框架对比与项目优化

● 请简单介绍一下你了解的Java领域中的Web Service框架都有哪些? 考察点:框架 参考回答: Java领域的Web Service框架很多,包括Axis2(Axis的升级版本)、Jersey(RESTful的Web Service框架)、CXF(XFire的延续版本)、Hessian、Turmeric、JBoss SOA等,其中绝大多数都是开源框架。 ● 请简述一下My...

weixin_30619101的博客 153

java mvc 开源框架有哪些_Java Web项目MVC开源框架SSH和SSM比较

SSH和SSM定义SSH通常指的是 Struts2 做控制器(controller),spring管理各层的组件,hibernate负责持久化层。SSM则指的是 SpringMVC 做控制器(controller),Spring 管理各层的组件,MyBatis 负责持久化层。共同点:1.Spring依赖注入DI来管理各层的组件。2.使用面向切面编程AOP管理事物、日志、权限等。不同点:1....

weixin_35193131的博客 477

框架和MyBatis介绍

了解MyBatis及其他一些概念 一、框架的概念 框架(framework)是一个提供了可重用的公共结构的半成品。它为我们构建新的应用程序提供了最大的便利。一方面提供了拿来就用的工具,更重要的是,提供了可重用的设计。 框架技术是一个应用程序的半成品,提供了可重用的公共结构,按一定规则组织的一组组件。 框架的意义:减少重复劳动 便于团队合作 增强安全性 二、数据持久化概念 数据持久化是将内存...

qq_44066201的博客 256

SpringBoot 2.1.5(36)---整合Mybatis

一起来学 SpringBoot 2.x | 第七篇:整合Mybatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射,几乎避免了所有的 JDBC 代码和手动设置参数以及获取结果集,使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录,...

zhangbijun1230的专栏 693

初识MyBatis框架

将内存中有用的数据以某种技术保存起来,并且可以再次取出来用(例如说:以文件的方式保存)是一种在关系型数据库和面向对象编程语言之间进行的数据转换的编程技术。

qq_73164304的博客 187

关于MyBatis框架

MyBatis 框架是一个基于ORM( Obiect RelationalMapping 对象/关系映射)的优秀的持久化框架但是,MyBatis 框架不是一个完整的 ORM 实现,而是一种半自动化的 ORM 实现。MyBatis 框架的主要特点是 SQL映射器机制。MyBatis 架使用XML 或注解将Java 中的接口和POJO Ordinary java Object, 普通的java对象)与 SQL 语句结合在一起,使用灵活、简单易学、性能优秀,并且随着互联网企业和应用的兴起而得到广泛应用。

a3073385740的博客 112
上一篇: 1.maven
下一篇: 3.mybatis下的查询
cuichen97
博客等级 码龄7年 34粉丝 209原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值