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

目录

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

 

 
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵广陆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值