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的劣势
-
连接不停的创建和释放,资源浪费 -
存在大量的硬编码,违反开发的开闭原则 -
sql参数手动映射繁琐 -
结果映射繁琐 -
整体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项目
目录结构
引入依赖
<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
编写数据库连接和信息配置文件
新建文件名为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
编写核心配置文件和映射文件
<?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>
这两行定义了 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
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论