mybatis基础篇

265 阅读5分钟

MyBatis 是一个持久化框架,它的主要作用是将数据持久化到数据库中。与 Hibernate 和 JPA 这样的 ORM 框架不同,MyBatis 并不会自动映射数据库表到 Java 对象,而是需要开发者手动编写 SQL 语句来完成映射。

MyBatis 的核心思想是将 SQL 语句与 Java 代码分离,这样可以让开发者更加专注于 SQL 语句的编写,而不用过多地关注数据库连接、结果集处理等底层细节。在 MyBatis 中,SQL 语句是以 XML 文件或者注解的形式存在的,这样可以使得 SQL 语句更加易于管理和维护。

MyBatis 的工作流程是这样的:首先,开发者需要编写 SQL 语句,并将 SQL 语句与 Java 对象进行映射。然后,在 Java 代码中调用 MyBatis 的 API,执行 SQL 语句并将结果映射到 Java 对象中。最后,开发者可以直接使用映射后的 Java 对象进行业务逻辑处理。

MyBatis 的优点在于它提供了灵活的方式来映射 SQL 语句和 Java 对象,开发者可以自由地控制 SQL 语句的编写和执行,从而更好地优化性能。此外,MyBatis 还支持存储过程、动态 SQL 等高级特性,使得开发者可以更加灵活地应对各种业务需求。

以下是个简单案例: 1.首先需要先导包,可以自行去mybatis官网获取对应的jar包

2.NEW---->Other

image.png

3.输入xml,双击XML File,然后next image.png

4.为它命名,我这里命名为Config.xml,然后next

image.png

5.这里勾选第一个Create Xml file from a DTD file,然后next

image.png

6.这里勾选第二个Select XML Catalog entry,然后在单机一下DTD Config,然后next,finsh就好啦

image.png

image.png

7.然后对这个xml进行配置

image.png

下面是对每段代码的解释:

  • <?xml version="1.0" encoding="UTF-8" ?>:指定 XML 版本和编码方式。
  • <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">:声明文档类型,指定 MyBatis 配置文件的 DTD(文档类型定义)。
  • <configuration>:配置文件的根元素。
  • <properties resource="db.properties"></properties>:引入外部的配置文件
- (注意:db.properties是我用来存储我的数据库连接的相关配置信息,你们可以自行配置)
  • <environments default="env">:配置环境,可以配置多个环境,通过 default 属性指定默认使用的环境。
  • <environment id="env">:定义一个环境,通过 id 属性指定环境的唯一标识符。
  • <transactionManager type="JDBC"/>:配置事务管理器,type 属性指定事务管理器的类型。
  • <dataSource type="POOLED">:配置数据源,type 属性指定数据源的类型。
  • <property name="driver" value="${driverClassName}"/>":配置数据库驱动。
  • <property name="url" value="${url}"/>:配置数据库连接 URL。
  • <property name="username" value="${username}"/>:配置数据库用户名。
  • <property name="password" value="${password}"/>:配置数据库密码。
  • <mappers>:配置映射文件,可以配置多个映射文件。
  • <mapper resource="cn/lexed/dao/StudentMapper.xml"/>:指定一个映射文件的路径。

8.配置文件写好之后,可以创建一个包,名为com.lexed.pojo,用来存放实体类,然后写一个无参构造,一个set,get方法,一个tostring

image.png

image.png

9.接着,再创建一个com.lexed.dao,用来存放映射文件,以下是创建映射的详细步骤(同2-6),不过映射名称一般都是类名Mapper.xml,如下所示

image.png

10.然后这里单机DTD Mapper,然后next,finsh image.png

11.这行代码直接删掉

image.png

12.对数据库进行简单的增删改查

image.png

详解如下

  • <?xml version="1.0" encoding="UTF-8"?>: XML 文件的声明,指定了 XML 的版本和编码方式。
  • <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >: 文档类型定义,指定了这个 XML 文件遵循 MyBatis 3.0 的映射文件规范。
  • <mapper namespace="cn.lexed.dao.StudentMapper">: 定义了一个 mapper,命名空间为 cn.lexed.dao.StudentMapper
  •  <select id="getStudents" resultType="Student">: 定义了一个查询的 SQL 语句,ID 为 getStudents,返回的结果类型为 Student。执行的 SQL 语句为 select * from student,即从 student 表中查询所有数据。
  •  <select id="getStudent2" parameterType="int" resultType="student">: 定义了另一个查询的 SQL 语句,ID 为 getStudent2,接受一个整型参数,返回的结果类型为 student。执行的 SQL 语句为 select * from student where id=#{id},即从 student 表中根据 ID 查询数据。
  •  <delete id="removeStudent" parameterType="int" >: 定义了一个删除的 SQL 语句,ID 为 removeStudent,接受一个整型参数。执行的 SQL 语句为 delete from student where id=#{id},即从 student 表中删除指定 ID 的数据。
  •  <insert id="insertStudent" parameterType="student">: 定义了一个插入的 SQL 语句,ID 为 insertStudent,接受一个 student 类型的参数。执行的 SQL 语句为 insert into student(id,name,age,addres) values(#{id},#{name},#{age},#{addres}),即将一个 student 对象的数据插入到 student 表中。
  •  <update id="updateStudent" parameterType="student">: 定义了一个更新的 SQL 语句,ID 为 updateStudent,接受一个 student 类型的参数。执行的 SQL 语句为 update student set name=#{name},age=#{age},addres=#{addres} where id=#{id},即更新 student 表中指定 ID 的数据。
  • </mapper>: 结束 mapper 的定义。

parameterTyperesultType在编程领域主要用于描述函数或方法的参数和返回值的类型,它们的区别如下:

  • parameterType表示函数或方法的参数类型,用于指定函数或方法在被调用时所期望的参数的数据类型。这是一个输入类型,即你向函数或方法提供的数据的类型。
  • resultType表示函数或方法的结果类型,用于指定函数或方法在执行完毕后返回的数据类型。这是一个输出类型,即函数或方法返回的数据的类型。

13.然后编写测试类,测试就可以了

image.png

测试类如下

image.png

详解如下

  1. 加载核心配置文件:通过类加载器获取 mybatisConfig.xml 配置文件的输入流。
  2. 创建 SqlSessionFactoryBuilder 对象:用于构建 SqlSessionFactory
  3. 创建 SqlSessionFactory 对象:通过 SqlSessionFactoryBuilder 使用配置文件输入流构建 SqlSessionFactory,这是创建 SqlSession 的工厂。
  4. 获取 SqlSession 对象:使用 SqlSessionFactory 打开一个新的 SqlSession,这是执行数据库操作的主要接口。
  5. 数据库操作:通过 SqlSession 对象执行数据库查询操作。首先查询 ID 为 1 的学生,然后查询所有学生。查询结果分别存储在 stu 和 stu2 中。
  6. 输出查询结果:将查询到的学生信息打印到控制台。
  7. 释放资源:关闭 SqlSession 对象以释放相关资源。

当然,这样子看起来代码很繁琐,所以可以利用工具类,每次直接调用就可以了

image.png

image.png