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

初学 mybatis

前言

回顾之前 不使用 mybatis 框架,我们是怎么通过Java 操作数据库的= "jdbc"

前提:使用maven 构建的项目

1 添加 关于jdbc 的依赖,以及辅助操作数据库的 commons-dubli   jar包

  • 截取 前后端项目 

2 添加配置文件里面内容有:数据库三件套: username,password,url 。数据库驱动

db.properties 配置文件

driverClass=com.mysql.cj.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/arimethic?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
username=root
password=123456

3 添加 加载 配置文件的类,还包括 连接数据库,关闭 各个资源的方法

jdbcUtil 类【工具类】

package it.projiect3.util;

import java.sql.*;
import java.util.Properties;

public class jdbcUtil {
    //读取配置文件内容,使用 static 静态代码块
   private static Properties properties=new Properties();
    static {
        try {
            properties.load(jdbcUtil.class.getClassLoader().getResourceAsStream("db.properties"));
               Class.forName(properties.getProperty("driverClass"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static Connection getCollection() throws SQLException {
        String jdbcUrl = properties.getProperty("jdbcUrl");
        String userName = properties.getProperty("username");
        String userPassword = properties.getProperty("password");
        return DriverManager.getConnection(jdbcUrl,userName,userPassword);
    }
    public static void close(Connection conn,Statement stmt, ResultSet rs) {
        try {
            if (rs != null) rs.close();
            if (stmt != null) stmt.close();
            if (conn != null) conn.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
    public static void close(Connection conn){
        close(conn,null,null);
    }
}

4举例: 查询所有数据

  • 截取 前后端项目部分代码
StudentDaoImpl 类

    @Override
    public Student selectAll(Student student) {
        QueryRunner queryRunner = new QueryRunner();
        Connection conn=null;
        try {
            conn=getCollection();
            String sql="select id,student_name studentName ,student_password studentPassword from student where student_name=? and student_password=?";

            return  queryRunner.query(conn, sql,new BeanHandler<>(Student.class) ,student.getStudentName(),student.getStudentPassword());
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            close(conn);
        }

    }

通过以上的了解,发现即使 使用 jdbc 操作数据库。其中还有 许多重复,且繁琐的操作。是否可以通过学习新的知识,节省部分代码和相关的操作呢?


Mybatis 框架介绍

MyBatis 是一款优秀的轻量级 Java 持久层框架,主要用于简化数据库操作。以下是关于 MyBatis 的基本介绍:

1. 核心功能

  • 自定义 SQL 支持:MyBatis 允许开发者手动编写 SQL 语句,而不是完全依赖于 ORM 自动生成。这种方式提供了更高的灵活性和性能优化能力。

  • 高级映射:通过 XML 或注解,MyBatis 可以将 Java 对象(POJO)与数据库表进行映射。

  • 动态 SQL:MyBatis 提供了强大的动态 SQL 功能,可以根据业务逻辑动态生成 SQL 语句,减少冗余代码。

  • 存储过程支持:支持调用数据库存储过程。

2. 工作原理

MyBatis 通过配置文件(XML 或注解)定义 SQL 映射关系,将 Java 方法与 SQL 语句关联起来。它封装了 JDBC 的繁琐操作,如资源管理、参数设置和结果集处理。

3. 优点

  • 简化开发:减少了大量的 JDBC 代码,简化了异常处理和资源管理。

  • 高性能:允许开发者直接优化 SQL,适合对性能要求较高的场景。

  • 灵活性高:开发者可以自由编写 SQL,充分发挥数据库性能。

  • 易于学习:配置简单,文档详尽,对熟悉 SQL 和 Java 的开发者非常友好。

  • 轻量级:启动时间短,内存占用小,对现有项目侵入性低。

  • 良好的缓存机制:支持一级缓存(SqlSession 级别)和二级缓存(命名空间级别),可显著提升性能。


文章转载自:

http://GU8bcZD7.fywqr.cn
http://KfhgoB1e.fywqr.cn
http://DOr3pbRV.fywqr.cn
http://PWmuA8AE.fywqr.cn
http://5TS1tjDt.fywqr.cn
http://w6ZK3uZE.fywqr.cn
http://MU1VU9Ep.fywqr.cn
http://nlBr9PEK.fywqr.cn
http://e2yYNevx.fywqr.cn
http://QChHa9H7.fywqr.cn
http://2vTFK7LJ.fywqr.cn
http://GY0GT3Uf.fywqr.cn
http://NZHdSBET.fywqr.cn
http://tKA6HaI9.fywqr.cn
http://w5C86d9F.fywqr.cn
http://Q5x2ofww.fywqr.cn
http://RGZOylPQ.fywqr.cn
http://ccC41PgQ.fywqr.cn
http://EBoftHDp.fywqr.cn
http://uvBNtiVB.fywqr.cn
http://eEgKj2iV.fywqr.cn
http://ppEoeLzf.fywqr.cn
http://qCPzpad1.fywqr.cn
http://wI3NXLKS.fywqr.cn
http://jAneghRO.fywqr.cn
http://IHx3lj1f.fywqr.cn
http://W6xTX9RO.fywqr.cn
http://y0z0LZRA.fywqr.cn
http://SLbao3RI.fywqr.cn
http://9xzGrDD6.fywqr.cn
http://www.dtcms.com/a/15267.html

相关文章:

  • 第J7周:对于ResNeXt-50算法的思考
  • SpringBoot的日志框架
  • 矩阵碰一碰发视频的源码技术开发,支持OEM
  • 华为云之CodeArts IDE的使用体验
  • Git 分布式版本控制
  • VSCode配合cline实现自动编程
  • 完善sql盲注中的其他函数 dnslog+sqlmap外带数据
  • minio在上传pdf文件时设置Content-Type: application/pdf有什么作用
  • 论面向服务的架构设计
  • Qt QSpinBox 总结
  • Large Language Model Distilling Medication Recommendation Model
  • 移动端测试的挑战与解决方案:兼容性、网络问题及实战策略
  • 如何通过产品版本管理提升软件开发效率?
  • 望远镜成像系统--科学评价光学镜头
  • 人工智能之数学基础:线性子空间
  • JavaScript 高效编码完全指南
  • 盛铂科技 SCP4006/4018/4040:国产袖珍式功率计 射频微波功率探头 平均功率计
  • Linux进程信号
  • pycharm上传github问题:rejected
  • 十进制数到十六进制数的转换
  • 【云安全】云原生-K8S(四)安全问题分析
  • IS-IS 泛洪机制 | LSP 处理流程
  • Agents Go Deep 智能体深入探索
  • uniapp商场之订单模块【订单列表】
  • SpringBoot自动配置-以Mybatis配置为例
  • 深入解析:如何利用 Python 爬虫获取淘宝/天猫 SKU 详细信息
  • 模型文件及部署工具包org.dmg.pmml
  • 本地部署SafeLine详细指南:抵御网络攻击构建更安全的网站环境
  • LabVIEW太阳能制冷监控系统
  • C# OpenCV机器视觉:OSTU算法实现背景差分的自适应分割