MyBatis映射文件与核心配置文件

简介: MyBatis映射文件与核心配置文件

1 Mapper 映射文件

MyBatis 中, 推荐使用 mapper 作为包名, 我们只需要写一个映射配置文件即可. UserMapper.xml, 用于定义要执行的 SQL 语句, 同时设定返回结果的类型.

<?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">
<!-- 
  namespace: 命名空间, 可以随意定义, 一般情况下要写全限定路径
  MyBatis管理SQL语句是通过namespace+id来定位的
 -->
<mapper namespace="com.bjsxt.mapper.UserMapper">
  <!-- 
    select标签用于编写查询语句
      id: sql语句的唯一标识, 类比为方法名
      resultType: 用于设定返回结果的类型(全限定路径)
        如果返回结果是集合, 要写集合泛型的类型
   -->
  <select id="selAll" resultType="com.pojo.User">
    select * from t_user
  </select>
</mapper>

2 POJO类

import java.io.Serializable;
public class User implements Serializable {
  private int id;
  private String username;
  private String password;
  public User() {
    super();
  }
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getUsername() {
    return username;
  }
  public void setUsername(String username) {
    this.username = username;
  }
  public String getPassword() {
    return password;
  }
  public void setPassword(String password) {
    this.password = password;
  }
  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + id;
    result = prime * result + ((password == null) ? 0 : password.hashCode());
    result = prime * result + ((username == null) ? 0 : username.hashCode());
    return result;
  }
  @Override
  public boolean equals(Object obj) {
    if (this == obj)
      return true;
    if (obj == null)
      return false;
    if (getClass() != obj.getClass())
      return false;
    User other = (User) obj;
    if (id != other.id)
      return false;
    if (password == null) {
      if (other.password != null)
        return false;
    } else if (!password.equals(other.password))
      return false;
    if (username == null) {
      if (other.username != null)
        return false;
    } else if (!username.equals(other.username))
      return false;
    return true;
  }
  @Override
  public String toString() {
    return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
  }
}

3 Junit测试代码

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
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 org.junit.Test;
import com.bjsxt.pojo.User;
public class TestMyBatis {
  @Test
  public void testSelAll() throws IOException {
    // 加载MyBatis核心配置文件
    InputStream is = Resources.getResourceAsStream("mybatis.xml");
    // 构建SqlSessionFactory工厂对象
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    // 通过工厂打开SqlSession
    SqlSession session = factory.openSession();
    // 通过session执行查询操作
    List<User> list = session.selectList("com.bjsxt.mapper.UserMapper.selAll");
    System.out.println(list);
    // 关闭资源
    session.close();
  }
}

4 MyBatis 配置文件详解

4.1 <configuration>

这是配置文件的根元素, 所有的其他元素都要在这个标签下使用.

4.2 <environments>

用于管理所有的环境, 并可以指定默认使用哪个环境. 通过 default 属性来指定.

4.3 <environment>

用于配置环境. id 属性用于唯一标识当前环境

4.4 <transactionManager>

用于配置事务管理器

4.4.1 type 属性

用于指定 MyBatis 采用何种方式管理事务

a) JDBC: 表示 MyBatis 采用与原生 JDBC 一致的方式管理事务

b) MANAGED: 表示将事务管理交给其他容器进行, 例如 Spring

4.5 <DataSource>

用于配置数据源, 设置 MyBatis 是否使用连接池技术, 并且配置数据库连接的四个参数

4.6 type 属性

用于设置 MyBatis 是否使用连接池技术

a) POOLED, 表示采用连接池技术

b) UNPOOLED, 表示每次都会开启和关闭连接, 不使用连接池技术

c) JNDI, 使用其他容器(例如 Spring)提供数据源

4.7 <property>

用于配置数据库连接参数(driver, url, username, password)

4.8 <mappers>

用于扫描 mapper 信息

5. mapper 映射配置文件详解

5.1 <mapper>

根元素

5.1.1 namespace 属性

用于指定命名空间, mybatis 是通过 namespace+id 的方式来定位 SQL

语句的, 所以必须指定 namespace. 通常 namespace 被配置为全限定路径

5.2 <select>

用于定义查询语句(DQL)

5.2.1 id 属性

用于唯一表示 SQL 语句, 类似于方法的方法名

5.2.2 resultType 属性

用于设定查询返回的数据类型, 要写类型的全限定路径. 如果返回的

是集合类型, 要写集合的泛型的类型.

6 MyBatis 中常用的三个查询方法

6.1 selectList

用于查询多条数据的情况, 返回值是一个 list 集合. 如果没有查到任何数据, 返回没有元素的集合(空集合, 不是 null)

  @Test
  public void testSelectList() throws IOException {
    InputStream is = Resources.getResourceAsStream("mybatis-cfg.xml");
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    SqlSession session = factory.openSession();
    List<User> list = session.selectList("com.mapper.UserMapper.selAll");
    System.out.println(list);
    for (User user : list) {
      System.out.println(user);
    }
    session.close();
  }

6.2 selectOne

用于查询单条数据的情况, 返回值是一个对象. 如果没有查到任何数据, 返回 null

  @Test
  public void testSelectOne() throws IOException {
    InputStream is = Resources.getResourceAsStream("mybatis-cfg.xml");
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    SqlSession session = factory.openSession();
    User user = session.selectOne("com.mapper.UserMapper.selOne");
    System.out.println(user);
    session.close();
  }

6.3 selectMap

用于查询多条数据的情况, 多条数据要形成一个Map集合. 需要指定哪个属性作为 key. 如果查不到, 返回一个空 map 集合(不是 null)

  @Test
  public void testSelectMap() throws IOException {
    InputStream is = Resources.getResourceAsStream("mybatis-cfg.xml");
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    SqlSession session = factory.openSession();
    Map<Integer, User> map = session.selectMap("com.bjsxt.mapper.UserMapper.selAll", "id");
    System.out.println(map);
    Set<Integer> set = map.keySet();
    for (Integer k : set) {
      System.out.println(map.get(k));
    }
    session.close();


目录
相关文章
|
1月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
6月前
|
XML Java 数据库连接
MyBatis入门——MyBatis XML配置文件(3)
MyBatis入门——MyBatis XML配置文件(3)
110 6
|
3月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
3月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
70 1
|
5月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
115 3
|
6月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
78 3
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
|
5月前
|
XML Java 数据格式
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
|
5月前
|
Java 数据库连接 Maven
Private method ‘getVideoList()‘ is never used,mybatis必须指定Mapper文件和实体目录,在参考其他人写的代码,要认真分析别人的代码,不要丢失
Private method ‘getVideoList()‘ is never used,mybatis必须指定Mapper文件和实体目录,在参考其他人写的代码,要认真分析别人的代码,不要丢失
|
7月前
|
SQL Java 数据库连接
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射