MyBatis实现注册及获取Mapper

yizhihongxing

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日

相关文章

  • maven打包上传到私有仓库的实现步骤

    下面是maven打包上传到私有仓库的实现步骤: 准备工作 搭建Maven私有仓库:可以使用 Nexus 或者 Sonatype 等 Maven 私有仓库来存储项目的构建包。 在项目 pom.xml 文件中加入仓库配置: <repositories> <repository> <id>my-internal-repo<…

    Java 2023年5月19日
    00
  • Java axios与spring前后端分离传参规范总结

    Java axios是一个基于Promise的HTTP客户端,可用于浏览器和node.js中。它的特点是易于使用和读取。以Spring前后端分离的场景中传参规范总结如下: API设计规范 RESTful 风格 API接口应该符合Restful风格,即资源(Resource)的URI应该有明确的含义,HTTP请求方法(GET, POST, PUT, DELET…

    Java 2023年5月20日
    00
  • java实体对象与Map之间的转换工具类代码实例

    下面是关于“java实体对象与Map之间的转换工具类代码实例”的完整攻略: 一、概述 在Java开发中,经常需要将Java实体对象转换为Map对象,或者将Map对象转换为Java实体对象。这时候,我们可以借助工具类来实现转换功能。本文将介绍如何编写一个通用的工具类,实现Java实体对象与Map之间的转换。 二、实现步骤 1.定义Java实体对象和Map对象 …

    Java 2023年5月26日
    00
  • java线程之用Thread类创建线程的方法

    Thread类是Java中常用的一个多线程编程类,使用Thread类可以方便的创建和管理多个线程。下面是使用Thread类创建线程的方法的完整攻略: 1. 继承Thread类 使用Thread类创建线程的一种方法是,继承Thread类并实现其run()方法。run()方法是用来定义线程的执行内容的。通过继承Thread类,可以很方便地创建线程对象,并启动线程…

    Java 2023年5月18日
    00
  • Java字符串编码解码性能提升的技巧分享

    Java字符串编码解码性能提升的技巧分享 标签: Java, 字符串编码, 解码, 性能优化, 技巧 在实际的Java开发中,字符串编码和解码是很常见的操作。如果不注意这些操作的性能优化,可能会影响整个应用的性能。本文将介绍一些Java字符串编码解码性能提升的技巧。 1. 使用StringBuilder代替字符串拼接 在Java中,字符串是不可变的,也就是说…

    Java 2023年5月20日
    00
  • springboot 使用clickhouse实时大数据分析引擎(使用方式)

    下面我来详细讲解一下“SpringBoot使用ClickHouse实时大数据分析引擎的使用方式”。 简介 ClickHouse是俄罗斯的Yandex推出的一款开源分布式列式数据库管理系统,具有高并发、高性能、低延迟等特点,适用于大规模数据高速读写和实时数据分析处理。 Spring Boot是一个基于Spring框架快速搭建Web应用的极简框架,提供了自动化配…

    Java 2023年6月2日
    00
  • JSP开发中Apache-HTTPClient 用户验证的实例详解

    下面是详细的“JSP开发中Apache-HTTPClient用户验证的实例详解”的攻略: 什么是Apache-HttpClient? Apache-HttpClient是一个基于Java的Http客户端库。它提供了通过Http协议访问Web资源的方式,同时支持访问Https资源。 用户验证的作用 通过用户验证,我们可以将访问Web资源的操作限制在特定用户范围…

    Java 2023年6月15日
    00
  • 详解SpringMVC 自动封装枚举类的方法

    以下是关于“详解SpringMVC 自动封装枚举类的方法”的完整攻略,其中包含两个示例。 详解SpringMVC 自动封装枚举类的方法 在SpringMVC中,我们可以使用自动封装枚举类的方法来简化代码。在本文中,我们将讲解如何使用自动封装枚举类的方法来简化SpringMVC代码。 自动封装枚举类的方法 在SpringMVC中,我们可以使用自动封装枚举类的方…

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