MyBatis框架使用指南

在Java开发中,数据库操作是常见且关键的任务。为了简化这一任务,我们通常会使用ORM(对象关系映射)框架,其中MyBatis就是一款非常优秀的选择。MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原始类型、接口和Java POJO(Plain Old Java Objects,普通的Java对象)为数据库中的记录。

一、MyBatis基础

首先,你需要在你的项目中添加MyBatis的依赖。如果你使用Maven,可以在pom.xml文件中添加以下依赖:

<dependency>  <groupId>org.mybatis</groupId>  <artifactId>mybatis</artifactId>  <version>3.5.7</version>  
</dependency>

然后,你需要创建一个MyBatis的配置文件,通常命名为mybatis-config.xml,这个文件用于配置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>  <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/mydatabase"/>  <property name="username" value="root"/>  <property name="password" value="password"/>  </dataSource>  </environment>  </environments>  <mappers>  <mapper resource="com/example/mapper/UserMapper.xml"/>  </mappers>  
</configuration>

二、Mapper接口与XML映射文件

在MyBatis中,我们通过Mapper接口和XML映射文件来定义SQL操作。Mapper接口定义了方法,而XML映射文件则定义了具体的SQL语句。

首先,我们定义一个Mapper接口:

package com.example.mapper;  import com.example.model.User;  
import java.util.List;  public interface UserMapper {  List<User> selectAllUsers();  User selectUserById(int id);  void insertUser(User user);  void updateUser(User user);  void deleteUser(int id);  
}

然后,我们在XML映射文件中定义SQL语句:

<?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="com.example.mapper.UserMapper">  <select id="selectAllUsers" resultType="com.example.model.User">  SELECT * FROM user  </select>  <select id="selectUserById" resultType="com.example.model.User">  SELECT * FROM user WHERE id = #{id}  </select>  <insert id="insertUser" parameterType="com.example.model.User">  INSERT INTO user (id, name, age) VALUES (#{id}, #{name}, #{age})  </insert>  <update id="updateUser" parameterType="com.example.model.User">  UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}  </update>  <delete id="deleteUser" parameterType="int">  DELETE FROM user WHERE id = #{id}  </delete>  
</mapper>

三、使用SqlSession执行操作

最后,我们需要使用SqlSession来执行Mapper接口中定义的方法。SqlSession是MyBatis的核心接口,它提供了执行SQL命令所需的所有方法。

try (SqlSession session = sqlSessionFactory.openSession()) {  UserMapper mapper = session.getMapper(UserMapper.class);  List<User> users = mapper.selectAllUsers();  for (User user : users) {  System.out.println(user);  }  session.commit();  
}

在上述代码中,我们首先通过SqlSessionFactory创建一个SqlSession

四、整合Spring框架

在实际项目中,我们通常会使用Spring框架来管理对象之间的依赖关系。MyBatis可以与Spring进行完美的整合,使得我们可以更方便地使用MyBatis。

首先,我们需要在Spring的配置文件中添加MyBatis的相关配置:

<beans xmlns="http://www.springframework.org/schema/beans"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd">  <!-- 配置数据源 -->  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>  <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>  <property name="username" value="root"/>  <property name="password" value="password"/>  </bean>  <!-- 配置SqlSessionFactory -->  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  <property name="dataSource" ref="dataSource"/>  <property name="mapperLocations" value="classpath:com/example/mapper/*.xml"/>  </bean>  <!-- 扫描Mapper接口 -->  <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  <property name="basePackage" value="com.example.mapper"/>  </bean>  </beans>

然后,在Spring管理的Service中,我们可以直接注入Mapper接口,并使用它:

@Service  
public class UserService {  @Autowired  private UserMapper userMapper;  public List<User> getAllUsers() {  return userMapper.selectAllUsers();  }  // 其他业务方法...  
}

这样,我们就实现了MyBatis与Spring的整合,使得我们可以更方便地在Spring项目中使用MyBatis。

五、总结

MyBatis是一个强大且灵活的ORM框架,它可以帮助我们简化数据库操作,提高开发效率。通过本文的介绍,你应该对MyBatis的基本使用有了一定的了解。当然,MyBatis还有很多高级特性和用法,如动态SQL、缓存、插件等,这些都需要你在实际项目中不断学习和探索。希望本文能对你的学习有所帮助。

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

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

相关文章

通信算法之205 : MSK调制解调

转载&#xff1a; MSK&#xff08;Minimum Shift Keying&#xff09;&#xff1a; MSK调制出现在上世纪六七十年代&#xff0c;因其频率间隔小、恒包络、相位连续、主瓣窄等特性&#xff0c;它在GSM等系统中得到了应用。 随着功放技术的发展及抗衰落方法的不断出现&#xff0c…

UG NX二次开发(C#)-PMI-获取PMI的尺寸数据(二)

文章目录 1、前言2、在UG NX中创建一个带有PMI的三维模型3、查找PMI的数据结构3.1 PMI数据结构3.2 Dimension的数据结构3.3 获取所有的尺寸3.4 完整的代码3.5 测试结果1、前言 在前面写的一个博客中UG NX二次开发(C#)-PMI-获取PMI尺寸数据中介绍了再NX2007中获取尺寸数据的例子…

深入理解JavaScript - JavaScript中call、apply、bind方法

一、call() / apply() JavaScript中的函数是对象&#xff0c;与其他JavaScript对象一样,JavaScript函数也有方法。其中有两个自带的方法 – call和apply&#xff0c;可以利用这两个方法来间接调用某个函数。 通过一个简单的例子体会一下call和apply的用法&#xff1a; funct…

嵌入式学习54-ARM3

S3c2440中断控制器 内部外设&#xff1a; DMA &#xff1a;&#xff08;直接内存存取&#xff09; Direct Memor…

课时94:脚本自动化_脚本信号_信号基础

2.1.1 信号基础 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 简介 当我们在构建一些更高级的脚本的时候&#xff0c;就会涉及到如何在linux系统上来更好的运行和控制它们&#xff0c;到目前为止&#xff0c;我们运行脚本的方式都是以实时…

基于docker的开发者集成环境

docker-compose一键部署开发者环境。 常见的中间件&#xff1a;nginx, mysql, redis, mongo, rabbitmq, nacos, rocketmq, zookeeper等。 GIthub项目地址 1. 下载项目&#xff1a;git clone https://github.com/xhga/docker-develop-env.git 2. 进入文件夹&#xff1a;cd d…

服务器测试之intel E8102CQDA2

这个卡是个双口100G双芯片的卡&#xff0c;QSFP28 单口速率100G&#xff0c;双口200G 1.BIOS下pcie带宽设置 服务器BIOS下支持设置PCIE link width 设置x8x8&#xff0c;否则只能显示一个网口&#xff0c;如下图 E810-2CQDA2需要BIOS下设置该卡槽位pcie slot link width 设置x8…

Paddle实现人脸对比(二)

我之前发过一篇基于孪生网络的人脸对比的文章&#xff0c;这篇文章也到了百度的推荐位置&#xff1a; 但是&#xff0c;效果并不是很好。经过大量的搜索&#xff0c;我发现了一种新的方法&#xff0c;可以非常好的实现人脸对比。 原理分析 我们先训练一个普通的人脸分类模型&…

OpenCV4.10使用形态运算提取水平线和垂直线

目标 在本教程中&#xff0c;您将学习如何&#xff1a; 应用两个非常常见的形态运算符&#xff08;即膨胀和侵蚀&#xff09;&#xff0c;并创建自定义内核&#xff0c;以便在水平轴和垂直轴上提取直线。为此&#xff0c;您将使用以下 OpenCV 函数&#xff1a; erode()dilate…

认识异常(2)

❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&a…

python创建word文档并向word中写数据

一、docx库的安装方法 python创建word文档需要用到docx库&#xff0c;安装命令如下&#xff1a; pip install python-docx 注意&#xff0c;安装的是python-docx。 二、使用方法 使用方法有很多&#xff0c;这里只介绍创建文档并向文档中写入数据。 import docxmydocdocx.Do…

基于生成对抗网络在服装领域的发展脉络和应用趋势

文章目录 1、概述2、深度学习图像生成模型2.1、深度信念网络(Deep belief network&#xff0c;DBN)2.2、变分自编码器(Variational auto-encoder&#xff0c;VAE)2.3、生成对抗网络(Generative adversarial networks&#xff0c;GAN) 3、 模型对比分析4、基于多模态转换的服装图…

nexus搭建maven与docker镜像的私有仓库

引言 通过nexus搭建maven与docker镜像的私有仓库,实现jar包与镜像动态更新、共享、存储。 一、nexus部署 通过docker-compose部署nexus name: java services:#############################环境#############################env-nexus:restart: always## 3.58.1image: so…

代码随想录算法训练营第三十七天| LeetCode 738.单调递增的数字、总结

一、LeetCode 738.单调递增的数字 题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html 状态&#xff1a;已解决 1.思路 如何求得小于等于N的最大单调递增的整数&#xff1f;98&am…

libcurl库与cpp-httplib库区别

1. 介绍 libcurl库 libcurl是一个功能强大的客户端URL传输库&#xff0c;支持多种协议如HTTP、FTP、SMTP等。它提供了丰富的API接口&#xff0c;使得开发者能够使用统一的接口来发送或接收数据。libcurl适用于需要处理多种协议和复杂的网络传输任务的场景&#xff0c;具有高度…

【C语言基础】:编译和链接(计算机中的翻译官)

文章目录 一、翻译环境和运行环境1. 翻译环境1.1 编译1.1.1 预处理1.1.2 编译1.1.3 汇编 1.2 链接 2. 运行环境 一、翻译环境和运行环境 我们在Visual Studio上写的C语言代码其实都是一些文本信息&#xff0c;计算机是不能够直接执行他们的&#xff0c;计算机只能够执行二进制…

第6章 6.4.1 案例一:爬取亚洲各地区的实时时间(MATLAB入门课程)

讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 本案例将引导大家爬取亚洲各地区的实时时间。我们将从下面这个网…

第 128 场 LeetCode 双周赛题解

A 字符串的分数 模拟 class Solution {public:int scoreOfString(string s) {int res 0;for (int i 1; i < s.size(); i) res abs(s[i] - s[i - 1]);return res;} };B 覆盖所有点的最少矩形数目 排序&#xff1a;先按照 x i x_i xi​ 排序&#xff0c;然后顺序遍…

【C++庖丁解牛】底层为红黑树结构的关联式容器--哈希容器(unordered_map和unordered_set)

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1. unordered系列关联式容…

rinex2kml(rinex生成kml文件)

rinex文件作为GNSS数据存储、解算用到最多的格式&#xff0c;其观测文件通常采用o文件作为测站卫星数据记录的格式。在收集完成rinex文件后&#xff0c;为了能快速了解这些观测数据的点位分布&#xff0c;通常需要专业的解算软件或者多种软件实现点位分布图的绘制。 为解决rine…