补充 Mapper映射器的使用:

Mapper映射器,google添加。Mapper映射器是将mapper.xml中配置的sql id,parameterType和resultMap按照规则一一映射到接口中,后续MyBatis创建完接口实例后,可以直接调用对象中的方法操作数据库,其底层还是调用了sqlSession的 API

(1)什么是Mapper映射器

符合映射文件要求的一个接口:Mybatis会生成符合该接口要求的对象

(2)接口要求

a 方法名要与mapper.xml配置文件中sql的id一致

b 方法的参数要与parameterType一致

c 方法的返回类型,要与resulType一致

d 映射文件的命名空间nameSpace要等于接口的完整名字

mapper.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="dao.EmployeeDAO"><!-- 命名空间等于接口的完整名字,包名加接口名 -->
<!-- id要求唯一
parameterType:填写实体类的完整名字
-->
<!-- 插入语句 -->
<insert id="save" parameterType="entity.Employee">
INSERT INTO T_TABLE VALUES(2,#{name},#{age})
</insert>
<!-- 根据id查询语句 -->
<select id="findByID" parameterType="int" resultType="entity.Employee">
SELECT * FROM T_TABLE WHERE ID=#{id}
</select>
<!-- 查询所有结果,不需要参数类型 -->
<select id="findAll" resultType="entity.Employee">
SELECT * FROM T_TABLE
</select>
<!-- 修改操作 -->
<update id="modify" parameterType="entity.Employee">
UPDATE T_TABLE SET NAME=#{name},AGE=#{age} WHERE ID=#{id}
</update>
<!-- 删除操作 -->
<delete id="delete" parameterType="int">
DELETE FROM T_TABLE WHERE ID=#{ididid}
</delete> <!-- 返回map类型的结果 -->
<!-- 也可以将返回结果简写成map,map即为java.util.Map -->
<select id="findOne" parameterType="int" resultType="java.util.Map">
SELECT * FROM T_TABLE WHERE ID=#{id}
</select> <!-- 使用resultMap解决表的字段名和实体类的属性名不一致的情况 -->
<resultMap id="resultMapID" type="entity.NewEmployee">
<result property="empID" column="id" />
<result property="empName" column="name" />
<result property="empAge" column="age" />
</resultMap> <select id="findOneByNewEmp" parameterType="int" resultMap="resultMapID">
SELECT * FROM T_TABLE WHERE ID=#{id}
</select> </mapper>

EmployeeDAO接口中的配置:

import java.util.List;
import java.util.Map; import entity.Employee;
import entity.NewEmployee; /**
* Mapper映射器
* @author*/
public interface EmployeeDAO {
//将一条数据插入数据库
public void save(Employee e);
//查询所有结果
public List<Employee> findAll();
//根据id来查找结果
public Employee findByID(int id);
//修改操作
public void modify(Employee e);
//删除操作
public void delete(int id);
//返回类型为map的查询,根据id来查询
public Map findOne(int id);
//当表的字段名和实体类的属性名不一致时,根据id来查询
public NewEmployee findOneByNewEmp(int id);
}

测试代码:

import java.util.List;
import java.util.Map; import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test; import dao.EmployeeDAO;
import entity.Employee;
import entity.NewEmployee; public class testMapper {
//先拿到sqlSession
private SqlSession session;
@Before
public void init() {
String config="SqlMapConfig.xml";
SqlSessionFactoryBuilder ssfb=new SqlSessionFactoryBuilder();
//读取SqlMapConfig.xml文件,预编译sql写入map
SqlSessionFactory ssf=ssfb.build(testMapper.class.getClassLoader().getResourceAsStream(config));
session=ssf.openSession();
} //测试mapper映射器 插入记录
@Test
public void test1() {
//mybatis会返回一个符合mapper映射器要求的对象
EmployeeDAO dao=session.getMapper(EmployeeDAO.class);
Employee e=new Employee();
e.setName("qiaofeng");
e.setAge(38);
//调用对象的插入方法
dao.save(e);
//提交事务s
session.commit();
session.close();
}
/**
* 查询所有员工操作
*/
@Test
public void test2() {
//mybatis会返回一个符合mapper映射器要求的对象
EmployeeDAO dao=session.getMapper(EmployeeDAO.class);
List<Employee> list=dao.findAll();
System.out.println(list);
session.close();
}
/**
* 根据ID来查找员工信息
*/
@Test
public void test3() {
EmployeeDAO dao=session.getMapper(EmployeeDAO.class);
Employee emp=dao.findByID(2);
System.out.println(emp);
session.close();
}
/**
* 修改操作
*/
@Test
public void test4() {
EmployeeDAO dao=session.getMapper(EmployeeDAO.class);
Employee emp=dao.findByID(2);
emp.setAge(emp.getAge()*2);
//修改
dao.modify(emp);
session.commit();
session.close(); }
/**
* 删除操作
*/
@Test
public void test5() {
EmployeeDAO dao=session.getMapper(EmployeeDAO.class);
dao.delete(5);
session.commit();
session.close();
}
}

总结:

使用Mapper映射器后,测试方法中不再直接使用session的API,而是调用实现接口的对象方法,方法名就是以前session API方法中传入的sql id。

通过对像的方法名,找到对应命名空间下的同名id下对应的sql,然后执行,底层依然是sqlSession的API实现。

MyBatis数据库连接的基本使用-补充Mapper映射器的更多相关文章

  1. MyBatis02 MyBatis基础知识之Mapper映射器

    1 Mapper映射器是什么 是符合映射文件要求的接口 接口要求 a. 方法名要与sql的id一致. b. 方法的参数类型要与parameterType一致. c. 方法的返回类型要与resultTy ...

  2. Spring集成MyBatis的使用-使用Mapper映射器

    Spring集成MyBatis使用 前面复习MyBatis时,发现在测试时,需要手动创建sqlSessionFactory,Spring将帮忙自动创建sqlSessionFactory,并且将自动扫描 ...

  3. Mybatis学习系列(二)Mapper映射文件

    Mapper映射文件,作用是用来配置SQL映射语句,根据不同的SQL语句性质,使用不同的标签,mapper文件中常用的标签有<iselect>.<insert>.<upd ...

  4. MyBatis 体系结构、根配置文件、Mapper映射文件

    一.MyBatis的体系结构 1.SqlSessionFactory对象 SqlSessionFactory对象是MyBatis的管理核心,它是单个数据库映射关系经过编译后的内存镜像,是创建SqlSe ...

  5. 深入理解MyBatis的原理(四):映射器的用法

    前言:继续深入学习 mybatis 的用法及原理,还是先会用再学习原理. 映射器的主要元素有:select.insert.update.delete.parameterMap(即将被删除,不建议使用) ...

  6. 《深入浅出MyBatis技术原理与实战》——4. 映射器,5. 动态SQL

    4.1 映射器的主要元素 4.2 select元素 4.2.2 简易数据类型的例子 例如,我们需要统计一个姓氏的用户数量.应该把姓氏作为参数传递,而将结果设置为整型返回给调用者,如: 4.2.3 自动 ...

  7. Mapper映射器

    在两个独立的对象之间建立通信的对象 需要在两个必须相互隔离的子系统间建立通信. 可能是因为无法修改已有的子系统,或者不愿意在两者之间建立依赖关系.甚至不愿意这两个子系统与另一个部件间建立依赖关系. 运 ...

  8. MyBatis官方教程及源代码解析——mapper映射文件

    缓存 1.官方文档 MyBatis 包括一个非常强大的查询缓存特性,它能够非常方便地配置和定制. MyBatis 3 中的缓存实现的非常多改进都已经实现了,使得它更加强大并且易于配置. 默认情况下是没 ...

  9. MyBatis(3)-- Mapper映射器

    一.select元素 1.select元素的应用 id为Mapper的全限定名,联合称为一个唯一的标识 paremeterType标识这条SQL接收的参数类型 resultType标识这条SQL返回的 ...

随机推荐

  1. jq中工作中用到的一些方法总结

    1.css : 1.判断:hasClass()    2.添加:addClass()   3.移除:removeClass() 2选择器:    1.获取指定上级    $(this).closest ...

  2. springboot工程的添加方式

    1.将spring boot做为父工程 <parent> <groupId>org.springframework.boot</groupId> <artif ...

  3. Junit Rdeis No tests found matching 单机版安装

    redis安装(SecureCRT工具上传redis 3.0.0) 1.mkdir redis 创建文件夹2.tar –zxvf redis-3.0.0.tar.gz –C /redis/ 解压到re ...

  4. mysql大纲

    一.概述 1.1 关系型数据.非关系型数据.半关系型数据 1.2 关系型数据库和非关系型数据库 1.3 发展史 二.MySQL组件和安装 三.数据库语言和主要概念 3.1 数据库语言 DML.DDL. ...

  5. Android DBFlow学习及示例

    项目地址:Kotlin-DBflow-example Kotlin-DBflow-example DBFlow是一个功能强大的,非常简单的,带有注解处理的ORM Android数据库.github地址 ...

  6. Flex学习笔记-皮肤

    1文件结构 MXML应用程序 index.mxml 皮肤文件 components.button.skin.btnSkin1.mxml  皮肤文件的组件随便引用了spark.components.Bu ...

  7. python网络图片爬取存储全代码

    #图片爬取全代码import requestsimport osurl = "https://timgsa.baidu.com/timg?image&quality=80&s ...

  8. TFrame bug

    delphi 10.1.2 工程里有很多fram 正确的工程文件dproj中fram的定义是 <DCCReference Include="Unit15frame.pas"& ...

  9. 机器学习进阶-疲劳检测(眨眼检测) 1.dist.eculidean(计算两个点的欧式距离) 2.dlib.get_frontal_face_detector(脸部位置检测器) 3.dlib.shape_predictor(脸部特征位置检测器) 4.Orderdict(构造有序的字典)

    1.dist.eculidean(A, B) # 求出A和B点的欧式距离 参数说明:A,B表示位置信息 2.dlib.get_frontal_face_detector()表示脸部位置检测器 3.dl ...

  10. 现学现卖——Keil uVision 使用教程

    Keil uVision 使用教程 1.如果有旧的工程在,先关闭旧工程.Project -> Close Project2.新建工程.Project -> New uVision Proj ...