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日

相关文章

  • Java中的StackOverflowError是什么?

    Java中的StackOverflowError是一种运行时异常,表示在程序运行中调用了过多的方法导致方法调用栈溢出。 在Java中,每个方法的调用会在堆栈中创建一个称为“栈帧”的内存区域,该区域用于存储方法调用的参数、局部变量和返回地址等信息。当程序调用嵌套方法时,每个方法的栈帧将被逐个压入栈中。当方法返回时,其栈帧将被弹出并释放以供下次使用。如果堆栈不能…

    Java 2023年4月27日
    00
  • SpringMVC接收前台传递过来的值的实例

    下面我来详细讲解“SpringMVC接收前台传递过来的值的实例”的完整攻略。 1. 前置条件 在开始之前,需要保证你已经: 安装了Java开发环境(JDK) 安装了Spring框架 2. 实例1:接收表单数据 假设我们有一个表单页面,其中包含一个输入框和一个提交按钮,我们需要在后台接收前台传递过来的输入框的值。以下是实现过程: 在表单页面中,添加一个输入框和…

    Java 2023年6月15日
    00
  • java实现短信验证码5分钟有效时间

    下面是Java实现短信验证码5分钟有效时间的攻略: 1. 生成验证码 我们可以使用Java的Random类生成随机的4-6位数字作为验证码。示例代码如下: import java.util.Random; public class VerificationCodeUtil { public static String generateVerification…

    Java 2023年6月15日
    00
  • 解决RestTemplate 的getForEntity调用接口乱码的问题

    RestTemplate是Spring框架提供的用于进行HTTP请求的工具,但是在使用getForEntity方法调用接口时,会出现中文乱码的问题。 解决这个问题可以分为两个步骤: 设置RestTemplate的编码方式 在使用RestTemplate的时候,需要设置它的编码方式。可以在创建RestTemplate对象时,传入一个StringHttpMess…

    Java 2023年5月20日
    00
  • JSP入门教程(1)

    下面是“JSP入门教程(1)”的完整攻略: 1. 概述 本教程将介绍JSP(Java Server Pages)的入门知识。JSP是Java Web应用程序中最常用的技术之一,它可以在服务器端动态生成HTML页面,使得Web应用程序更加灵活和动态化。如果你是初学者,本教程将帮助你快速入门JSP,在项目中使用JSP开发Web应用程序。 2. 前提条件 在学习本…

    Java 2023年6月15日
    00
  • Java 生成随机字符串数组的实例详解

    Java 生成随机字符串数组的实例详解 介绍 在Java中,我们经常需要使用随机字符串数组来做一些初始化操作,这时就需要用到生成随机字符串数组的方法了。本文将介绍Java生成随机字符串数组的详细攻略。 实现步骤 生成随机字符串数组的步骤如下: 定义生成的字符串的长度 定义生成的字符串数组的长度 生成随机字符串 将随机字符串添加到字符串数组中 返回字符串数组 …

    Java 2023年5月26日
    00
  • Java中Equals使用方法汇总

    Java中Equals使用方法汇总 Equals是Java中用于比较对象的方法,常用于判断两个对象是否相等。在Java中,我们可以通过两种方式来使用Equals:覆写Equals方法和使用Objects类中的equals方法。 覆写Equals方法 覆写Equals方法是指在一个类中自定义其equals方法,这样可以根据实际需求来自定义比较方式。 Java中…

    Java 2023年5月20日
    00
  • Java用递归方法解决汉诺塔问题详解

    Java用递归方法解决汉诺塔问题详解 问题描述 汉诺塔问题的经典描述是:在有三根柱子的情况下,有三个大小不同的盘子从下往上按从大到小的顺序放在柱子A上,要将这三个盘子移动到柱子C上,要求每次只能移动一个盘子,且大盘子不能放在小盘子上面。 解题思路 汉诺塔问题是递归问题的典型,使用递归可以比较简单地解决该问题。 我们可以将解决汉诺塔问题的方法抽象为三个步骤: …

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