MyBatis实现注册及获取Mapper

Sure,下面是MyBatis实现注册及获取Mapper的完整攻略:

REGISTRATION

Resources Configuration

在MyBatis中注册Mapper的第一步是添加资源配置,也就是MyBatis的XML配置文件。MyBatis通过解析这些配置文件来构建SqlSession工厂,进而创建SqlSession实例。我们需要创建以下两个配置文件。

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="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" />
        <property name="username" value="id" />
        <property name="password" value="password" />
      </dataSource>
    </environment>
  </environments>
  <!-- 注册mapper -->
  <mappers>
    <mapper resource="com/example/UserMapper.xml" />
    <mapper class="com.example.UserMapper" />
  </mappers>
</configuration>

在这个XML配置文件中,我们指定了:

  • 数据库连接信息(driver, url, username, password)。
  • 一个名为“development”的环境。(每个环境都拥有自己的事务管理器和数据源。)
  • 我们要注册的mappers(可以通过文件或类两种方式进行注册)。

Mapper interface

创建一个Java Mapper接口,用于定义需要执行的SQL语句:

package com.example;

import java.util.List;

public interface UserMapper {
    User getUserById(int id);
    List<User> getAllUsers();
    void insertUser(User user);
    void deleteUser(int id);
}

Implementing Mapper

创建基于XML或注解的Mapper实现,以便让MyBatis知道我们如何实现Java Mapper接口中定义的SQL操作。

XML Based Implementations

为了实现基于XML的mappers,我们需要创建一个XML文件来定义mapper的SQL语句。XML文件的名字必须与Java Mapper接口相同,并放在同一目录下。

比如,对于上面创建的UserMapper接口,我们应该创建一个名为UserMapper.xml的XML文件。

<?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.UserMapper">

  <resultMap id="userMap" type="User">
      <id column="id" property="id"/>
      <result column="username" property="username"/>
      <result column="password" property="password"/>
  </resultMap>

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

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

  <insert id="insertUser" parameterType="User">
    INSERT INTO users(username, password) VALUES(#{username}, #{password})
  </insert>

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

</mapper>

在这个XML文件中,我们定义了ResultMaps,我们的Java Mapper接口中方法对应的SQL语句和参数类型。

Annotation Based Implementations

基于注解的mappers需要在Java Mapper接口中添加@Mapper注解,并在实现类中添加@Select,@Insert,@Update和@Delete等具有相应注解的SQL语句。

比如,我们的Java Mapper接口和实现类可以这样:

package com.example;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface UserMapper {

    @Select("SELECT * FROM users WHERE id=#{id}")
    User getUserById(int id);

    @Select("SELECT * FROM users")
    List<User> getAllUsers();

    @Insert("INSERT INTO users(username, password) VALUES(#{username}, #{password})")
    void insertUser(User user);

    @Delete("DELETE FROM users WHERE id=#{id}")
    void deleteUser(int id);
}

Building SqlSessionFactory

使用以上实现后,我们需要创建SqlSessionFactory实例:

package com.example;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

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

public class MyBatisUtil {
    private static SqlSessionFactory sqlSessionFactory;
    private static final String RESOURCE_NAME = "mybatis-config.xml";
    static {
        try {
            InputStream inputStream = Resources.getResourceAsStream(RESOURCE_NAME);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            System.err.println("Failed to read resource file '" + RESOURCE_NAME + "'.");
            e.printStackTrace();
        }
    }

    public SqlSession getSqlSession() {
        return sqlSessionFactory.openSession(true);
    }
}

这样就可以创建SqlSessionFactory并调用它的openSession()方法来获取SqlSession了。

GETTING MAPPERS

有了SqlSession和Java Mapper接口,我们可以使用以下方法获取Mapper:

From SqlSession

// 获取SqlSession
SqlSession sqlSession = new MyBatisUtil().getSqlSession();
// 获取Mapper
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

Automatically from Spring

对于使用Spring框架的应用程序,可以轻松自动创建Mapper Bean:

<!-- 在.springBootConfiguration类中增加@MapperScan注解-->
@MapperScan("com.example")
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

// 或

@Configuration
public class MyBatisConfig {

    @Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mapper/*.xml"));
        return sessionFactory.getObject();
    }

    @Bean
    public PlatformTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }

    @Bean
    public DataSource dataSource() {
        return new DriverManagerDataSource("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull",
                "username", "password");
    }
}

使用过程中必须将MyBatis Maven依赖项加入到您的项目中,并使用在您的项目中调用上述方法的代码块,以使SQL语句与数据库进行沟通。

示例1将说明如何使用MyBatis建立并访问一个简单的数据库:

示例1:

public class Example1 {
  public static void main(String[] args) {
    SqlSession session = new MyBatisUtil().getSqlSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    User user = new User(1, "bob");
    mapper.insertUser(user);
    List<User> users = mapper.getAllUsers();
    users.forEach(System.out::println);
  }
}

示例2将说明如何使用MyBatis配置插件(如分页插件):

示例2:

public class Example2 {
  public static void main(String[] args) {
    SqlSession session = new MyBatisUtil().getSqlSession();
    com.github.pagehelper.PageHelper.startPage(1, 3);
    UserMapper mapper = session.getMapper(UserMapper.class);
    List<User> users = mapper.getAllUsers();
    PageInfo<User> pageInfo = new PageInfo<>(users);
    System.out.println(pageInfo);
  }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis实现注册及获取Mapper - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 详解SpringBoot中的统一功能处理的实现

    我会从以下几个方面讲解“详解SpringBoot中的统一功能处理的实现”: 1.什么是SpringBoot中的统一功能处理2.实现统一功能处理的方式3.示例1:统一异常处理4.示例2:统一日志处理 1.什么是SpringBoot中的统一功能处理 在SpringBoot应用中,我们常常需要实现一些特定的功能,如统一异常处理、统一日志处理等。为了避免在每个Con…

    Java 2023年5月15日
    00
  • 使用jpa的时候set实体类属性自动持久化的解决方案

    当我们使用JPA时,为了方便,我们可能希望在对实体类属性进行赋值后,自动进行数据库的持久化。但是在一些情况下,这个自动持久化的特性可能会让我们犯下一些错误或者遇到一些麻烦。在这种情况下,我们可以通过以下两种方式来解决这个问题。 方案一:使用@EntityListeners来监听实体类变化进行持久化 在JPA中,我们可以使用EntityListener来监听实…

    Java 2023年5月20日
    00
  • Maven的聚合(多模块)和Parent继承

    Maven作为一个管理Java工程的强大工具,支持多模块(聚合)的构建和Parent继承机制。下面我们将详细讲解这两个功能的使用方法。 什么是Maven的聚合(多模块)? 在Maven中,聚合是指将多个子模块(即多个Maven项目)组合起来进行维护和构建,这种方式称为多模块构建。多模块构建可以将不同的依赖和资源管理在不同的模块中,实现更好的分离和管理。 创建…

    Java 2023年5月19日
    00
  • spring boot打包成war包的页面如何存放

    将Spring Boot应用程序打包成WAR包可以让我们将应用程序部署到支持WAR包的应用服务器中。在打包成WAR包时,需要注意如何存放静态页面资源。下面是一个完整的攻略: 1. 修改pom.xml文件 首先需要将pom.xml文件中的打包方式由jar改为war。在pom.xml文件中添加以下代码: <packaging>war</pack…

    Java 2023年6月16日
    00
  • 使用Java打印数字组成的魔方阵及字符组成的钻石图形

    下面我详细讲解一下“使用Java打印数字组成的魔方阵及字符组成的钻石图形”的完整攻略。 打印数字组成的魔方阵 思路 魔方阵是由 $n^2$ 个数字组成的方阵,其中每一行、每一列、每一条对角线上的数字之和都相等。我们可以使用以下的算法来生成 $n \times n$ 的魔方阵: 将数字 1 放在第一行的中间列。 依次将后续的数字放入前一个数字的右上角(如果已经…

    Java 2023年5月26日
    00
  • Spring Boot如何使用JDBC获取相关的数据详解

    下面是关于“Spring Boot如何使用JDBC获取相关的数据详解”的完整攻略。 1. 添加JDBC依赖 在Spring Boot项目中使用JDBC,需要在pom.xml文件中添加相应的依赖。在本示例中,我们使用MySQL数据库,因此需要添加以下依赖: <dependency> <groupId>mysql</groupId&…

    Java 2023年5月20日
    00
  • Java详细分析连接数据库的流程

    下面我将详细讲解Java连接数据库的流程,包括以下几个部分: 导入数据库驱动 建立数据库连接 创建执行SQL语句的对象 执行SQL语句 处理结果集 关闭连接 接下来我们逐个步骤进行说明,同时提供两个代码示例: 1. 导入数据库驱动 在Java中连接数据库需要使用相应的数据库驱动,不同的数据库对应不同的驱动。例如,连接MySQL数据库需要使用mysql-con…

    Java 2023年5月19日
    00
  • Jenkins使用Gradle编译Android项目详解

    Jenkins使用Gradle编译Android项目详解 前言 Jenkins是一个功能强大的自动化构建工具,当它和Gradle结合在一起时,可以更方便高效地构建Android项目。本文将详细讲述如何使用Jenkins和Gradle完成Android项目的自动化构建流程。 环境准备 JDK(建议使用8以上版本) Gradle(建议使用5.0以上版本) Jen…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部