使用MyBatis框架进行关系型数据库操作

MyBatis:简化数据库操作的持久层框架 MyBatis 是一个基于 Java 的持久层框架,起源于 Apache 的 iBatis 项目,后迁移至 Google Code 并更名为 MyBatis,最终在 2013 年迁移到 GitHub。它支持自定义 SQL、存储过程和高级映射,简化了 JDBC 操作,通过 XML 或注解配置实现 Java 对象与数据库记录的映射。MyBatis 的优点包括简化数据库操作、灵活的 SQL 控制、高度可定制化、轻量级和优秀的性能,但也存在配置繁琐、SQL 维护复杂、缺乏全面 ORM 支持等缺点。与 Hiberna 阅读详情

如果您觉得本博客的内容对您有所帮助或启发,请关注我的博客,以便第一时间获取最新技术文章和教程。同时,也欢迎您在评论区留言,分享想法和建议。谢谢支持!​

I.MyBatis 简介

MyBatis 是一款开源的 ORM(Object-Relational Mapping,对象关系映射)框架,它可以帮助 Java 开发人员快速地进行数据库操作。MyBatis 的主要特点是将 Java 对象映射到数据库表中,可以通过 XML 或者注解的方式进行 SQL 语句的编写。MyBatis 的核心思想是将 SQL 语句与 Java 代码解耦,使得开发人员可以更加专注于业务逻辑的实现。

MyBatis 的概念

  1. 映射文件(Mapper XML):MyBatis 的核心配置文件,其中包含了 SQL 语句的编写和 Java 对象的映射规则。
  2. SqlSessionFactory:MyBatis 的会话工厂,用于创建 SqlSession 对象,每个 SqlSessionFactory 对象都对应一个数据库。
  3. SqlSession:MyBatis 的会话对象,可以完成对数据库的增删改查操作。
  4. 映射接口(Mapper Interface):定义了操作数据库的方法,通常与 Mapper XML 文件中的 SQL 语句相对应。

MyBatis 的优点

  1. 灵活性:MyBatis 可以通过 XML 或者注解的方式进行 SQL 语句的编写,可以灵活地适应各种开发场景。
  2. 易于学习:MyBatis 的学习曲线较平缓,可以快速掌握基本用法。
  3. 高性能:MyBatis 采用了预编译的 SQL 语句和二级缓存机制,可以提高数据库访问的效率。
  4. 易于集成:MyBatis 可以与各种主流的 Web 框架进行集成,如 Spring、Spring Boot、Struts2 等。
  5. 易于调试:MyBatis 提供了完善的日志记录机制,可以方便地进行错误排查和性能优化。

II. MyBatis 的配置

MyBatis 的配置主要包括数据库连接配置和 MyBatis 的核心配置文件。

数据库连接配置

在 MyBatis 中,需要配置数据库连接信息,包括数据库的驱动名称、连接地址、用户名、密码等信息。可以在 MyBatis 的配置文件中通过 properties 元素来配置这些信息,例如:

<properties>
    <property name="jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
    <property name="jdbc.url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"/>
    <property name="jdbc.username" value="root"/>
    <property name="jdbc.password" value="123456"/>
</properties>

其中,name 属性表示属性名称,value 属性表示属性值。

MyBatis 的核心配置文件

MyBatis 的核心配置文件是指包含了 MyBatis 的基本配置信息和 SQL 映射文件(Mapper XML)路径的文件。MyBatis 的核心配置文件采用 XML 格式,通常命名为 mybatis-config.xml。

MyBatis 的核心配置文件中包含了以下内容:

  • properties:用于配置数据库连接信息等属性。
  • settings:用于配置 MyBatis 的全局设置,例如缓存开关、懒加载等。
  • typeAliases:用于配置 Java 对象与数据库表之间的映射关系。
  • environments:用于配置 MyBatis 的环境信息,例如数据源的配置。
  • mappers:用于配置 SQL 映射文件的路径和映射器接口。

以下是一个典型的 MyBatis 核心配置文件的示例:

<?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>
        <property name="jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="jdbc.url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"/>
        <property name="jdbc.username" value="root"/>
        <property name="jdbc.password" value="123456"/>
    </properties>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

其中,environments 元素用于配置 MyBatis 的环境信息,可以配置多个环境,每个环境都对应一个数据源。mappers 元素用于配置 SQL 映射文件的路径和映射器接口,可以通过 resource 或者 class 属性来指定映射文件的位置或者映射器接口的类路径。

III. MyBatis 的使用

MyBatis 的基本操作

MyBatis 的基本操作主要包括增删改查四种操作。可以通过 MyBatis 的 SQL 映射文件(Mapper XML)或者注解方式来实现这些操作。以下是一个 MyBatis 的基本操作示例:

// 使用 MyBatis 的 SQL 映射文件实现查询操作
public List<User> getUserList() {
    SqlSession sqlSession = MyBatisUtil.getSqlSession();
    List<User> userList = sqlSession.selectList("com.example.mapper.UserMapper.getUserList");
    sqlSession.close();
    return userList;
}

// 使用 MyBatis 的注解方式实现查询操作
@Select("SELECT * FROM user")
public List<User> getUserList();

// 使用 MyBatis 的注解方式实现插入操作
@Insert("INSERT INTO user(id, name, age) VALUES(#{id}, #{name}, #{age})")
public int addUser(User user);

// 使用 MyBatis 的注解方式实现更新操作
@Update("UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}")
public int updateUser(User user);

// 使用 MyBatis 的注解方式实现删除操作
@Delete("DELETE FROM user WHERE id=#{id}")
public int deleteUser(int id);

SQL 语句的编写

MyBatis 支持多种 SQL 语句编写方式,包括使用 MyBatis 的 SQL 映射文件、注解方式和 XML 配置方式等。SQL 语句可以使用参数占位符(#{})来表示参数,也可以使用动态 SQL 来实现复杂的 SQL 语句编写。以下是一个使用 MyBatis 的 SQL 映射文件编写 SQL 语句的示例:

<!-- 查询所有用户 -->
<select id="getUserList" resultType="com.example.model.User">
    SELECT * FROM user
</select>

<!-- 插入用户 -->
<insert id="addUser" parameterType="com.example.model.User">
    INSERT INTO user(id, name, age) VALUES(#{id}, #{name}, #{age})
</insert>

<!-- 更新用户 -->
<update id="updateUser" parameterType="com.example.model.User">
    UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}
</update>

<!-- 删除用户 -->
<delete id="deleteUser" parameterType="int">
    DELETE FROM user WHERE id=#{id}
</delete>

MyBatis 的注解方式

MyBatis 支持使用注解来实现 SQL 语句的编写和映射器接口的定义。使用注解方式可以减少编写 XML 配置文件的工作量,并且使代码更加简洁和易于维护。以下是一个使用 MyBatis 注解方式实现 SQL 语句编写的示例:

@Mapper
public interface UserMapper {

    // 查询所有用户
    @Select("SELECT * FROM user")
    List<User> getUserList();

    // 插入用户
    @Insert("INSERT INTO user(id, name, age) VALUES(#{id}, #{name}, #{age})")
    int addUser(User user);
    
    @Update("UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}")
    int updateUser(User user);

    // 删除用户
    @Delete("DELETE FROM user WHERE id=#{id}")
    int deleteUser(int id);
}

总的来说,MyBatis 的使用相对来说比较简单,可以通过 SQL 映射文件、注解方式或者 XML 配置方式来实现 SQL 语句的编写和执行。在使用 MyBatis 进行开发时,可以根据具体的业务需求来选择最适合的方式进行开发。

IV. MyBatis 的高级应用

MyBatis 的动态 SQL

动态 SQL 是指根据条件动态生成 SQL 语句的技术。MyBatis 提供了强大的动态 SQL 功能,可以通过使用 if、choose、when、otherwise、foreach 等元素来实现动态 SQL 语句的编写。

if 元素可以根据条件动态生成 SQL 片段,语法如下:

<select id="getUserList" resultType="User">
  SELECT * FROM user WHERE
  <if test="name != null">
    name = #{name}
  </if>
  <if test="age != null">
    AND age = #{age}
  </if>
</select>

在上面的示例中,如果传入的参数 name 不为空,则会生成 WHERE name = #{name} 的 SQL 片段,如果传入的参数 age 不为空,则会生成 AND age = #{age} 的 SQL 片段。

choose、when、otherwise 元素可以根据条件选择不同的 SQL 片段,语法如下:

<select id="getUserList" resultType="User">
  SELECT * FROM user
  <where>
    <choose>
      <when test="name != null">
        name = #{name}
      </when>
      <when test="age != null">
        age = #{age}
      </when>
      <otherwise>
        status = 1
      </otherwise>
    </choose>
  </where>
</select>

在上面的示例中,如果传入的参数 name 不为空,则会生成 name = #{name} 的 SQL 片段,如果传入的参数 age 不为空,则会生成 age = #{age} 的 SQL 片段,如果都为空,则会生成 status = 1 的 SQL 片段。

foreach 元素可以遍历集合、数组等类型的参数,并将每个元素作为 SQL 片段的一部分,语法如下:

<update id="updateUsers" parameterType="Map">
  update user
  <set>
    <foreach collection="users" item="user" separator=",">
      name = #{user.name}, age = #{user.age}
    </foreach>
  </set>
  where id in
  <foreach collection="ids" item="id" open="(" close=")" separator=",">
    #{id}
  </foreach>
</update>

在上面的示例中,参数 Map 中包含了 users 和 ids 两个键值对,其中 users 是一个 User 对象的集合,ids 是一个 Integer 数组。foreach 元素遍历 users 集合,将每个 User 对象的 name 和 age 属性作为 SET 子句的一部分;然后遍历 ids 数组,将每个元素作为 IN 子句的一部分。最终生成的 SQL 语句类似于:

update user set name = 'Alice', age = 20 where id in (1, 2, 3)

MyBatis 的多表关联

在实际的开发中,经常需要使用多表关联来查询数据。MyBatis 提供了多种实现多表关联的方式,包括嵌套查询、联合查询和存储过程等。以下是一个使用 MyBatis 嵌套查询的示例:

<!-- 根据用户 id 查询用户信息和订单信息 -->
<select id="getUserAndOrdersById" resultMap="userAndOrdersResultMap">
    SELECT * FROM user
    WHERE id = #{id}
</select>

<resultMap id="userAndOrdersResultMap" type="com.example.model.User">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="age" column="age"/>
    <collection property="orders" ofType="com.example.model.Order">
        <id property="id" column="order_id"/>
        <result property="name" column="order_name"/>
        <result property="price" column="order_price"/>
    </collection>
</resultMap>

MyBatis 的缓存机制

MyBatis 提供了多种缓存机制来提高查询效率,包括一级缓存和二级缓存。一级缓存是指 MyBatis 的内置缓存机制,它是基于 SqlSession 实例的缓存机制,只在同一个 SqlSession 实例中有效。二级缓存是指 MyBatis 的全局缓存机制,它是基于 Mapper 映射器的缓存机制,可在多个 SqlSession 实例之间共享。以下是一个启用 MyBatis 二级缓存的示例:

<!-- 启用 MyBatis 二级缓存 -->
<settings>
    <setting name="cacheEnabled" value="true"/>
</settings>

<!-- 在 Mapper XML 中指定缓存类型 -->
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>

MyBatis 的批处理:

MyBatis 提供了批处理功能,可以在一次数据库连接中执行多个 SQL 语句,从而提高数据库的操作效率。以下是一个使用 MyBatis 批处理的示例:

// 批量插入用户
public int insertUsers(List<User> userList) {
    try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH)) {
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        int count = 0;
        for (User user : userList) {
            userMapper.insertUser(user);
            count++;
            if (count % 1000 == 0) {
                sqlSession.flushStatements();
            }
        }
        sqlSession.flushStatements();
        return count;
    }
}

MyBatis 的插件机制

MyBatis 的插件机制可以通过自定义插件来扩展 MyBatis 的功能,比如实现 SQL 语句拦截、参数处理、结果处理等。以下是一个使用 MyBatis 插件机制的示例:

// 自定义 MyBatis 插件
@Intercepts({
        @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})
})
public class CustomPlugin implements Interceptor {
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        // 实现拦截逻辑
        return invocation.proceed();
    }
}

// 注册自定义 MyBatis 插件
@MapperScan("com.example.mapper")
@Configuration
public class MyBatisConfig {
    @Bean
    public CustomPlugin customPlugin() {
        return new CustomPlugin();
    }
}

V. MyBatis 与 SpringBoot 的整合

SpringBoot 整合 MyBatis 的基本配置

在 Spring Boot 中使用 MyBatis,需要添加以下依赖:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>${mybatis.version}</version>
</dependency>

其中 ${mybatis.version} 是 MyBatis 的版本号。

在 application.properties 文件中配置 MyBatis 的基本信息:

# 数据库驱动类
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai
# 数据库用户名
spring.datasource.username=root
# 数据库密码
spring.datasource.password=123456

# MyBatis 的配置文件路径
mybatis.config-location=classpath:mybatis-config.xml
# MyBatis 的 Mapper 文件路径
mybatis.mapper-locations=classpath:mapper/*.xml

上述配置文件中,配置了数据库的连接信息,以及 MyBatis 的配置文件和 Mapper 文件的路径。

SpringBoot 整合 MyBatis 的高级配置

在 SpringBoot 中,可以通过配置文件对 MyBatis 进行更高级的配置。

首先,在 application.properties 文件中添加 MyBatis 相关配置:

# 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root

# MyBatis 配置
mybatis.config-location=classpath:mybatis-config.xml
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.demo.entity

其中,mybatis.config-location 指定了 MyBatis 的核心配置文件,mybatis.mapper-locations 指定了 Mapper 文件所在的目录,mybatis.type-aliases-package 指定了实体类所在的包。

然后,创建 mybatis-config.xml 配置文件,可以在其中配置插件、拦截器、类型别名等:

<configuration>
    <!-- 类型别名配置 -->
    <typeAliases>
        <package name="com.example.demo.entity"/>
    </typeAliases>
    
    <!-- 插件配置 -->
    <plugins>
        <plugin interceptor="com.example.demo.interceptor.MyInterceptor">
            <property name="property1" value="value1"/>
            <property name="property2" value="value2"/>
        </plugin>
    </plugins>
    
    <!-- 拦截器配置 -->
    <objectFactory type="org.mybatis.spring.factory.SpringObjectFactory"/>
    
    <!-- 等等 -->
</configuration>

在上面的例子中,配置了一个自定义的插件 MyInterceptor,并设置了两个属性。

最后,可以在 MyInterceptor 中实现自定义的拦截逻辑:

public class MyInterceptor implements Interceptor {
    private String property1;
    private String property2;

    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        // 拦截逻辑
    }

    @Override
    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {
        // 属性设置
    }
}

以上就是 SpringBoot 整合 MyBatis 的高级配置的示例。

VI. MyBatis 的错误排查

常见错误排查方法

  1. 查看错误信息:MyBatis 会将异常信息输出到控制台,可以查看异常信息中的提示信息。
  2. 检查 SQL 语句:如果 SQL 语句有语法错误或逻辑错误,会导致 SQL 执行异常,可以检查 SQL 语句是否正确。
  3. 检查 Mapper 文件:如果 Mapper 文件找不到或配置错误,会导致 MyBatis 执行异常,可以检查 Mapper 文件是否存在,以及是否配置正确。
  4. 检查配置文件:如果配置文件有误,也会导致 MyBatis 执行异常,可以检查配置文件是否存在,以及是否配置正确。

MyBatis 的日志记录

为了更好地排查 MyBatis 的错误,可以开启 MyBatis 的日志记录功能。MyBatis 提供了四种日志记录的实现:

  1. SLF4J:可以使用 SLF4J 日志记录框架来记录 MyBatis 的日志。
  2. Log4j:可以使用 Log4j 日志记录框架来记录 MyBatis 的日志。
  3. Log4j2:可以使用 Log4j2 日志记录框架来记录 MyBatis 的日志。
  4. JDK Logging:可以使用 JDK Logging 日志记录框架来记录 MyBatis 的日志。
SLF4J

最常用的是 SLF4J 日志记录框架。可以在 pom.xml 文件中添加如下依赖:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>2.0.0-alpha1</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>2.0.0-alpha1</version>
    <scope>test</scope>
</dependency>

然后,在 application.properties 文件中添加日志记录相关的配置:

# 日志记录配置
logging.level.org.apache.ibatis=debug
logging.level.java.sql.Connection=debug

其中,logging.level.org.apache.ibatis=debug 表示将 MyBatis 的日志记录级别设置为 debug,logging.level.java.sql.Connection=debug 表示将 JDBC 连接的日志记录级别设置为 debug。

开启日志记录后,可以更清晰地查看 MyBatis 的执行过程和 SQL 语句的执行情况,更方便排查错误。

Log4j

除了 SLF4J 日志记录框架之外,还可以使用 Log4j 和 Log4j2 日志记录框架来记录 MyBatis 的日志。在使用 Log4j 或 Log4j2 时,需要在 pom.xml 文件中添加相应的依赖:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.14.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.14.1</version>
</dependency>

Log4j2:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j18-impl</artifactId>
    <version>2.14.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.14.1</version>
</dependency>

然后,在 application.properties 文件中添加日志记录相关的配置:

Log4j:

# 日志记录配置
log4j.rootLogger=debug,stdout
log4j.logger.org.apache.ibatis=debug
log4j.logger.java.sql.Connection=debug

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

Log4j2:

# 日志记录配置
logger.MyBatis.name=org.apache.ibatis
logger.MyBatis.level=debug
logger.jdbc.name=java.sql.Connection
logger.jdbc.level=debug

appender.stdout.type=Console
appender.stdout.name=STDOUT
appender.stdout.layout.type=PatternLayout
appender.stdout.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

rootLogger.level=info
rootLogger.appenderRef.stdout.ref=STDOUT
rootLogger.loggerRef.MyBatis.ref=MyBatis
rootLogger.loggerRef.jdbc.ref=jdbc

在这些配置中,都配置了日志记录的级别以及输出格式等相关信息。配置完成后,就可以使用 Log4j 或 Log4j2 来记录 MyBatis 的日志信息。

VII. 实例演示

通过 MyBatis 操作关系型数据库

1、创建一个 Java 项目并添加 MyBatis 依赖。

在 ​​pom.xml​​ 文件中添加 MyBatis 的依赖:

<dependencies>
    <!-- MyBatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.7</version>
    </dependency>
    
    <!-- 数据库连接池 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.6</version>
    </dependency>

    <!-- MySQL 驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.27</version>
    </dependency>
</dependencies>

其中,​​mybatis​​​ 是 MyBatis 的核心依赖,​​druid​​​ 是数据库连接池,​​mysql-connector-java​​ 是 MySQL 驱动。

2、配置数据库连接,配置 MyBatis 的核心配置文件。

首先是数据库连接的配置,在 ​​application.properties​​​ 或 ​​application.yml​​ 文件中添加以下配置:

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root

其中,​​driverClassName​​​ 是数据库驱动类名,​​url​​​ 是数据库连接地址,​​username​​​ 是数据库用户名,​​password​​​ 是数据库密码。这里的示例是连接本地的 MySQL 数据库,端口号是 3306,数据库名是 ​​mydatabase​​。

接下来是 MyBatis 的核心配置文件,在 ​​resources​​​ 目录下创建一个 ​​mybatis-config.xml​​ 文件,并添加以下内容:

<?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>
    <!-- 配置数据源 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${spring.datasource.driverClassName}" />
                <property name="url" value="${spring.datasource.url}" />
                <property name="username" value="${spring.datasource.username}" />
                <property name="password" value="${spring.datasource.password}" />
            </dataSource>
        </environment>
    </environments>
    
    <!-- 配置 MyBatis 插件 -->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <property name="helperDialect" value="mysql"/>
            <property name="reasonable" value="true"/>
            <property name="supportMethodsArguments" value="true"/>
            <property name="params" value="count=countSql"/>
        </plugin>
    </plugins>
</configuration>

其中,​​environments​​​ 标签用来配置数据源,这里使用了 Spring Boot 的自带数据源,同时也配置了 MyBatis 插件 ​​pagehelper​​,用于实现分页查询。此外,还可以配置多个数据源,用于不同环境的切换。

3、创建实体类,对应数据库中的表结构。

创建一个实体类,例如命名为 ​​User​​,该类中的字段应该和数据库表中的字段一一对应,示例如下:

public class User {
    private int id;
    private String name;
    private int age;
    private String email;
    private String phone;

    // getter 和 setter 方法
}

其中,​​id​​​ 字段对应表中的主键,需要有对应的 ​​getter​​​ 和 ​​setter​​​ 方法。​​name​​​ 和 ​​age​​​ 分别对应表中的 ​​name​​​ 和 ​​age​​ 字段。需要注意的是,这里的字段命名需要和数据库表中的字段命名保持一致。

4、创建 Mapper 接口,定义对应的增删改查方法。

创建一个 Mapper 接口,例如命名为 ​​UserMapper​​,该接口中定义了对应的增删改查方法,示例如下:

public interface UserMapper {
    User getUserById(int id);

    List<User> getAllUsers();

    int addUser(User user);

    int updateUser(User user);

    int deleteUser(int id);
}

其中,​​getUserById​​​ 方法根据传入的 ​​id​​​ 参数获取一条用户记录,返回一个 ​​User​​​ 对象。​​getAllUsers​​​ 方法返回所有用户记录的列表,返回值类型为 ​​List<User>​​​。​​addUser​​​ 方法向表中插入一条用户记录,传入一个 ​​User​​​ 对象作为参数,返回插入记录的数量。​​updateUser​​​ 方法更新一条用户记录,传入一个 ​​User​​​ 对象作为参数,返回更新记录的数量。​​deleteUser​​​ 方法删除一条用户记录,传入 ​​id​​ 参数作为删除条件,返回删除记录的数量。

需要注意的是,这里的方法命名和参数命名需要和 Mapper 文件中的 SQL 语句保持一致,便于后续的映射关系配置。

5、编写 Mapper 对应的映射文件,对应 SQL 语句的编写。

下面是一个 ​​UserMapper​​ 接口对应的映射文件示例:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">

    <resultMap id="userResultMap" type="com.example.entity.User">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="age" property="age"/>
        <result column="email" property="email"/>
        <result column="phone" property="phone"/>
    </resultMap>

    <select id="getUserById" resultMap="userResultMap">
        SELECT * FROM users WHERE id = #{id}
    </select>

    <select id="getAllUsers" resultMap="userResultMap">
        SELECT * FROM users
    </select>

    <insert id="addUser" parameterType="com.example.entity.User">
        INSERT INTO users (name, age, email, phone)
        VALUES (#{name}, #{age}, #{email}, #{phone})
    </insert>

    <update id="updateUser" parameterType="com.example.entity.User">
        UPDATE users
        SET name = #{name}, age = #{age}, email = #{email}, phone = #{phone}
        WHERE id = #{id}
    </update>

    <delete id="deleteUser">
        DELETE FROM users WHERE id = #{id}
    </delete>

</mapper>

在映射文件中,首先指定了命名空间 ​​namespace​​​,这里需要和 ​​UserMapper​​ 接口的全名保持一致。

接着定义了一个 ​​resultMap​​​ 元素,用来将查询结果映射成 ​​User​​​ 对象。​​resultMap​​​ 的 ​​id​​​ 属性为 ​​userResultMap​​​,​​type​​​ 属性指定映射的目标类型为 ​​com.example.entity.User​​​。在 ​​resultMap​​​ 中,通过 ​​id​​​ 元素将表中的 ​​id​​​ 字段映射到 ​​User​​​ 对象的 ​​id​​​ 属性,通过 ​​result​​ 元素将其他字段映射到对应的属性上。

随后,分别定义了 ​​select​​​、​​insert​​​、​​update​​​ 和 ​​delete​​​ 元素,分别对应 ​​UserMapper​​​ 接口中的对应方法。这里通过 SQL 语句实现了增删改查的功能。其中 ​​parameterType​​​ 属性指定了方法参数的类型,​​resultMap​​ 属性指定了查询结果的映射关系。

6、在代码中调用 Mapper 接口中的方法,实现对数据库的操作。

下面是一个示例代码,用于演示如何在代码中调用 Mapper 接口中的方法,实现对数据库的操作:

public class MyBatisDemo {
    public static void main(String[] args) {
        // 创建 MyBatis 的 SqlSessionFactory 对象
        SqlSessionFactory sqlSessionFactory = null;
        try {
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 创建 MyBatis 的 SqlSession 对象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        try {
            // 获取 Mapper 接口的代理对象
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

            // 插入用户
            User user = new User();
            user.setId(1L);
            user.setName("张三");
            userMapper.insertUser(user);

            // 查询用户
            User queryUser = userMapper.getUserById(1L);
            System.out.println("查询用户结果:" + queryUser);

            // 更新用户
            queryUser.setName("李四");
            userMapper.updateUser(queryUser);

            // 删除用户
            userMapper.deleteUser(1L);

            // 提交事务
            sqlSession.commit();
        } catch (Exception e) {
            // 出现异常时回滚事务
            sqlSession.rollback();
            e.printStackTrace();
        } finally {
            // 关闭 SqlSession 对象
            sqlSession.close();
        }
    }
}

在上述代码中,首先创建了 MyBatis 的 SqlSessionFactory 对象,然后通过 SqlSessionFactory 对象创建了 SqlSession 对象。接着获取了 Mapper 接口的代理对象,并通过代理对象调用了增删改查等方法。最后提交事务并关闭 SqlSession 对象。

通过 MyBatis 进行事务操作

1、配置数据源和事务管理器

在 MyBatis 中,需要配置一个事务管理器来进行事务控制。通常情况下,我们可以使用 Spring 框架提供的事务管理器来进行配置。在 SpringBoot 中,可以直接使用 ​​spring-boot-starter-jdbc​​​ 或 ​​spring-boot-starter-data-jpa​​ 等 starter 来快速集成数据库和事务管理器。

2、配置事务代理

在 MyBatis 中,事务代理是用于拦截 Mapper 接口方法并开启事务的类。可以通过在 ​​SqlSession​​​ 中设置 ​​ExecutorType​​ 来指定事务代理的类型。例如:

SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
3、配置事务注解

可以使用 MyBatis 提供的 ​​@Transactional​​​ 注解来实现事务控制。在 Mapper 接口方法上加上 ​​@Transactional​​ 注解,即可将该方法划分为一个事务单元。在事务单元中,如果发生了异常,则整个事务将会被回滚。

@Transactional
int updatePerson(Person person);
4、编写事务处理代码

编写事务处理代码,例如:

@Transactional
public void updatePerson(Person person) {
    try {
        // 更新操作1
        personMapper.updatePerson1(person);
        // 更新操作2
        personMapper.updatePerson2(person);
        // 更新操作3
        personMapper.updatePerson3(person);
        // 手动抛出异常,模拟事务回滚
        throw new RuntimeException("模拟事务回滚");
    } catch (Exception e) {
        log.error("updatePerson error", e);
        throw new RuntimeException("updatePerson error", e);
    }
}

在上述代码中,通过 ​​@Transactional​​​ 注解将 ​​updatePerson​​ 方法划分为一个事务单元。在事务单元中,执行了三个更新操作,同时手动抛出了一个异常。如果执行过程中发生了异常,整个事务将被回滚,即三个更新操作都会被撤销。

以上是使用 MyBatis 进行事务操作的基本步骤,需要注意的是,在进行事务操作时,一定要遵循 ACID 原则,保证事务的正确性和完整性。


MyBatis 是一个强大的 ORM 框架,可以帮助开发者快速地进行数据库操作。通过本文的介绍,读者可以掌握 MyBatis 的基本原理、使用方法以及高级应用技巧,同时还能了解到 MyBatis 与 SpringBoot 的整合以及常见错误排查方法。通过实例演示,读者还可以深入了解 MyBatis 的实际应用。​

如果您觉得本博客的内容对您有所帮助或启发,请关注我的博客,以便第一时间获取最新技术文章和教程。同时,也欢迎您在评论区留言,分享想法和建议。谢谢支持!

基于Mybatis框架的数据库操作实战指南 MyBatis 是一款优秀的 Java 持久层框架,它支持自定义 SQL、存储过程以及高级映射,摒弃了传统 ORM 全自动化封装的模式,转而提供灵活的 SQL 控制能力。相比 JDBC,MyBatis 简化了数据库操作代码,消除了大量冗余的资源管理和结果集处理逻辑;相较于 Hibernate 等全自动 ORM 框架,MyBatis 在 SQL 优化、复杂查询和性能调优方面更具优势,尤其适用于对 SQL 精细化控制要求较高的企业级应用。 阅读详情

相关推荐

Java数据库操作实战教程:CRUD及MyBatis框架集成

Java数据库连接(JDBC)是一个Java API,它允许Java程序执行SQL语句。JDBC接口为数据库编程提供了一种标准的方法,使得开发者可以以一致的方式连接多种数据库。JDBC API主要负责SQL语句的发送和结果集的处理。// 一个简单的JDBC连接示例代码try {// 加载数据库驱动// 建立数据库连接// 创建执行SQL语句的Statement对象// 执行SQL查询并获取结果集// 处理结果集// 更多字段...// 关闭资源,释放连接。

weixin_35972981的博客 817

【MyBatis-1】MyBatis框架:简化数据库操作的持久层利器

MyBatis 是Apache软件基金会下的一个开源持久层框架,最初名为 iBATIS,后来在2010年更名为 MyBatis。它主要用于简化数据库操作,允许开发者通过简单的 XML 配置或注解来映射 SQL 语句,从而实现对象与数据库记录之间的映射。相比于其他 ORM 框架(如 Hibernate),MyBatis 更加注重 SQL 的灵活性,开发者可以直接编写和优化 SQL 语句,同时享受对象映射的便利。这使得 MyBatis 在需要精细控制 SQL 的场景中表现尤为出色。

weixin_39033358的博客 946

从零开始解析N-CMAPSS数据集:航空发动机健康管理的入门指南

本文详细解析了N-CMAPSS数据集在航空发动机健康管理中的应用,从数据集的构成、关键变量到实际数据分析方法,为初学者提供了全面的入门指南。通过Python代码示例,展示了如何加载、探索和建模这一复杂数据集,帮助读者掌握航空发动机性能预测的核心技术。

weixin_29063979的博客 323

MyBatis框架和数据库操作

通过学习XML映射文件和Java接口的编写方式,我能够使用MyBatis框架进行简单的数据库操作。我将继续深入学习和实践,以提升自己在数据库操作方面的能力和技术水平。通过调用Java接口中的方法,可以执行对应的数据库操作,如根据ID查询用户信息、插入新的用户记录等。MyBatis是一个开源的持久层框架,通过提供简单且强大的持久化功能,使得数据库操作更加方便和高效。Java接口中的方法声明与XML映射文件中定义的SQL语句相对应,通过注解(如。学习了XML映射文件的结构和使用方式。

qq_53641185的博客 156

halcon与c#联合编程实现相机控制+图像平移缩放+日志记录+缺陷检测+路径规划

halcon与c#联合编程实现相机控制+图像平移缩放+日志记录+缺陷检测+路径规划 前言 本人近期在工作中遇到需要对某场景下利用海康相机进行图像缺陷检测与对应路径规划。通过对海康相机示例代码进行吸收与借鉴,最终实现了对海康相机的控制,并增加HSmartWindowControl控件,实现图像的实时显示与平移缩放功能;通过listview+toolstrip实现日志显示与类型(提示、警告、错误)分类;同时自行编制算法实现对缺陷的识别以及缺陷外扩矩形范围内的路径规划。 1.日志记录 代码如下(示例):

weixin_37864926的博客 2717

基于SOCKET的***网络软件的设计与实现

二、基于SOCKET的网络软件的需求。2、概要设计:画出软件系统结构图。3、详细设计:软件的详细设计,如类图、序列图、重要的算法流程图或伪代码,等等。4、实现:软件基本功能相关的截图和关键代码。

Recursions的博客 1371

数据库操作与 ORM 框架:JDBC、Hibernate、MyBatis 比较

JDBC 是 Java 提供的数据库访问 API,允许 Java 应用程序与多种数据库进行交互。它提供了一套标准的接口和类,以执行 SQL 语句、获取结果集并处理数据库连接。Hibernate 是一个开源的 ORM 框架,它通过将数据库表映射为 Java 对象,简化了数据库操作。开发者可以通过对象操作而不是直接执行 SQL 来访问数据库。MyBatis 是一个半自动的 ORM 框架,它提供了 SQL 映射的能力,允许开发者编写原生 SQL,并通过 XML 或注解的方式进行映射。

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 955

开源滑翔伞升降速度表:基于STM32与传感器融合的DIY飞行仪表

传感器融合是现代嵌入式系统与物联网设备中的核心技术,它通过整合多个传感器的数据,利用滤波与估计算法,获得比单一传感器更精确、更可靠的环境感知能力。其技术价值在于提升系统的鲁棒性、精度和上下文理解能力,广泛应用于无人机导航、可穿戴设备、工业监测及智能驾驶等领域。本文聚焦于一个具体的工程实践案例——开源多功能滑翔伞升降速度表(Open-Vario),该项目巧妙地运用了**卡尔曼滤波器**进行气压与GNSS数据的融合,以精确计算升降率,并基于**FreeRTOS**实时操作系统构建了一个稳定、可扩展的嵌入式平台,

weixin_33657398的博客 177

基于 MyBatis 框架的数据库操作与映射实现【搭建Mybatis程序】

MyBatis 是一款优秀的持久层框架。它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。最新版本是MyBatis 3.5.11,其发布时间是2022年09月18日。meaven 官方仓库:</</</</

一键难忘的博客 3244

kbjdbc: autodetected server-encoding to be ISO-8859-1, if the message is not readable, please check

这条信息是来自 KingbaseES 数据库的一个 JDBC 客户端连接提示。KingbaseES 是一个企业级的关系型数据库管理系统,它兼容 PostgreSQL 的许多特性。如果上述步骤仍然无法解决问题,建议详细查看数据库和客户端的日志文件,以获取更具体的错误信息。此外,也可以考虑联系 KingbaseES 的技术支持获取帮助。项目融合kingbase数据库,输出日志乱码。结果:网上各种调整各种试。

zjy660358的专栏 4846

基于 FPGA 的 CNN 卷积神经网络之池化层 Verilog 实现

池化层是卷积神经网络(CNN)中的关键组件,用于降低特征图的维度,减少计算量和防止过拟合。常见的池化操作包括最大池化和平均池化。FPGA 提供了高效的并行处理能力,可以加速这些操作。池化层在 CNN 中扮演重要角色,通过降低数据维度提升计算效率。在 FPGA 上实现池化层,可以充分利用硬件资源实现高效的并行计算,有助于提高实时应用中的推理速度。

走向CTO的路上... 1256

MyBatis 入门:简化数据库操作的持久化框架

MyBatis 入门指南:从零搭建数据库操作框架 本文介绍了轻量级Java持久化框架MyBatis的基本使用方法。主要内容包括: 环境准备:JDK8+、Maven、MySQL和IDE配置 项目结构:创建标准Maven项目,配置核心目录 依赖管理:通过pom.xml引入MyBatis核心库和MySQL驱动 配置文件:详细讲解mybatis-config.xml的数据库连接配置 数据库设计:创建测试数据库和用户表 模型定义:展示User模型类的编写方法 MyBatis通过XML配置简化了JDBC操作,保留了SQ

2302_80853925的博客 987

【SI案例分享】1000 BASE-T1共模终端的分析与评估

以太网的MDI接口应用中,共模端接网络的应用广泛,并且,其电路参数从100 BASE-T1到1000 BASE-T1保持了相同的参数定义,这就不得不引起使用者的怀疑,毕竟百兆和千兆以太网的工作频段差异巨大,这样的设计真的可以做到上下兼容吗?本文针对此问题,进行了深入的探讨。

一只豌豆象的博客 1367

MyBatis:让数据库操作更优雅的持久层框架

MyBatis 是一款优秀的持久层框架,它通过 XML 或注解的方式将 Java 对象映射到数据库表,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects, 普通的 Java 对象)映射成数据库中的记录。这时,MyBatis 就成为了一个优雅的选择。MyBatis 是一款优秀的持久层框架,它既提供了 SQL 的灵活性,又简化了数据库操作。

q68686的博客 477

STM32Cube高效开发教程<高级篇><FreeRTOS>(一)-----FreeRTOS基础

一、 FreeRTOS概述声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(高级篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。写在前面:今天就算正式开始高级篇的博客编写了,我本人也是第一次学习FreeRTOS,所以整体的进度会比较慢,博客更新可能不太会及时,希望大家原谅。一、 FreeRTOS概述。

我的博客 1848

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

MyBatis 框架优化局域网监控电脑屏幕软件 Java 数据库操作

无论是数据的插入、查询还是更新,MyBatis 都能提供简洁而强大的解决方案,为整个监控软件的稳定运行奠定坚实的基础,提升软件在局域网环境下的整体性能与可靠性,让开发者能够更专注于业务逻辑的实现,减少在数据库操作层面的繁琐工作与潜在错误。在这个数据映射文件中,我们定义了插入屏幕数据的 SQL 语句,并且在 DTD 声明处引入了特定网址,这有助于 MyBatis 正确解析映射文件的结构与语法。首先,在数据库连接配置方面,我们需要在 MyBatis 的配置文件中进行相关设置。

Yao_0211的博客 90

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

MyBatis 是一个基于 Java 的持久层框架,它封装了 JDBC 的底层操作,使开发者能够更方便地处理数据库操作

MyBatis 的核心思想是 SQL 映射。它允许开发者直接编写 SQL 语句,然后通过 MyBatis 提供的映射机制,将 SQL 语句与 Java 对象进行映射。这样,开发者就可以通过调用 Java 方法来执行 SQL 语句,而无需关心 JDBC 的底层细节。MyBatis 是一个基于 Java 的持久层框架,它封装了 JDBC 的底层操作,使开发者能够更方便地处理数据库操作。

[Blog][Domain] programb.blog.youkuaiyun.com 1172

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java应用:在 Java 中使用MyBatis框架进行关系型数据库操作

MyBatis 是一款开源的 ORM(Object-Relational Mapping,对象关系映射)框架,它可以帮助 Java 开发人员快速地进行数据库操作。MyBatis 的主要特点是将 Java 对象映射到数据库表中,可以通过 XML 或者注解的方式进行 SQL 语句的编写。MyBatis 的核心思想是将 SQL 语句与 Java 代码解耦,使得开发人员可以更加专注于业务逻辑的实现。MyBatis 的配置主要包括数据库连接配置和 MyBatis 的核心配置文件。在 MyBatis 中,需要配置数据库

2301_76607156的博客 1714

【Mybatis教程】持久层框架,史上最全的Mybatis教程,一篇教会你在项目开发中使用Mybatis进行数据库操作

-MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github - iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)

Coastlise的博客 1567

基于自定义Mybatis框架实现数据库操作

一、场景模拟 基于自定义Mybatis框架和已有的Mysql数据库Mybatis,查询所有用户信息。 二、创建工程并引入自定义Mybatis框架的坐标 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http...

L-李俊漩的博客 673

0基础学习Mybatis系列数据库操作框架——最小Demo

在学习Java的过程中,一般都会学习到使用JDBC连接和操作数据库的知识。Mybatis则是JDBC的一个上层封装,它简化了驱动加载、创建连接等操作。我们只要按照规范配置几个文件、写几个Java类和按一定规则将这些配置文件通过代码的形式加以利用,即可完成数据库的相关操作。这个系列我们将学习Mybatis以及基于它开发出的工具MybatisPlus。在这个探索的过程中,我们将依赖包的管理交给Maven去做,注意力主要集中在Mybatis相关技术的应用上。

方亮的专栏 1458

MyBatis:简化数据库操作的半自动持久层框架

MyBatis以其灵活性、强大功能和易于集成的特点,在Java开发社区中广受欢迎。本文将探讨MyBatis的核心概念、优势、实际应用以及个人对其在现代软件开发中的角色的理解。

qq_62889502的博客 488

MyBatis 框架学习研究笔记(一) 简化数据库操作:MyBatis-Plus 的魔法世界

MyBatis-Plus(简称 MP)是一个在 MyBatis 基础上增强的工具,它保留了 MyBatis 的所有特性,同时加入了更多便捷功能,旨在简化开发和提高效率。MyBatis-Plus 的强大之处远不止这些,它还有更多高级功能等待你去探索,比如逻辑删除、乐观锁、性能分析等。在下一篇文章中,我们将深入探讨这些高级特性,敬请期待!如果你对 MyBatis-Plus 有任何疑问或想法,欢迎在评论区留言,我们一起讨论。记住,编程不只是技术,更是一种艺术!

w风雨无阻w的专栏 1692

使用MyBatis框架对数据库进行操作

MyBatis是一款轻量级持久层框架,通过XML/注解配置实现SQL与代码分离。它简化JDBC操作,支持动态SQL和对象关系映射。示例展示了SpringBoot集成MyBatis操作MySQL的完整流程:1)创建实体类与数据库表对应;2)定义Mapper接口及XML映射文件;3)实现Service和Controller层。关键特性包括:简单易学、灵活性强、自动映射、动态SQL支持。通过配置yml文件和引入相关依赖即可快速搭建项目,最终通过REST API实现对用户表的CRUD操作。

m0_66119504的博客 585

MyBatis一 Mybatis的介绍、基本使用、高级使用

MyBatis全局配置文件详解 Mybatis的SQL映射文件详解 MyBatis基于XML的高级结果映射 MyBatis动态sql MyBatis缓存 MyBatis整合第三方缓存redis/ehcache MyBatis逆向工程&分页插件

东风麦芽糖 1695

Docker Compose:搭建本地多服务开发环境

从一个 Java API、PostgreSQL 和 Redis 开始,配置服务名、端口、环境变量、健康检查、数据卷和依赖关系。理解 Compose 文件如何被解析、项目如何隔离,以及哪些数据不能依赖“重建容器”保留,能够把个人开发环境整理成团队可复用的启动入口。

m0_62221377的博客 463
上一篇: 常用脚本记录
下一篇: spring的面向切面编程
青年老年程序员
博客等级 码龄18年 7013粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值