MyBatis是一个开源的Java持久层框架,用于简化数据库访问的过程。它提供了一种将数据库操作与Java对象之间的映射关系进行配置的方式,从而可以通过编写简单的XML或注解来执行数据库操作。MyBatis的主要目标是将数据库操作与Java代码的耦合度降到最低,同时提供灵活性和高度的可定制性。它采用了一种称为"对象关系映射"(Object-Relational Mapping,ORM)的技术,将数据库表中的记录映射为Java对象,从而使开发人员可以使用面向对象的方式进行数据库操作。
MyBatis的核心组件包括:
1. SqlSessionFactory:用于创建SqlSession的工厂类。SqlSession是与数据库交互的主要接口,它提供了执行SQL语句和管理事务的方法。
2. Mapper接口:定义了与数据库交互的方法,通过在Mapper接口中编写SQL语句的映射,可以实现数据库操作的封装和重用。
3. Mapper XML文件:用于将Mapper接口中的方法与SQL语句进行映射。在XML文件中,可以编写SQL语句,并使用占位符和参数映射来实现动态SQL查询。
4. 配置文件:用于配置MyBatis的行为和属性,包括数据库连接信息、映射文件的位置等。
使用MyBatis,开发人员可以通过简单的配置和编写少量的代码,实现数据库的增删改查操作。它具有灵活性和可定制性,可以适应各种复杂的数据库操作需求。此外,MyBatis还提供了对事务管理、缓存和高级查询功能的支持,使得数据库访问更加方便和高效。
a.创建Maven项目:在IntelliJ IDEA中创建一个新的Maven项目。选择"File" -> "New" -> "Project",然后选择"Maven"作为项目类型,并按照向导完成项目的创建。(成功创好的效果如下)
b.添加MyBatis依赖:
在项目的pom.xml
文件中添加MyBatis的依赖项。
4.0.0
org.example
untitled
1.0-SNAPSHOT
8
8
org.mybatis
mybatis
3.5.10
junit
junit
4.13.2
test
mysql
mysql-connector-java
8.0.27
org.apache.maven.plugins
maven-archetype-plugin
3.2.1
保存pom.xml
文件后,Maven会自动下载并导入所需的依赖项。(注意version的版本具体可以查看外部库)
tips: Maven插件是用于扩展和定制Maven构建过程的工具。maven-archetype-plugin插件用于创建项目的原型(archetype),它可以根据预定义的模板生成项目的基本结构和配置文件。若出现构建插件失败请检查插件版本,并通过删除原版本插件联网重构的方式完成依赖或插件配置
以上是本人所用到的插件和依赖(可以作为模板多次使用)
c.创建MyBatis配置文件:
在项目的src/main/resources
目录下创建一个名为mybatis-config.xml
的文件和一个名为db.properties的文件。在两个文件中配置MyBatis的相关设置,例如数据库连接信息、映射文件的位置等。以下是一个示例:
所引入外部db.properties 后缀一定不能错(properties)代码:(注意连接数据库的版本,这里所用的是1.8版本的所以所用驱动为com.mysql.cj.jdbc.Driver,对应的用户名和密码记得改为自己的)
db.properties
mysql.driver=com.mysql.cj.jdbc.Driver
mysql.username=root
mysql.password=root
mysql.url=jdbc:mysql://localhost:3306/你的数据库名?serverTimezone=UTC&characterEncoding=utf8
d.创建user实体,编写Java代码,
这里编写Main类,该类用于封装user的属性
根据所创建的数据库(请提前建好数据库)的内容构造
package org.example;
public class Main {
private int aId;
private String userName;
private String passWord;
public int getaId() {
return aId;
}
public void setaId(int aId) {
this.aId = aId;
}
public String getUserName() {
return userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override
public String toString() {
return "Main{" +
"aId=" + aId +
", userName='" + userName + '\'' +
", passWord='" + passWord + '\'' +
'}';
}
}
//注意idea中快捷键alt+ins的使用
//用途:
//数据模型: 它可能用作数据模型,表示与数据库表或其他数据源相关的实体。在这种情况下,它存储了一个用户的标识符、用户名和密码。
//DTO(Data Transfer Object): 作为在不同层之间传递数据的对象,例如在业务逻辑层和持久层之间。
//JavaBean: 提供了一种符合JavaBean规范的简单Java类,具有私有属性、公共访问方法和重写的 toString 方法。
//总的来说,这个类的存在是为了提供一个表示用户或相关数据的简单Java对象,并为这些对象提供基本的访问和操作方法。
e.创建关键的映射文件
(由于一个项目的映射文件不止一个这里在resources
目录下创建文件夹mapper在里面存放映射文件)具体位置如下图所示的UserMapper.xml文件,该文件主要用于实现SQL语句和Java对象之间的映射,使SQL语句查询出来的关系型数据能够被封装成Java对象,记得完成后在mybatis-config.xml映射文件中添加
UserMapper.xml映射文件的配置如下:
在项目中的位置
具体代码如下
f.编写测试类:
在项目的src/test /java目录下创建Test包,在Test包下创建UserTest类用于程序测试
package com.main.test;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import org.apache.ibatis.io.Resources;
import java.io.InputStream;
public class UserTest {
@Test
public void findById() throws Exception{
//获取核心配置文件
InputStream is =Resources.getResourceAsStream("mybatis-config.xml");
//创建sqlSessionFactory工厂对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
//创建sqlSession对象
SqlSession sqlSession =sqlSessionFactory.openSession();
//执行sqlSession语句,注意sql语句的唯一标识符namespace.id
Object user=sqlSession.selectOne("org.example.Main.findById",2);
System.out.println(user);
//释放资源
sqlSession.close();
}
}
// 类定义:
//public class UserTest {
// 这声明了一个名为UserTest的Java类。用于测试某些功能的测试类,可能涉及MyBatis和数据库操作。
//
// 测试方法:
//
//
// @Test
// public void findById() throws Exception {
// 这个方法被注解为@Test,表明它是一个JUnit测试方法。方法的名称表明它测试了通过用户ID查找用户的功能。
//
// 加载配置:
//
//
// InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
// 这一行试图加载名为"mybatis-config.xml"的MyBatis配置文件作为输入流。用方法
// Resources.getResourceAsStream来加载文件。
// 构建SqlSessionFactory:
// SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
// 使用SqlSessionFactoryBuilder,它构建了一个SqlSessionFactory对象。这个工厂负责创建SqlSession实例,用于与数据库交互。
// 打开SqlSession:
// SqlSession sqlSession = sqlSessionFactory.openSession();
// 这一行从SqlSessionFactory创建了一个新的SqlSession。SqlSession是一个MyBatis接口,用于执行SQL语句。
// 执行SQL查询:
// Object user = sqlSession.selectOne("org.example.Main.findById", 2);
// 它使用SqlSession对象上的selectOne方法执行SQL查询。第一个参数是语句标识符("org.example.Main.findById"),第二个参数是要传递给查询的参数(在这种情况下是用户ID '2')。
// 打印结果:
// System.out.println(user);
// 查询的结果被打印到控制台。
// 关闭SqlSession:
// sqlSession.close();
// 最后,关闭SqlSession以释放资源。
这个测试使用MyBatis来与数据库交互的findById功能的测试
最终成功的效果为查到aId为2的情况下数据库中的信息:
1、MyBatis工作原理
1. 简化SQL编写:使用JDBC时,需要手动编写SQL语句并处理参数绑定、结果集映射等操作。而MyBatis通过提供XML配置文件或注解的方式,可以将SQL语句与Java代码分离,使得SQL的编写更加简洁和可维护。
2. 提供对象关系映射(ORM)功能:MyBatis支持将查询结果自动映射到Java对象中,减少了手动处理结果集的工作量。可以通过配置文件或注解来指定对象和数据库表之间的映射关系,从而简化了数据访问层的开发。
3. 支持动态SQL:MyBatis提供了强大的动态SQL功能,可以根据条件动态生成SQL语句。这样可以避免在代码中拼接SQL字符串,使得SQL语句的编写更加灵活和易于维护。
4. 提供缓存机制:MyBatis内置了一级缓存和二级缓存,可以有效地减少数据库访问次数,提高系统性能。一级缓存是默认开启的,它在同一个SqlSession中有效;而二级缓存可以跨SqlSession共享,适用于多个SqlSession之间的数据共享。
5. 支持插件扩展:MyBatis提供了插件机制,可以通过自定义插件来扩展和定制其功能。这样可以在不修改MyBatis源代码的情况下,对其进行功能增强或改造。
总的来说,MyBatis相对于JDBC提供了更高层次的抽象和封装,简化了数据库访问的代码编写和维护工作,提高了开发效率和系统性能。
后续内容将会持续更新,如有问题请各位大佬提出指点..........