Mybatis(一)之概述

MyBatis框架从入门到精通(一)MyBatis概述 在文献中看到的framework被翻译为框架Java常用框架:SSM三大框架:Spring + SpringMVC + MyBatisSpringBoot等。。框架其实就是对通用代码的封装,提前写好了一堆接口和类,我们可以在做项目的时候直接引入这些接口和类(引入框架),基于这些现有的接口和类进行开发,可以大大提高开发效率。框架一般都以jar包的形式存在。(jar包中有class文件以及各种配置文件等。 阅读详情

Mybatis的介绍

mybatis就是一个封装来jdbc的持久层框架,它和hibernate都属于ORM框架,但是具体的说,hibernate是一个完全的orm框架,而mybatis是一个不完全的orm框架。

Mybatis让程序员只关注sql本身,而不需要去关注如连接的创建、statement的创建等操作。

Mybatis会将输入参数、输出结果进行映射。


Mybatis与Hibernate的区别及各自应用场景

Mybatis技术特点:
1、  通过直接编写SQL语句,可以直接对SQL进行性能的优化;
2、  学习门槛低,学习成本低。只要有SQL基础,就可以学习mybatis,而且很容易上手;
3、  由于直接编写SQL语句,所以灵活多变,代码维护性更好。
4、  不能支持数据库无关性,即数据库发生变更,要写多套代码进行支持,移植性不好。
5、  需要编写结果映射。
Hibernate技术特点:
1、  标准的orm框架,程序员不需要编写SQL语句。
2、  具有良好的数据库无关性,即数据库发生变化的话,代码无需再次编写。
3、  学习门槛高,需要对数据关系模型有良好的基础,而且在设置OR映射的时候,需要考虑好性能和对象模型的权衡。
4、  程序员不能自主的去进行SQL性能优化。
Mybatis应用场景:
需求多变的互联网项目,例如电商项目。

Hibernate应用场景:
需求明确、业务固定的项目,例如OA项目、ERP项目等。

分析JDBC的问题

1、 在创建连接时,存在硬编码
解决:配置文件(全局配置文件)
2、 在执行statement时存在硬编码
解决:配置文件(映射文件)
3、 频繁的开启和关闭数据库连接,会造成数据库性能下降。
解决:数据库连接池(全局配置文件)


Mybatis的框架原理

这里写图片描述


入门案例一

数据库
这里写图片描述
这里写图片描述
1.创建普通的Java项目,导入Mybatis的jar包、mysql驱动包以及Junit包
目录结构如下
这里写图片描述
2.关键的是Mybatis的全局配置文件(MybatisConfig.xml)以及映射文件(User.xml),文件命名无硬性要求

<!-- MybatisConfig.xml -->
<?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>
    <!-- 加载java的配置文件或者声明属性信息 -->
    <properties resource="db.properties">
        <property name="db.username" value="root" />
        <property name="db.password" value="root" />
    </properties>
    <!-- 配置mybatis的环境信息,与spring整合时,该信息由spring来管理 -->
    <environments default="development">
        <environment id="development">
            <!-- 配置JDBC事务控制,由mybatis进行管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源,采用mybatis连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="${db.driver}" />
                <property name="url" value="${db.url}" />
                <property name="username" value="${db.username}" />
                <property name="password" value="${db.password}" />
            </dataSource>
        </environment>
    </environments>
    <!-- 加载映射文件 -->
    <mappers>
        <mapper resource="User.xml" />
    </mappers>
</configuration>
<!-- User.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">
<!-- namespace:命名空间,对statement的信息进行分类管理 -->
<!-- 注意:在mapper代理时,它具有特殊及重要的作用 -->
<mapper namespace="User">
    <!-- 根据用户ID查询用户信息 -->
    <!-- select:表示一个MappedStatement对象 -->
    <!-- id:statement的唯一标示 -->
    <!-- #{}:表示一个占位符? -->
    <!-- #{id}:里面的id表示输入参数的参数名称,如果该参数是简单类型,那么#{}里面的参数名称可以任意 -->
    <!-- parameterType:输入参数的java类型 -->
    <!-- resultType:输出结果的所映射的java类型(单条结果所对应的java类型) -->
    <select id="findUserById" parameterType="int" resultType="com.zyj.mybatis.domain.User">
        select * from user where id = #{id}
    </select>

    <!-- 根据用户名称模糊查询用户列表 -->
    <!-- ${}:表示一个sql的连接符 -->
    <!-- ${value}:里面的value表示输入参数的参数名称,如果该参数是简单类型,那么${}里面的参数名称必须是value -->
    <!-- ${}这种写法存在sql注入的风险,所以要慎用!!但是在一些场景下,必须使用${},比如排序时,动态传入排序的列名,${}会原样输出,不加解释 -->
    <select id="findUsersByName" parameterType="java.lang.String" resultType="com.zyj.mybatis.domain.User">
        select * from user where username like '%${value}%'
    </select>

    <!-- 添加用户 -->
    <!-- selectKey:查询主键,在标签内需要输入查询主键的sql -->
    <!-- order:指定查询主键的sql和insert语句的执行顺序,相当于insert语句来说 -->
    <!-- LAST_INSERT_ID:该函数是mysql的函数,获取自增主键的ID,它必须配合insert语句一起使用 -->
    <insert id="addUser" parameterType="com.zyj.mybatis.domain.User">
        <selectKey keyProperty="id" resultType="int" order="AFTER">
            select last_insert_id()
        </selectKey>
        insert into user(username) values(#{username})
    </insert>

    <!-- 自增主键之UUID -->
    <insert id="addUser2" parameterType="com.zyj.mybatis.domain.User2">
        <!-- ID使用UUID时,order需要设置为BEFORE,否则无法在插入数据前获取UUID,结果ID为空,导致插入失败 -->
        <selectKey keyProperty="id" resultType="string" order="BEFORE">
            select uuid()
        </selectKey>
        insert into user2(id, username) values(#{id}, #{username})
    </insert>
</mapper>
public class APITest {

    private SqlSessionFactory sqlSessionFactory;

    @Before
    public void setUp() throws IOException {
        // 读取配置文件
        String resource = "MybatisConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 创建sqlSessionFactory
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    @Test
    public void findUserByIdTest() throws IOException {
        // 开启sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 通过sqlSession执行executor获取结果
        // 第一个参数:表示statement的唯一标示
        User user = sqlSession.selectOne("User.findUserById", 1);

        System.out.println(user);
        // 关闭资源
        sqlSession.close();
    }

    @Test
    public void findUserByNameTest() throws IOException {
        // 开启sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 通过sqlSession执行executor获取结果
        // 第一个参数:表示statement的唯一标示
        List<Object> selectList = sqlSession.selectList("User.findUserByName", "小明");

        System.out.println(selectList);
        // 关闭资源
        sqlSession.close();
    }

    @Test
    public void addUserTest() throws IOException {
        // 开启sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 通过sqlSession执行executor获取结果
        // 第一个参数:表示statement的唯一标示
        User2 user2 = new User2();
        user2.setUsername("张育嘉");
        sqlSession.insert("User.addUser2", user2);

        System.out.println(user2.getId());
        // 提交事务
        sqlSession.commit();
        // 关闭资源
        sqlSession.close();
    }
}

小结

    #{}和${}
    1.#{}表示占位符?,#{}接收简单类型的参数时,里面的名称可以任意
    2.${}表示拼接符,${}接收简单类型的参数时,里面的名称必须是value
    3.${}里面的值会原样输出,不加解析(如果该参数值是字符串,就不会添加引号)
    4.${}存在sql注入的风险,但是有些场景下必须使用,比如排序后面会动态传入排序的列名

    parameterType和resultType
    1.parameterType指定输入参数的java类型,parameterType只有一个,也就是说入参只有一个。
    2.resultType指定输出结果的java类型(是单条记录的java类型)

    selectOne和selectList
    1.selectOne查询单个对象
    2.selectList查询集合对象
Codesys软运动控制进阶:用SMC_FreeEncoder为ECAT轴搭建一个“虚拟手轮”调试工具 本文详细介绍了如何利用Codesys的SMC_FreeEncoder功能为ECAT轴搭建虚拟手轮调试工具,解决自动化设备开发中的硬件依赖问题。通过软件模拟手轮脉冲信号,实现无硬件依赖的运动控制逻辑验证,显著提升调试效率。适用于汇川AM400等PLC平台,特别适合机械安装滞后或伺服驱动器故障时的调试场景。 阅读详情

相关推荐

避坑指南:AUTOSAR FlashDriver操作DFlash模拟EEPROM时,你最容易忽略的5个细节

本文深入探讨了AUTOSAR FlashDriver在DFlash模拟EEPROM操作中最容易被忽视的五大细节问题,包括地址合法性检查、操作时序控制、并发访问冲突、电源稳定性管理和寿命管理。通过实际项目案例和工程化解决方案,帮助开发者避免常见陷阱,提升汽车电子控制单元(ECU)的可靠性和稳定性。

weixin_42741930的博客 246

mybatis入门01

Mybatis   1       mybatis的介绍   mybatis就是一个封装来jdbc的持久层框架,它和hibernate都属于ORM框架,但是具体的说,hibernate是一个完全的orm框架,而mybatis是一个不完全的orm框架。   Mybatis让程序员只关注sql本身,而不需要去关注如连接的创建、statement的创建等操作。   Mybatis会将输入...

qq_34272315的博客 408

3D模型文件格式全解析:从STL到glTF,10种主流格式与转换实战指南

在三维数字内容创作与工程制造领域,3D模型文件格式是数据交换与协作的基石。其核心原理在于以不同的数据结构(如三角网格、NURBS曲面、边界表示等)对三维物体的几何、外观及场景信息进行编码。理解这些格式的技术特性,对于保障数据完整性、提升工作流效率具有关键价值,广泛应用于3D打印、游戏开发、影视动画及工业设计等场景。例如,面向增材制造的STL格式以其极简的三角面片结构成为行业通用语,而支持丰富材质与动画的FBX格式则在影视游戏管线中扮演核心角色。本文聚焦于STL、OBJ、FBX、3MF、STEP等10种主流格

weixin_28520495的博客 354

mybatis之#{}与${}的区别

“` 注意:${}存在sql注入的风险,但是有些场景下必须使用,比如排序后面会动态传入排序的列名。“`

xiaolizi22233的博客 362

OpenAI Realtime API实时语音交互实战指南

实时语音交互是人机自然对话的核心能力,其本质在于构建低延迟、双向、流式协同的音频-语义闭环。它突破传统REST API的请求-响应范式,依托WebSocket实现毫秒级音频输入流(audio.delta)、模型生成流(text/audio.delta)与动态控制流(session.update)三重并行。该技术显著降低端到端延迟至300ms以内,支撑语音助手、智能客服、对话式教育等强实时场景。本文聚焦OpenAI Realtime API的工程落地,详解PCM音频流处理、VAD语音活动检测、AudioCon

weixin_32285357的博客 391

40分钟快速入门Dart基础(上)

针对final 和const 理解的有点模糊的可以参考这篇文章: 可以参考这里Flutter 知识梳理(Dart)-Dart中static final const 区别看是不是超级好上手,好操作~其实Dart的整个学习起来还是蛮简单的,对于有基础的老司机更简单一些。分分钟敲起来~这篇文章就简单的介绍到这里如何短时间快速入门Dart,避免入坑。由于是想让大家快速入门Flutter,所以针对上面的这些章节我们讲解的只是一些在开发Flutter 过程中常用的一些方法和函数。

qq_7813180 4570

Mybatis 动态排序 #{} ${}问题

Mybatis 动态排序 #{} ${}问题 在写Mybatis动态排序是遇到一个问题,开始,我是这样写的 &lt;if test="orderField !=null and orderField != '' "&gt; order by t.#{orderField} #{orderType} &lt;/if&gt; 发现报错,后来经过查阅资料发现,用#{}会多个' '导致SQL语...

LitongZero的博客 4363

24、企业治理、风险与合规:精益思维的应用与实践

本文探讨了如何运用精益思维优化企业治理、风险与合规(GRC)流程,分析了职责分离与合规流程的误区,提出了预防性与检测性控制措施的合理搭配,并通过价值流映射、减少合规反馈循环等方法实现流程优化。以Etsy的PCI-DSS实施为例,展示了如何在满足法规要求的同时保持创新活力。文章还强调了构建协作型GRC文化的重要性,并展望了未来GRC的发展趋势,包括数字化转型、全球化风险管理及与可持续发展的结合。

solidity8miner的博客 102

Mybatis-1

1.关于Mybatis 1.1.简介 ​ mybatis就是一个封装来jdbc的持久层框架,它和hibernate都属于ORM(对象关系映射)框架,但是具体的说,hibernate是一个完全的orm框架,而mybatis是一个不完全的orm框架。 ​ MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 ​ Mybatis让程序员只关注sql本身,而不需要去关注如连接的创建、statement的创建等操作 ​ Mybatis会将输入参数、输出结果进行映射 输入参数是对象 输出结果

qq_45366447的博客 393

基于STM32+RFID设计的宿舍检修管理系统

设计一个上位机,用来管理查看维修检修信息,当维修寝室的设备或者检修完成时,通过STM32上的RC522刷一下这个寝室的IC卡,识别这是哪个寝室,识别成功后在软件上弹出一个对话框,填写本次维修或者检修的事件,填写完毕点击提交即可。...

2555

上位机介绍:C# 开发者的必知基础

上位机是指在工业控制系统中,位于上层、负责人机交互和数据管理的计算机/软件,与“下位机”(PLC、传感器、变频器、单片机等硬件设备)相对应,核心是“向下通信控制设备,向上展示交互数据”。下位机:一线干活的“工人”(执行采集、控制指令);上位机:指挥管理的“办公室人员”(发指令、看数据、做报表)。C#开发者掌握上位机开发的核心是“通信+UI+稳定性基础层:搞懂WinForms/WPF基础、串口/Modbus通信,能实现核心功能;进阶层:掌握分层设计、异步编程、工业级容错(断线重连、数据校验);

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1558

一、MyBatis概述

MyBatis 是面向持久层的框架,而框架就是对通用代码的封装,提前写好了一堆接口和类,可以在做项目的时候直接引入这些接口和类(即引入框架),基于这些现有的接口和类进行开发,大大提高开发效率。

qq_44827847的博客 133

智能交通实战:基于YOLOv5/8/10的车辆违章行为检测系统(违停/压线/逆行识别)

在开始模型训练前,我们得明确要检测的违章行为,还要准备好对应的数据集,这就像做饭前要确定做什么菜、准备什么食材一样。通过本指南,你已经掌握了从技术选型(YOLOv5/8/10)数据准备模型训练到UI界面开发的全流程,搭建了一套完整的车辆违章行为检测系统。这个系统在实际应用中,能有效识别多种车辆违章行为,检测准确率高、速度快,可用于智能交通管理、停车场管理等多个场景。随着深度学习技术的不断进步,YOLO系列模型在车辆违章检测领域的应用会越来越广泛。

m0_71589036的博客 459

一、mybatis框架概述

MyBatis 框架概述 mybatis是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql语句本身, 而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。 mybatis通过xml 或注解的方式将要执行的各种statement配置起来,并通过java对象和statement 中 sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。 采用 ORM 思想解决

Cookie__C的博客 228

pscad IEEE标准系统搭建说明

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

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

MyBatis(一)MyBatis概述

主要讲了什么是框架、以及三层架构,什么是JDBC,JDBC的不足,引出了mybatis框架以及mybatis的特点和ROM对象关系映射。

ww981580010的博客 893

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【MyBatis】一、概述

笔记

misakisaigao的博客 404

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Mybatis概述一

框架:是整个和部分系统的课重用设计,表现为一组抽象构件及构件实例之间交互的方法; 另一种定义认为:框架是可被开发者定制的应用骨架, 并且可以很好将底层的应用平台和高层业务逻辑进行缓和,为了实现软件工程中的高内聚,低耦合,常见的有MVC软件设计思想 javaweb中采用ssm来实现MVC思想 其中有 持久层框架mybaits Web层的Spring mvc 解决问题整合的Spring框...

weixin_43532593的博客 214

MyBatis详解:一 概述

目录 1. 什么是MyBatis? 2. MyBatis特点 3. MyBatis功能架构 4. MyBatis框架结构 5. MyBatis 的工作原理 6. MyBatis核心组件 6.1 SqlSessionFactoryBuilder(构造器): 6.2 SqlSessionFactory(工厂接口): 6.3SqlSession(会话): 6.4 SQL Mapper(映射器): 1. 什么是MyBatis? MyBatis 是一款优秀的持久层框架,它支持自定..

d_chunyu的专栏 786

(一)Mybatis概述

框架(framework):就是对通用代码的封装,提前写好了一堆接口和类,做项目的时候可以引入框架,基于这些现有的接口和类进行开发,可以大大提高效率。业务逻辑层(BLL) : 一是处理表现层转发过来的前端请求(也就是具体业务),二是将从持久层获取的数据返回到表现层。数据访问层(DAL) :直接操作数据库完成CRUD,并将获得的数据返回到上一层(也就是业务逻辑层)也有全自动的,比如Hibernate就是全自动的,它调用方法,会自动生成SQL语句。MyBatis在三层架构中负责持久层的,属于持久层框架。

忆亦何为的博客 520

MyBatis(一)概述

一、概念 Mybatis本事apache的开源项目iBatis,2010年项目迁移到google code并更名为MyBatis,2013年11月迁移至github。iBatis一词来源于“internal”和“abatis”组合,是一个基于java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO) MyBatis是基于java的持久层框架,内部封装了jdbc,开发人员只需要关注sql本身,不需要花费精力在驱动创建和连接建立、statement创

全栈攻城狮JSON的博客 669

MyBatis 学习(一)之 MyBatis 概述

MyBatis 是一个半自动化的 ORM (Object-Relational Mapping,对象关系映射)持久层框架,它允许开发者通过 XML 或注解将对象与数据库中的记录建立映射关系,同时提供了灵活的 SQL 编写和参数设置功能。JDBC 代码简化:MyBatis 能根据不同的条件动态生成 SQL 语句,使用它可以避免编写大量的 JDBC 代码,如手动设置参数和检索结果集。MyBatis 通过配置和映射机制自动处理这些底层细节,从而简化了数据库操作的代码量参数传递。

zjs246813的博客 1086

Mybatis 配置Mybatis 一、框架的概述

MyBatis是一个优秀的基于Java的持久层框架,内部对JDBC做了封装,使开发者只需要关注SQL语句,而不用关注JDBC的代码,使开发变得更加的简单。MyBatis通过XML或者注解的方式将要执行的各种Statement对象配置起来,通过Java对象和statement中SQL的动态参数进行映射,并最终执行SQL语句。执行SQL后,最终将结果已Java对象返回。采用了ORM的思想(ORM框架采用元数据来描述对象与关系映射的细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中)

best_virtuoso的博客 227

【MyBatis】一、MyBatis概述与基本使用

Mybatis是一个半自动化的框架,需要自己写sql语句,对比JDBC其有耦合性更低的SQL语句与Java代码,各司其职不相互冗杂,对比Hibernate与JPA其又有更灵活的SQL编写能力。

weixin_41365204的博客 208

跟老杜从零学MyBatis框架【一】MyBatis概述

在文献中看到的framework被翻译为框架Java常用框架:SSM三大框架:Spring + SpringMVC + MyBatisSpringBoot等。。框架其实就是对通用代码的封装,提前写好了一堆接口和类,我们可以在做项目的时候直接引入这些接口和类(引入框架),基于这些现有的接口和类进行开发,可以大大提高开发效率。框架一般都以jar包的形式存在。(jar包中有class文件以及各种配置文件等。

2301_76637874的博客 139

MyBatis一:概述

MyBatis概述 一、关系梳理 JDBC Java连接MySQL数据库,并操作数据库中的数据 MyBatis 是功能更加全面的基于Java的持久层框架 SSM Spring:整合SpringMVC和MyBatis SpringMVC:负责处理浏览器发送的请求,并调用业务逻辑去处理,左后将结果响应给浏览器 MyBatis:业务逻辑根据需求调用持久层,实现持久化操作(从连接数据库,到访问并操作数据库中的数据) 二、特性 定制化SQL 高级映射 解决了一对多情况下,SQL语句查询出的结果

开发者 213

SSM——MyBatis(一)框架概述

一、Mybatis简介 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。 MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。 MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 二、为什么要使用MyBatis框架? 1、数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问

每天一个前端小知识~ 758
上一篇: ATM前后端系统介绍及源码下载
下一篇: 常用集合list与Set、Map区别及适用场景总结
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值