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
3.输入xml,双击XML File,然后next
4.为它命名,我这里命名为Config.xml,然后next
5.这里勾选第一个Create Xml file from a DTD file,然后next
6.这里勾选第二个Select XML Catalog entry,然后在单机一下DTD Config,然后next,finsh就好啦
7.然后对这个xml进行配置
下面是对每段代码的解释:
<?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
9.接着,再创建一个com.lexed.dao,用来存放映射文件,以下是创建映射的详细步骤(同2-6),不过映射名称一般都是类名Mapper.xml,如下所示
10.然后这里单机DTD Mapper,然后next,finsh
11.这行代码直接删掉
12.对数据库进行简单的增删改查
详解如下
<?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 的定义。
parameterType和resultType在编程领域主要用于描述函数或方法的参数和返回值的类型,它们的区别如下:
parameterType表示函数或方法的参数类型,用于指定函数或方法在被调用时所期望的参数的数据类型。这是一个输入类型,即你向函数或方法提供的数据的类型。resultType表示函数或方法的结果类型,用于指定函数或方法在执行完毕后返回的数据类型。这是一个输出类型,即函数或方法返回的数据的类型。
13.然后编写测试类,测试就可以了
测试类如下
详解如下
- 加载核心配置文件:通过类加载器获取
mybatisConfig.xml配置文件的输入流。 - 创建
SqlSessionFactoryBuilder对象:用于构建SqlSessionFactory。 - 创建
SqlSessionFactory对象:通过SqlSessionFactoryBuilder使用配置文件输入流构建SqlSessionFactory,这是创建SqlSession的工厂。 - 获取
SqlSession对象:使用SqlSessionFactory打开一个新的SqlSession,这是执行数据库操作的主要接口。 - 数据库操作:通过
SqlSession对象执行数据库查询操作。首先查询 ID 为 1 的学生,然后查询所有学生。查询结果分别存储在stu和stu2中。 - 输出查询结果:将查询到的学生信息打印到控制台。
- 释放资源:关闭
SqlSession对象以释放相关资源。
当然,这样子看起来代码很繁琐,所以可以利用工具类,每次直接调用就可以了