目录

MyBatis简介

MyBatis使用流程

配置文件(mybatis-config.xml)

映射文件(UserMapper.xml)

DAO 接口(UserMapper.java) 

使用 MyBatis 

Mapper代理

MyBatis核心配置文件

MyBatis参数类型和传递

单个参数:

多个参数:

建议:

CURD操作

查询操作

添加操作

修改操作

删除操作


MyBatis简介

MyBatis 是一个开源的持久化框架,用于简化数据库操作的开发。它提供了一种将 SQL 查询、插入、更新和删除等操作与 Java 对象之间的映射关系的方式,从而方便地进行数据持久化操作。

MyBatis 的核心理念是将 SQL 语句与 Java 代码解耦,通过 XML 或注解的配置方式,将 SQL 语句独立于代码之外,并通过映射文件或注解将查询结果映射到对应的 Java 对象上。

MyBatis使用流程

MyBatis 的使用流程一般包括以下几个步骤:

  1. 配置 MyBatis:首先需要配置 MyBatis,包括数据库连接信息、映射文件的路径等。可以通过 XML 配置文件或 Java 代码进行配置。

  2. 创建 SqlSessionFactory:根据配置信息创建一个 SqlSessionFactory 对象,SqlSessionFactory 是 MyBatis 的核心对象,用于创建 SqlSession。

  3. 定义映射文件:创建一个或多个映射文件,映射文件中定义了 SQL 语句与 Java 对象的映射关系,以及其他配置信息。

  4. 创建 SqlSession:通过 SqlSessionFactory 创建一个 SqlSession 对象,SqlSession 提供了操作数据库的方法,包括查询、插入、更新和删除等。

  5. 执行 SQL 操作:使用 SqlSession 调用相应的方法执行 SQL 操作。可以直接调用方法,也可以通过映射文件中定义的 SQL 语句进行操作。

  6. 处理结果:根据 SQL 操作的返回结果,进行相应的处理。MyBatis 会将查询结果映射为 Java 对象,通过对象返回给调用方。

  7. 关闭资源:在完成数据库操作后,需要关闭 SqlSession,释放相关资源。

示例:

配置文件(mybatis-config.xml)

<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
        <property name="username" value="root"/>
        <property name="password" value="password"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/example/mapper/UserMapper.xml"/>
  </mappers>
</configuration>

映射文件(UserMapper.xml)

<mapper namespace="com.example.mapper.UserMapper">
  <select id="getUserById" resultType="com.example.model.User">
    SELECT * FROM user WHERE id = #{id}
  </select>
</mapper>

DAO 接口(UserMapper.java) 

package com.example.mapper;

import com.example.model.User;

public interface UserMapper {
    User getUserById(int id);
}

使用 MyBatis 

import com.example.mapper.UserMapper;
import com.example.model.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MyBatisExample {
    public static void main(String[] args) {
        String resource = "mybatis-config.xml";
        try (InputStream inputStream = Resources.getResourceAsStream(resource)) {
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            try (SqlSession session = sqlSessionFactory.openSession()) {
                UserMapper userMapper = session.getMapper(UserMapper.class);
                User user = userMapper.getUserById(1);
                System.out.println(user);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Mapper代理

Mapper 代理开发是 MyBatis 中一种便捷的数据库操作方式,它通过动态代理技术自动生成 DAO(Data Access Object)接口的实现类。开发人员只需编写接口,并在 XML 配置文件中定义 SQL 映射关系,无需编写具体的实现类,就可以直接调用 DAO 接口中定义的方法进行数据库操作。

具体使用:

1.定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
2.设置SQL映射文件的namespace属性为Mapper接口全限定名
3.在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
4.编码:①通过SqlSession的getMapper方法获取Mapper接口的代理对象 ②调用对应方法完成sql的执行

MyBatis核心配置文件

MyBatis 核心配置文件是 MyBatis 的配置中心,用于定义 MyBatis 的全局配置信息、数据源信息、映射器、插件等。它是一个 XML 文件,通常命名为 mybatis-config.xml

MyBatis 核心配置文件包括以下几个部分:

  1. configuration:MyBatis 根元素,包含了所有的配置信息。

  2. settings:MyBatis 的全局配置项,包括缓存配置、日志配置、延迟加载配置、默认语句超时时间等。

  3. typeAliases:类型别名配置,用于定义别名以便在映射文件中使用。

  4. typeHandlers:类型处理器配置,用于将数据库中的数据类型转换为 Java 类型。

  5. environments:环境配置,可以定义多个环境,每个环境包含一个数据源和一个事务管理器。

  6. environment:单个环境定义,包含一个数据源和一个事务管理器。

  7. transactionManager:事务管理器配置,用于控制事务。

  8. dataSource:数据源配置,包含一些必须的属性,例如驱动类、连接 URL、用户名和密码等。

  9. mappers:映射器配置,用于定义映射器的位置和加载方式。

  10. mapper:单个映射器定义,可以通过 resource、url 或 class 属性指定映射器的位置或类文件。

 

MyBatis参数类型和传递

单个参数:

1.POJO类型:直接使用,实体类属性名和参数占位符名称一致

2.Map集合:直接使用,键名和参数占位符名称一致

3.Collection:封装为Map集合

map.put("collection",collection集合);

map.put("arg0",collection集合);

4.List:封装为Map集合

map.put("collection",list集合);

map.put("list",list集合);

map.put("arg0",list集合);

5.Array:封装为Map集合

map.put("array",数组);

map.put("arg0",数组);

6.其他类型:直接使用

多个参数:

封装为Map集合

map.put("arg0",参数值1);

map.put("param1",参数值1);

map.put("arg1",参数值2);

map.put("param2",参数值2);

建议:

使用@Param注解来修改Map集合中默认的键名,并使用修改后的名称来获取值,这样代码可读性更高。

CURD操作

查询操作

在 MyBatis 中进行查询操作主要涉及以下几个方面

  1. 查询所有 & 结果映射:

    • 首先,在映射文件(Mapper.xml)中定义 SQL 语句,如 SELECT * FROM table_name。
    • 在映射文件中配置结果映射,将查询结果映射为 Java 对象。可以使用 resultType 或 resultMap 进行结果映射配置。
  2. 单项查询:

    • 在映射文件中定义具体的 SQL 查询语句,可使用 WHERE 子句和条件参数进行筛选。
    • 使用 selectOne 方法执行查询,并传入查询参数。
  3. 条件查询:

    • 在映射文件中定义带有条件的 SQL 查询语句,例如 SELECT * FROM table_name WHERE column = #{value}。
    • 使用 selectList 方法执行查询,并传入查询参数。
  4. 动态条件查询:

    • 在映射文件中使用 <where> 元素和 <if> 元素实现动态条件查询。
    • <where> 元素用于包裹查询条件,可以根据条件动态拼接 WHERE 子句。
    • <if> 元素用于判断条件是否满足,如果满足则拼接对应的查询条件。
    • 可以结合使用 <choose> 元素、<when> 元素和 <otherwise> 元素实现多条件判断。

 

注意结果映射中:

resultMap 中,columnproperty 是用于指定查询结果的列名和 Java 对象的属性名之间的映射关系。

  • column:表示数据库表中的列名。它指定了查询结果集中的列,用于与 Java 对象的属性进行对应。
  • property:表示 Java 对象的属性名。它指定了将查询结果中的列值映射到 Java 对象中的哪个属性上。

通过在 resultMap 中定义多个 <result> 元素,可以实现对查询结果的不同列和 Java 对象属性之间的映射。

举例:

<resultMap id="userResultMap" type="com.example.model.User">
  <id property="id" column="user_id"/>
  <result property="name" column="user_name"/>
  <result property="age" column="user_age"/>
  <result property="email" column="user_email"/>
</resultMap>

添加操作

在 MyBatis 中进行增加操作,通常通过 SQL 映射文件(Mapper XML)和 DAO 接口的配合来实现。

举例:

SQL 映射文件(UserMapper.xml)中定义插入操作的 SQL 语句

<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
  <insert id="insertUser" parameterType="com.example.model.User">
    INSERT INTO user (name, age, email) VALUES (#{name}, #{age}, #{email})
  </insert>
</mapper>

DAO 接口(UserMapper.java)定义插入操作的方法

package com.example.mapper;

import com.example.model.User;

public interface UserMapper {
    void insertUser(User user);
}

在应用程序中调用 DAO 接口的插入方法

User user = new User();
user.setName("John");
user.setAge(25);
user.setEmail("john@example.com");

userMapper.insertUser(user);

修改操作

在 MyBatis 中进行修改操作与增加操作类似,同样需要使用 SQL 映射文件(Mapper XML)和 DAO 接口的配合来实现。

举例:

SQL 映射文件(UserMapper.xml)中定义更新操作的 SQL 语句

<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
  <update id="updateUser" parameterType="com.example.model.User">
    UPDATE user SET name = #{name}, age = #{age}, email = #{email} WHERE id = #{id}
  </update>
</mapper>

DAO 接口(UserMapper.java)定义更新操作的方法

package com.example.mapper;

import com.example.model.User;

public interface UserMapper {
    void updateUser(User user);
}

在应用程序中调用 DAO 接口的更新方法

User user = new User();
user.setId(1); // 根据需要更新的用户ID设置
user.setName("John Doe");
user.setAge(30);
user.setEmail("newemail@example.com");

userMapper.updateUser(user);

删除操作

在 MyBatis 中进行删除操作也需要使用 SQL 映射文件(Mapper XML)和 DAO 接口的配合来实现。

举例:

SQL 映射文件(UserMapper.xml)中定义删除操作的 SQL 语句

<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
  <delete id="deleteUser" parameterType="int">
    DELETE FROM user WHERE id = #{id}
  </delete>
</mapper>

DAO 接口(UserMapper.java)定义删除操作的方法

package com.example.mapper;

public interface UserMapper {
    void deleteUser(int id);
}

在应用程序中调用 DAO 接口的删除方法

int userId = 1; // 根据需要删除的用户ID设置

userMapper.deleteUser(userId);
02-02 11:37