mybatis

admin 2025年3月20日00:25:27评论12 views字数 4280阅读14分16秒阅读模式

JDBC

JDBC(Java Database Connectivity,Java数据库连接)是一种用于Java编程语言的标准API,它允许Java程序执行对各种数据库的SQL语句调用。通过JDBC,Java应用程序可以与几乎任何支持它的数据库进行交互,包括关系型数据库如MySQL、Oracle、PostgreSQL等。

JDBC的主要组成部分: JDBC驱动:为了使用JDBC访问特定数据库,需要一个为此数据库编写的JDBC驱动。这个驱动是实现了JDBC接口的类库,它处理与特定数据库的所有通信细节。 Connection对象:表示Java应用程序和数据库之间的连接。通过DriverManager类的getConnection方法获取连接实例。 Statement对象:用于发送SQL语句到数据库。Statement是最基础的类型,还有PreparedStatement和CallableStatement,它们分别提供了预编译SQL和支持存储过程的功能。 ResultSet对象:当执行查询语句时,会返回一个包含结果的ResultSet对象。ResultSet可以通过.next()方法遍历查询的结果集。 SQLException类:处理数据库访问过程中可能产生的异常。

JDBC提供了一种标准的方法来访问不同类型的数据库,使得开发者能够编写独立于特定数据库的代码,提高了代码的可移植性和灵活性。然而,使用JDBC直接操作数据库也意味着开发者需要手动管理资源(如打开和关闭连接),这可能会增加工作量并容易出错。因此,在实际开发中,常常会结合ORM框架(如Hibernate、MyBatis)一起使用,以简化数据库访问层的开发工作。

传统JDBC的劣势

  1. 连接不停的创建和释放,资源浪费
  2. 存在大量的硬编码,违反开发的开闭原则
  3. sql参数手动映射繁琐
  4. 结果映射繁琐
  5. 整体api繁琐

Mybatis和ORM

MyBatis

MyBatis 是一种半自动化的ORM框架。它允许开发者直接编写SQL语句,并通过简单的XML或注解来配置SQL与Java对象之间的映射关系。这种方式提供了极大的灵活性,尤其是在需要优化查询性能或处理复杂查询时非常有用。

  • 灵活性:由于可以完全控制SQL语句,因此非常适合于需要对查询进行精细调整的场景。
  • 学习曲线:相对较低的学习曲线,因为它的核心理念是直接使用SQL,这对于已经熟悉SQL的开发者来说非常友好。
  • 维护性:虽然灵活,但随着项目的增长,管理大量的SQL语句和映射文件可能会变得繁琐。

ORM(对象关系映射)

ORM是一种编程技术,用于将对象模型表示的对象转换为关系型数据库中的数据,反之亦然。典型的ORM框架包括Hibernate、Entity Framework等。这些框架提供了一种抽象层,使得开发者可以通过操作对象而不是直接编写SQL语句来进行数据库操作。

  • 抽象层次高:ORM框架通常提供了高级别的抽象,使得开发者可以用面向对象的方式思考和设计系统,而不需要深入到具体的SQL细节中。
  • 生产力:通过自动生成SQL语句,减少了手动编写SQL的工作量,提高了开发效率。
  • 可移植性:由于SQL是由框架生成的,所以应用可以在不同的数据库之间更容易地迁移。
  • 性能问题:在某些情况下,自动生成的SQL可能不是最优化的,特别是在复杂的查询需求下。

搭建maven项目

mybatis
image.png

目录结构

mybatis
image.png

引入依赖

<dependencies>  
    <!--mybatis-->  
    <dependency>  
        <groupId>org.mybatis</groupId>  
        <artifactId>mybatis</artifactId>  
        <version>3.5.10</version>  
    </dependency>  
    <!--单元测试,JUnit 是一个用于测试 Java 代码的工具。它帮助你检查你的程序是否按预期工作-->  
    <dependency>  
        <groupId>junit</groupId>  
        <artifactId>junit</artifactId>  
        <version>4.12</version>  
        <scope>test</scope>  
    </dependency>  
    <!--mysql-->  
    <dependency>  
        <groupId>mysql</groupId>  
        <artifactId>mysql-connector-java</artifactId>  
        <version>8.0.25</version>  
        <scope>runtime</scope>  
    </dependency>
</dependencies>
mybatis
image.png

数据库准备

去创建一个数据库叫mybatismybatis

编写数据库连接和信息配置文件

新建文件名为db.properties,账号名密码改为自己数据库的账号名和密码,还有数据库名,数据库名就是第三行那个mybatis

mysql.driver=com.mysql.cj.jdbc.Driver  
mysql.username=root  
mysql.password=root  
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&characterEncoding=utf-8&useUnicode=true&useSSL=false
mybatis
image.png
mybatis
image.png

编写核心配置文件和映射文件

<?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>  
    <!-- 引入外部文件 -->  
    <properties resource="db.properties"/>  

    <!-- 数据源环境配置 -->  
    <environments default="development">  
        <environment id="development">  
            <transactionManager type="JDBC"/>  
            <dataSource type="POOLED">  
                <property name="driver" value="${mysql.driver}"/>  
                <property name="url" value="${mysql.url}"/>  
                <property name="username" value="${mysql.username}"/>  
                <property name="password" value="${mysql.password}"/>  
            </dataSource>        </environment>    </environments>  
    <mappers>        <mapper resource="mapper/UserMapper.xml"/>  
    </mappers>  
</configuration>
mybatis
image.png
这两行定义了 XML 文件的版本、编码方式,并通过 DOCTYPE 指定了该文档遵循 MyBatis 配置文件的 DTD(文档类型定义),确保配置文件格式正确。
<?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>根元素:整个 MyBatis 配置文件的根元素

<properties resource="application.properties"/>
引入外部属性文件 db.properties。这种方式可以将数据库连接等敏感信息或可变配置项单独存放,便于管理和修改,同时也增强了配置的灵活性。
<mappers>
    <mapper resource="mapper/UserMapper.xml"/>
</mappers>
  • <mappers> 定义了 MyBatis 如何找到 SQL 映射文件的位置。这里的例子指定了一个映射器文件 UserMapper.xml,它通常包含了针对某个实体(如 User)的操作(如查询、插入、更新、删除等)的具体 SQL 语句。

environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="${mysql.driver}"/>
            <property name="url" value="${mysql.url}"/>
            <property name="username" value="${mysql.username}"/>
            <property name="password" value="${mysql.password}"/>
        </dataSource>
    </environment>
</environments>
<environments> 定义了不同的环境配置,默认使用的是 development 环境。
<environment> 为特定环境的配置,其中包含事务管理和数据源的配置。
<transactionManager> 设置了事务管理器类型为 JDBC,意味着直接使用 JDBC 提供的事务管理功能。
<dataSource> 类型为 POOLED,表示使用连接池来管理数据库连接,提高性能。它包含了连接数据库所需的驱动类名、URL、用户名和密码等信息,这些值是从前面引入的 application.properties 文件中读取的。

原文始发于微信公众号(安全泡泡鱼):mybatis

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月20日00:25:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   mybatishttps://cn-sec.com/archives/3859573.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息