当前位置: 首页 > news >正文

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

Mybatis概述

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

环境搭建

引入相关依赖并打jar包

    <dependencies><!-- Mybatis核心 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><!-- junit测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- MySQL驱动 --><!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.32</version></dependency></dependencies>

在resource下新建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><!--设置连接数据库的环境--><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/MyBatis"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><!--引入映射文件--><mappers><mapper resource="mappers/UserMapper.xml"/></mappers>
</configuration>

在mapper文件夹下创建UserMapper接口,每张表对应一个Mapper接口

在resource下创建xml配置文件

在mapper标签下进行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.qinghe.mybatis.mapper.UserMapper"></mapper>

例如一个insert语句:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--注意这个地方的namespace要与自己的mapper接口保持一致-->
<mapper namespace="com.qinghe.mybatis.mapper.UserMapper"><!--    注意此处的id作用是唯一标识sql语句,id名必须与mapper接口中的方法名一致--><insert id="insertUser">insert into t_user values(null, 'admin', '123456', 23, 'm', '123456@qq.com')</insert></mapper>

一个插入语句的示例

创建一个mapper层的接口

public interface UserMapper {/*** 添加用户信息* @return*/int insertUser();
}

在test中的测试如下:

public class MyBatisTest {@Testpublic void testMyBatis() throws IOException {//加载配置文件InputStream is = Resources.getResourceAsStream("mybatis-config.xml");//获取SqlSessionFactoryBuilder,工厂模式SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();//获取sqlSessionFactory,传入配置文件的流信息SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);//获取sqlSession,sqlSession是数据库与Java进行数据交换的中介,就像是HttpSession时浏览器与Java的中介一样//openSession中的参数true为自动提交的意思SqlSession sqlSession = sqlSessionFactory.openSession(true);//获取mapper接口对象,getMapper(CLass<T>)方法使用代理模式,在底层创建了一个UserMapper对象并赋值给mapperUserMapper mapper = sqlSession.getMapper(UserMapper.class);//调用方法int result = mapper.insertUser();//提交事务,语句必须执行过事务提交之后才会在数据库显示//要么在sqlSessionFactory创建对象时开启自动提交,要么就手动提交
//        sqlSession.commit();System.out.println("result:" + result);}
}

添加日志功能

在resource文件夹下创建日志的配置文件:log4j.xml并添加如下配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"><appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"><param name="Encoding" value="UTF-8" /><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" /></layout></appender><logger name="java.sql"><level value="debug" /></logger><logger name="org.apache.ibatis"><level value="info" /></logger><root><level value="debug" /><appender-ref ref="STDOUT" /></root>
</log4j:configuration>

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><!--    配置jdbc.properties文件,使数据库的连接属性们从jdbc.properties读取--><properties resource="jdbc.properties" />
<!--    typeAliases是设置别名的意思,其将全类名设置别名为最后的类名--><typeAliases>
<!--        type属性是要设置别名的类,alias属性是设置的类名alias属性可以不进行设置,若不进行设置则其默认的别名就是类名,且不区分大小写,若设置了alias就区分大小写了,严格按照设置的alias属性进行匹配
--><typeAlias type="com.qinghe.mybatis.pojo.User" alias="User"></typeAlias>
<!--        也可以以包为单位,将包中的所有类都设置为默认的类名的别名(不区分大小写)--><package name="com.qinghe.mybatis.pojo"></package></typeAliases><!--设置连接数据库的环境--><environments default="development"><environment id="development">
<!--transactionManager标签JDBC表示使用原生的JDBC事务管理方式,例如commit和rollbackMANAGED表示被管理的事务管理方式,例如被Spring管理等
--><transactionManager type="JDBC"/>
<!--设置数据源POOLED表示使用数据库连接池缓存进行连接UNPOLLED表示不使用数据库连接池JNDI表示使用上下文中的数据源
--><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="mappers/UserMapper.xml"/>--><!--        使用package标签可以做到引入一个包下的所有映射文件的效果-->
<!--***************************注意mapper接口所在的包的包名必须也映射配置文件所在的包名一致mapper接口的名字也必须与xml文件的名字保持一致*****************************
--><package name="com.qinghe.mybatis.mapper"></package></mappers>
</configuration>

相关文章:

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

Mybatis概述 Mybatis是一个半自动化的框架&#xff0c;需要自己写sql语句&#xff0c;对比JDBC其有耦合性更低的SQL语句与Java代码&#xff0c;各司其职不相互冗杂&#xff0c;对比Hibernate与JPA其又有更灵活的SQL编写能力。 环境搭建 引入相关依赖并打jar包 <dependenc…...

Java事件机制简介 内含面试题

面试题分享 云数据解决事务回滚问题 点我直达 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java、python面试题 项目实战:AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮…...

springMVC基础技术使用

目录 1.常用注解 1.1RequestMapping 1.2.RequestParam 1.3.RequestBody 1.4.PathVariable 2.参数传递 2.1 slf4j-----日志 2.2基础类型 2.3复杂类型 2.4RequestParam 2.5PathVariable 2.6RequestBody 2.7请求方法&#xff08;增删改查&#xff09; 3.返回值 3.1void …...

UI设计师的发展前景是否超越了平面设计?

这是一个现代经济学的典型话题&#xff1a;应该跟随趋势追逐风口&#xff0c;还是坚守成熟的“夕阳产业” UI 设计行业发展短短不过 20 多年&#xff0c;但平面设计这个“夕阳产业”最早可以追溯到上世纪的二三十年代。显而易见的答案是&#xff0c;更新兴的 UI 设计师得到的好…...

MyBatis的基本操作

目录 一、MyBatis的增删改查1、添加2、删除3、修改4、查询一个实体类对象5、查询集合 二、MyBatis的各种查询功能1、查询一个实体类对象2、查询一个list集合3、查询单个数据4、查询一条数据为map集合5、查询多条数据为map集合 三、特殊SQL的执行1、模糊查询2、批量删除3、动态设…...

【Tomcat】在SpringBoot项目中,Tomcat是如何处理HTTP请求的

目录 首先了解一下标准的Tomcat处理HTTP请求的流程 SpringBoot项目中Tomcat处理流程 首先了解一下标准的Tomcat处理HTTP请求的流程 监听端口&#xff1a;Tomcat 在启动时监听指定的端口&#xff0c;等待客户端发送请求。 接收请求&#xff1a;当客户端发起一个 HTTP 请…...

python开发基础篇1——后端操作K8s API方式

文章目录 一、基本了解1.1 操作k8s API1.2 基本使用 二、数据表格展示K8s常见资源2.1 Namespace2.2 Node2.3 PV2.4 Deployment2.5 DaemonSet2.6 StatefulSet2.7 Pod2.8 Service2.9 Ingress2.10 PVC2.11 ConfigMap2.12 Secret2.13 优化 一、基本了解 操作K8s资源api方式&#xf…...

【实践篇】Redis最强Java客户端(一)之Redisson入门介绍

Redisson入门介绍 文章目录 Redisson入门介绍1.1 Redisson简介1.1.1 起源和历史1.1.2 优势和特点1.1.3 与其他Java Redis客户端的比较 1.2 使用和配置1.2.1 依赖和SDK1.2.2 配置文件解析1.2.3 连接池配置 1.3 优雅的让Hash的某个Field过期2. 参考资料3. 源码地址4. Redis从入门…...

掌握AI助手的魔法工具:解密`Prompt`(提示)在AIGC时代的应用(下篇)

前言&#xff1a;在前面的两篇文章中&#xff0c;我们深入探讨了AI助手中的魔法工具——Prompt&#xff08;提示&#xff09;的基本概念以及在AIGC&#xff08;Artificial Intelligence-Generated Content&#xff0c;人工智能生成内容&#xff09;时代的应用场景。在本篇中&am…...

十)Stable Diffussion使用教程:Lora

LoRA 的全称为 Low-Rank Adaptation(低秩适应),是一种在机器学习中使用的方法,用于解决一些特殊问题,尤其是在数据中存在不均匀性的情况下表现较好。 要理解 LoRA,我们首先需要理解两个概念:低秩和适应。 低秩(Low Rank):在数学中,秩(Rank)是一个描述矩阵信息量的…...

kafka学习-消费者

目录 1、消费者、消费组 2、心跳机制 3、消费者常见参数配置 4、订阅 5、反序列化 基本概念 自定义反序列化器 6、位移提交 6.1、自动提交 6.2、手动提交 同步提交 异步提交 7、再均衡 7.1、定义与基本概念 7.2、缺陷 7.3、如何避免再均衡 7.4、如何进行组内分…...

Alibaba(商品详情)API接口

为了进行电商平台 的API开发&#xff0c;首先我们需要做下面几件事情。 1&#xff09;开发者注册一个账号 2&#xff09;然后为每个alibaba应用注册一个应用程序键&#xff08;App Key) 。 3&#xff09;下载alibaba API的SDK并掌握基本的API基础知识和调用 4&#xff09;利…...

OLED透明屏触控:引领未来科技革命的创新力量

OLED透明屏触控技术作为一项颠覆性的创新&#xff0c;正在引领新一轮科技革命。它将OLED显示技术与触摸技术相结合&#xff0c;实现了透明度和触控功能的完美融合。 在这篇文章中&#xff0c;尼伽将通过引用最新的市场数据、报告和行业动态&#xff0c;详细介绍OLED透明屏触控…...

Ubuntu下QT操作Mysql数据库

本篇总结一下一下Ubuntu下QT操作Mysql数据库。 目录 1. 启动Mysql数据库服务器 2.查看QT支持的数据库驱动 3.连接数据库 4. 增加表和记录 5. 删除记录 6. 修改记录 7. 查询记录 8.完整代码和运行效果 常见错误总结&#xff1a; (1) 数据库服务没启动报错信息 (2) 有…...

sqli --【1--10】

Less-1&#xff08;联合查询&#xff09; 1.查看是否有回显 2.查看是否有报错 3.使用联合查询&#xff08;字符注入&#xff09; 3.1判断其列数 3.2 判断显示位置 3.3敏感信息查询 Less-2&#xff08;联合查询&#xff09; 1.查看是否有回显 2.查看是否有报错 3.使用…...

《自然语言处理(NLP)的最新进展:Transformers与GPT-4的浅析》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

Wireshark 用命令行分析数据包

1&#xff0c;那些情况需要使用命令行 Wireshark一次性提供了太多的信息。使用命令行工具可以限制打印出的信息&#xff0c;最后只显示相关数据&#xff0c;比如用单独一行来显示IP地址。命令行工具适用于过滤数据包捕获文件&#xff0c;并提供结果给另一个支持UNIX管道的工具…...

LVS DR模式负载均衡群集部署

目录 1 LVS-DR 模式的特点 1.1 数据包流向分析 1.2 DR 模式的特点 2 DR模式 LVS负载均衡群集部署 2.1 配置负载调度器 2.1.1 配置虚拟 IP 地址 2.1.2 调整 proc 响应参数 2.1.3 配置负载分配策略 2.2 部署共享存储 2.3 配置节点服务器 2.3.1 配置虚拟 IP 地址 2.3.2…...

探讨前后端分离开发的优势、实践以及如何实现更好的用户体验?

随着互联网技术的迅猛发展&#xff0c;前后端分离开发已经成为现代软件开发的一种重要趋势。这种开发模式将前端和后端的开发工作分开&#xff0c;通过清晰的接口协议进行通信&#xff0c;旨在优化开发流程、提升团队协作效率&#xff0c;并最终改善用户体验。本文将深入探讨前…...

微博一面:JVM预热,你的方案是啥?

说在前面 在40岁老架构师 尼恩的读者社区(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如微博、阿里、汽车之家、极兔、有赞、希音、百度、网易、滴滴的面试资格&#xff0c;遇到一几个很重要的面试题&#xff1a; JVM预热&#xff0c;你的方案是啥&#xff1f;Springb…...

OpencvSharp 算子学习教案之 - Cv2.Sobel

OpencvSharp 算子学习教案之 - Cv2.Sobel 大家好&#xff0c;Opencv在很多工程项目中都会用到&#xff0c;而OpencvSharp则是以C#开发与实现的Opencv操作库&#xff0c;对.NET开发人员友好&#xff0c;但很多API的中文资料、应用场景及常见坑点等缺乏系统性归纳&#xff0c;因此…...

别再只用if-else了!用Simulink Relay模块给你的控制逻辑加个‘缓冲带’(附C代码生成分析)

别再只用if-else了&#xff01;用Simulink Relay模块给你的控制逻辑加个‘缓冲带’&#xff08;附C代码生成分析&#xff09; 在嵌入式控制系统的开发中&#xff0c;我们常常需要处理各种阈值判断和状态切换。传统的if-else结构虽然简单直接&#xff0c;但在实际应用中往往会导…...

从原型到优化:基于LoRa SX1278与STM32的音频对讲系统实战剖析

1. 项目背景与原型机搭建 记得第一次用STM32F103C8T6驱动LoRa SX1278模块时&#xff0c;手边只有个简易麦克风模块和杜邦线。当时就想做个能传语音的无线对讲系统&#xff0c;没想到后来踩了这么多坑。这个项目最核心的三部分就是ADC采集声音、SPEEX压缩音频、LoRa传输数据&am…...

Arm编译器嵌入式C/C++库架构与优化实践

1. Arm编译器嵌入式C/C库核心架构解析在嵌入式系统开发中&#xff0c;Arm编译器提供的C/C库是实现高效、可靠应用的基础设施。这些库函数针对Arm架构进行了深度优化&#xff0c;特别是在内存管理、信号处理和浮点运算等关键功能上。让我们先来看看这个库的核心架构设计。Arm编译…...

Cursor编辑器集成OpenAPI Agent:让AI编程助手具备真实API调用能力

1. 项目概述&#xff1a;当你的代码编辑器学会“思考”最近在开发者社区里&#xff0c;一个名为neordinary/cursor-openapi-agent的项目引起了我的注意。乍一看&#xff0c;这名字有点长&#xff0c;但拆解一下就能明白它的野心&#xff1a;cursor是那款风头正劲的、集成了AI能…...

多核架构下的实时高性能计算优化与实践

1. 多核架构下的实时高性能计算革命五年前还需要超级计算机才能解决的计算密集型问题&#xff0c;如今在嵌入式多核处理器上就能实时完成。这一技术突破正在彻底改变工程计算的格局。作为从业十余年的高性能计算工程师&#xff0c;我见证了从传统集群计算到现代多核实时计算的演…...

FPGA以太网MAC调试架构设计与DSP优化实践

1. 项目概述&#xff1a;FPGA与以太网MAC的DSP调试架构在数字信号处理&#xff08;DSP&#xff09;的硬件实现中&#xff0c;调试环节往往成为开发效率的瓶颈。传统JTAG调试方式受限于带宽和灵活性&#xff0c;难以满足大规模数据交互的需求。我们基于Xilinx Virtex-4 FPGA平台…...

Thorium浏览器:从源码到高性能Chromium分叉的实战指南

Thorium浏览器&#xff1a;从源码到高性能Chromium分叉的实战指南 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Source code and Linux releases. Windows/MacOS/ARM builds served in different repos, links are towards the top of the…...

别再死记硬背了!用Python手把手拆解卡尔曼滤波的‘预测-更新’循环

别再死记硬背了&#xff01;用Python手把手拆解卡尔曼滤波的‘预测-更新’循环 卡尔曼滤波在工程领域就像一位隐形的魔术师——它能从充满噪声的传感器数据中提取出真实信号。但第一次接触那些矩阵方程时&#xff0c;多数人都会陷入"每个字母都认识&#xff0c;连起来完全…...

手把手教你用C语言实现三相锁相环(附完整源码与仿真波形分析)

手把手教你用C语言实现三相锁相环&#xff08;附完整源码与仿真波形分析&#xff09; 在电力电子和电机控制领域&#xff0c;锁相环&#xff08;PLL&#xff09;技术是实现电网同步、逆变器控制的核心组件。传统教材往往停留在理论推导&#xff0c;而实际工程中&#xff0c;如何…...