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

2023-10-27

目录

1 Mapper 映射文件

2 POJO类

3 Junit测试代码

4 MyBatis 配置文件详解

5. mapper 映射配置文件详解

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();

 

 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MyBatis映射文件与核心配置文件 的相关文章

随机推荐

  • Spring Boot 引入 easyexcel 最新版本 3.3.2,实现读写 Excel

    EasyExcel是一个基于Java的 快速 简洁 解决大文件内存溢出的Excel处理工具 他能让你在不用考虑性能 内存的等因素的情况下 快速完成Excel的读 写等功能 在 Spring Boot 环境中使用 easyexcel 需要完成
  • Collection -> 集合的同步执行

    using System using System Collections using System Collections Specialized namespace 集合和同步
  • 2023华为OD机试真题Java实现【密室逃生游戏】

    题目描述 小强正在参加 密室逃生 游戏 当前关卡要求找到符合给定密码K 升序的不重复小写字母组成 的箱子 并给出箱子编号 箱子编号为1 N 每个箱子中都有一个字符串s 字符串由大写字母 小写字母 数字 标点符号 空格组成 需要在这些字符串中
  • 计算机网络的类别

    1 英特威 互联网 internet是同一个概念 在平时使用中有不同的说法 网络不等于internet 2 不管网络怎么分类 最后都要连接到internet 3 网络的分类 一般来说是按照网络的覆盖范围或作用范围来进行划分的 1 第一种类型
  • 【Python爬虫】requests+Beautifulsoup存入数据库

    本次记录使用requests Beautiful pymysql的方法将大学排名的数据存入本地MySQL数据库 这是一篇学习性文章 希望能够分享在学习过程中遇到的坑与学到的新技术 试图用最简单的话来阐述我所记录的Python爬虫笔记 一 爬
  • 操作系统第九讲——线程的实现方式和多线程模型

    用户级线程 1 用户级线程由应用程序通过线程库实现 所有的线程管理工作都由应用程序负责 包括线程切换 2 用户级线程中 线程切换可以在用户态下即可完成 无需操作系统干预 3 在用户看来 是有多个线程 但是在操作系统内核看来 并意识不到线程的
  • Spring Cloud Alibaba微服务第25章之Jenkins

    目录 一 前言 1 领头羊 2 特点 二 Docker安装Jenkins 1 docker search jenkins查询镜像
  • Whitted-Style 光线追踪

    Whitted Style 光线追踪 生成相机光线 定义光线 每条光线相当于一条射线 具有两个固定属性 起点o以及方向d 此外参数t表示光线的长度 本节中所学习的光线类型为摄影机光线或主光线 对图像中的每一个像素 我们需要构造一条相机射线
  • Eggjs笔记:关系型数据库表之间的关系

    关系数据库中表与表的 3 种关系 1 一对一的关系 一个人对应一个唯一的身份证号 一个人对应一个唯一的驾驶证 一篇文章对应一个文章详情 如上图 一篇文章对应一个文章详情 本来可以是一张表 拆分成2张表 文章表用于存储一些通用的字段信息 文章
  • 教妹学Java(二十一):一文带你了解面向对象编程的所有概念

    你好呀 我是沉默王二 是 Web 全栈开发进阶之路 的作者 CSDN 的博客之星 教妹学 Java 是一套非常有趣的付费专栏 除了继续保持幽默风趣的行风风格 我还力求把每一个知识点讲得透彻明白 保证你可以从中受益 成为一名优秀的 Java
  • Request 详解

    1 Request对象 在Servlet中用来处理客户端请求需要用doGet或doPost方法的request对象 2 get和post请求区别 get请求 get提交的数据会放在URL之后 以 分割URL和传输数据 参数之间以 相连 ge
  • 简单易懂的 flex 布局技巧:前面盒子左对齐,后面盒子右对齐

    前言 页面布局的灵活性和效果直接影响着用户的使用体验 而在实现页面布局时 我们通常会使用 css 的布局方式来进行设计 其中 flex 布局作为一种比较新的布局方式 其灵活性和效果备受开发者的青睐 在这里 我将为大家介绍如何使用 flex
  • matlab学习:regress函数、stepwise函数、lasso函数

    做数据量化推理的大作业 考虑了几种回归模型 由于网上的资料并不多 只能借鉴部分信息 再加上自己的尝试 算是学会了matlab中regress stepwise lasso三个函数的一些用法 分享出来 先分享下有关regress函数的内容 g
  • C++模板基础(九)

    完美转发与 lambda 表达式模板 void f int input std cout lt lt void f int input t lt lt input lt lt n void f int input std cout lt l
  • springboot注入第三方jar包的类

    原文链接 https blog csdn net qq 22855003 article details 89843640 比如我们要注入第三方jar包里的CrawlerTask1 CrawlerTask2这个两个类 因为这两个类上没有被
  • JUC并发编程设计模式

    一 保护性暂停 1 1 定义 即Guarded Suspension 用在一个线程等待另一 个线程的执行结果 要点 有一个结果需要从一个线程传递到另一 个线程 让他们关联同一一个GuardedObject 如果有结果不断从一个线程到另一个线
  • Hadoop集群搭建【web端不显示从节点问题】

    系统 CentOS7 环境 jdk8 版本 hadoop 2 7 7 结构 hadoop01 namedata nodedata hadoop02 nodedata hadoop03 nodedata 配置 hadoop 2 7 7 etc
  • 数仓模型理论

    1 数仓介绍 2 建模理论 建模的目标 性能 成本 效率 数据质量中找到平衡点 2 0 三范式 123要求逐渐严格 每一列不可分割 属性要完全依赖于主键 不可以只依赖一部分 数据重复很多 案例中主键是学生id和课程 所属系和系主任只依赖学生
  • qt的QListwiget设置横向的排列

    cpp view plain copy contentsWidget new QListWidget contentsWidget gt setViewMode QListView IconMode contentsWidget gt se
  • MyBatis映射文件与核心配置文件

    目录 1 Mapper 映射文件 2 POJO类 3 Junit测试代码 4 MyBatis 配置文件详解 5 mapper 映射配置文件详解 1 Mapper 映射文件 在 MyBatis 中 推荐使用 mapper 作为包名 我们只需要