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

Java经典框架之MyBatis

一、基本介绍

        MyBatis 是一个非常流行的 Java 持久层框架,它提供了简单的方法来处理数据库中的数据。MyBatis 可以看作是 JDBC 的一个薄封装,它简化了 JDBC 代码的编写,同时提供了强大的功能,如动态 SQL、映射自定义对象到数据库记录等。

二、核心特性

SQL Mapper: MyBatis 使用 XML 或注解来映射 SQL 语句,这使得 SQL 语句可以与 Java 代码分离,便于管理和维护。

动态 SQL: MyBatis 支持动态 SQL,这意味着 SQL 语句可以根据条件动态地构建,提高了代码的复用性。

高级映射: MyBatis 支持将数据库列映射到 Java 对象的属性,包括但不限于简单类型、自动增长的主键、关联查询等。

配置简单: MyBatis 的配置相对简单,通过 XML 文件或注解可以轻松配置数据源、事务管理器等。

事务支持: MyBatis 支持声明式事务和编程式事务,可以方便地管理数据库事务。

缓存机制: MyBatis 提供了一级缓存和二级缓存,可以显著提高数据访问的性能。

插件机制: MyBatis 允许开发者编写插件来拦截方法调用,实现自定义的功能,如分页、性能监控等。

Spring 集成: MyBatis 可以很容易地与 Spring 框架集成,利用 Spring 的依赖注入和事务管理。

MyBatis-Spring 框架: 这是 MyBatis 和 Spring 的整合版本,提供了额外的集成特性,如自动 SQL 映射和事务管理。

MyBatis Plus: 是 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

三、使用配置

  • 配置 MyBatis: 创建 MyBatis 的配置文件,配置数据库连接信息、事务管理器等。
  • 创建 Mapper 接口: 定义一个接口,该接口中的方法将与 SQL 语句映射。
  • 编写 SQL 映射文件: 创建 XML 文件,定义 SQL 语句和映射规则。
  • 配置 Mapper 扫描: 配置 MyBatis 扫描 Mapper 接口和 SQL 映射文件的位置。
  • 使用 MyBatis: 通过 Mapper 接口调用数据库操作。

四、简单示例

1. 配置 MyBatis

首先,需要在 mybatis-config.xml 中配置 MyBatis 的基本设置:

<?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/your_database"/><property name="username" value="your_username"/><property name="password" value="your_password"/></dataSource></environment></environments><mappers><mapper resource="org/mybatis/example/BlogMapper.xml"/></mappers>
</configuration>

2. 创建数据访问对象(DAO)接口

定义一个接口,该接口中的方法将与 SQL 语句映射:

public interface BlogMapper {Blog selectBlog(int id);List<Blog> selectAllBlogs();
}

3. 编写 SQL 映射文件

创建 XML 文件,定义 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="org.mybatis.example.BlogMapper"><select id="selectBlog" resultType="Blog">SELECT id, title, author, contentFROM BlogWHERE id = #{id}</select><select id="selectAllBlogs" resultType="Blog">SELECT id, title, author, contentFROM Blog</select>
</mapper>

4. 使用 MyBatis

在应用程序中使用 MyBatis 的 SqlSessionFactoryMapper 接口进行数据库操作:

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.util.List;public class MyBatisExample {public static void main(String[] args) throws Exception {// 加载 MyBatis 配置文件String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);// 构建 SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 创建 SqlSession 实例try (SqlSession session = sqlSessionFactory.openSession()) {// 获取 Mapper 接口的实现BlogMapper mapper = session.getMapper(BlogMapper.class);// 调用 Mapper 接口中的方法Blog blog = mapper.selectBlog(1);System.out.println(blog.getAuthor());List<Blog> blogs = mapper.selectAllBlogs();for (Blog blogItem : blogs) {System.out.println(blogItem.getTitle());}}}
}

在这个示例中,我们首先配置了 MyBatis,然后定义了一个 BlogMapper 接口,接着创建了一个 XML 文件来映射 SQL 语句。最后,在 main 方法中,我们创建了一个 SqlSession 实例,通过它获取了 BlogMapper 的实现,并调用了其中的方法来执行数据库操作。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 分享购买率拉满的8个商品详情页设计技巧!
  • 太阳能光伏电池板图像数据集
  • 2024 波卡黑客松大赛新加坡站晋级名单揭晓!共同见证潜力新星的巅峰之战
  • PCB过孔规则排列,还是随机?
  • 【网络安全】IIS未授权访问敏感数据
  • PHP7 的内核结构
  • Word文档被锁定无法编辑怎么办?一键快速移除Word编辑限制
  • 最新版 Java 线程池的设计与使用|万字笔记
  • 【EffectiveJava】chapter01对象创建与销毁
  • 虚拟机网络配置大纲
  • E31.【C语言】练习:指针运算习题集(上)
  • 深入RAG优化:BGE词嵌入全解析与Landmark Embedding新突破
  • C#线程同步
  • 大众(奥迪)汽车继电器编号对照表
  • uniapp+vue3实现双通道透明MP4播放支持小程序和h5
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • [译] 怎样写一个基础的编译器
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Apache Spark Streaming 使用实例
  • dva中组件的懒加载
  • ESLint简单操作
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Lucene解析 - 基本概念
  • Redis在Web项目中的应用与实践
  • vue脚手架vue-cli
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 猴子数据域名防封接口降低小说被封的风险
  • 机器学习中为什么要做归一化normalization
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 如何学习JavaEE,项目又该如何做?
  • 通过几道题目学习二叉搜索树
  • 延迟脚本的方式
  • 再次简单明了总结flex布局,一看就懂...
  • 在Unity中实现一个简单的消息管理器
  • 智能网联汽车信息安全
  • # 安徽锐锋科技IDMS系统简介
  • #{}和${}的区别是什么 -- java面试
  • #ifdef 的技巧用法
  • #大学#套接字
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (C++)八皇后问题
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (理论篇)httpmoudle和httphandler一览
  • (四)c52学习之旅-流水LED灯
  • (算法)N皇后问题
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .NET Core 版本不支持的问题
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET中使用Protobuffer 实现序列化和反序列化
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @requestBody写与不写的情况
  • [ C++ ] STL_vector -- 迭代器失效问题