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

初识MyBatis

MyBatis是一款流行的持久层开发框架,以下是关于它的一些基础知识:

 

定义与作用

 

MyBatis是支持定制化SQL、存储过程和高级映射的持久层框架,能将Java对象与数据库表记录相互转换,让开发者专注于业务逻辑,而非数据库操作细节。

 

核心组件

 

SqlSessionFactory:作为MyBatis的关键对象,用于创建SqlSession。通常通过SqlSessionFactoryBuilder从配置文件或配置对象构建。

 

SqlSession:代表与数据库的一次会话,可执行SQL命令、事务管理等操作,如调用selectOne、selectList等方法执行查询,用insert、update、delete进行数据更新。

  Mapper接口与Mapper XML文件:Mapper接口定义了操作数据库的方法,Mapper XML文件则详细配置了这些方法对应的SQL语句及参数映射等信息,通过namespace与Mapper接口关联,其中的SQL语句可使用动态SQL标签实现灵活查询。

 

优势

 灵活性高:在Mapper XML文件中能自由编写复杂SQL,适应各种数据库操作需求,还支持动态SQL,可根据不同条件生成不同SQL语句。

  可维护性强:SQL语句与Java代码分离,便于修改和维护,提高了代码的可读性和可维护性。

  性能优化便利:开发者能对SQL进行精细优化,还支持缓存机制,如一级缓存和二级缓存,提升数据访问性能,减少数据库查询次数。

 

简单示例

 

以下是一个简单的MyBatis使用示例,假设要查询数据库中的用户信息:

 创建Mapper接口

 

java

public interface UserMapper {

    User getUserById(int id);

}

 

 

- 创建Mapper XML文件

 

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="com.example.mapper.UserMapper">

    <select id="getUserById" resultMap="UserResultMap">

        SELECT id, username, password

        FROM users

        WHERE id = #{id}

    </select>

</mapper>

 

 

 

 使用MyBatis查询数据

 

java

public class Main {

    public static void main(String[] args) {

        // 读取MyBatis配置文件

        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

        // 构建SqlSessionFactory

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 打开SqlSession

        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {

            // 获取Mapper接口实例

            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

            // 调用Mapper方法查询用户

            User user = userMapper.getUserById(1);

            System.out.println(user.getUsername());

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

相关文章:

  • Java IO
  • 【深度学习】分布偏移纠正
  • PHP场地预定小程序源码
  • 多表关联查询的优化
  • BERT 大模型
  • Grafana——Rocky9安装Grafana相关步骤记录
  • 【文献精读】AAAI24:FacetCRS:打破对话推荐系统中的“信息茧房”
  • 无第三方依赖 go 语言工具库
  • 1688商品评论API接口概述,json数据示例参考
  • Unity 手机屏幕适配
  • 简站主题:简洁、实用、SEO友好、安全性高和后期易于维护的wordpress主题
  • 记一次 Git Fetch 后切换分支为空的情况
  • oppo,汤臣倍健,康冠科技25届春招内推
  • 二、几何体BufferGeometry顶点笔记
  • 【MySQL高级】17 - MySQL中常用工具
  • 3.hadoop3.3.6 HA集群搭建
  • SpringBoot源码解析(十):应用上下文AnnotationConfigServletWebServerApplicationContext构造方法
  • 深度学习-1.简介
  • 深入探索 DeepSeek 在数据分析与可视化中的应用
  • qemu启动aarch64 linux+ buildroot + 应用程序
  • 雅安市纪委监委回应黄杨钿甜耳环事件:相关政府部门正在处理
  • 我使馆就中国公民和企业遭不公正待遇向菲方持续提出严正交涉
  • 小雨伞保险经纪母公司手回集团通过港交所聆讯
  • 2000多年前的“新衣”长这样!马王堆文物研究新成果上新
  • 巴菲特谈卸任CEO:开始偶尔失去平衡,但仍然保持敏锐的头脑,仍打算继续工作
  • 广东省原省长卢瑞华逝世,享年88岁