补充 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 mapperPUBLIC "-//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 {//先拿到sqlSessionprivate SqlSession session;@Beforepublic void init() {String config="SqlMapConfig.xml";SqlSessionFactoryBuilder ssfb=new SqlSessionFactoryBuilder();//读取SqlMapConfig.xml文件,预编译sql写入mapSqlSessionFactory ssf=ssfb.build(testMapper.class.getClassLoader().getResourceAsStream(config));session=ssf.openSession();        }//测试mapper映射器 插入记录
        @Testpublic 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();}/*** 查询所有员工操作*/@Testpublic void test2() {//mybatis会返回一个符合mapper映射器要求的对象EmployeeDAO dao=session.getMapper(EmployeeDAO.class);List<Employee> list=dao.findAll();System.out.println(list);session.close();}/*** 根据ID来查找员工信息*/@Testpublic void test3() {EmployeeDAO dao=session.getMapper(EmployeeDAO.class);Employee emp=dao.findByID(2);System.out.println(emp);session.close();}/*** 修改操作*/@Testpublic 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();}/*** 删除操作*/@Testpublic 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实现。

转载于:https://www.cnblogs.com/youngchaolin/p/10353754.html

MyBatis数据库连接的基本使用-补充Mapper映射器相关推荐

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

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

  2. mapper命名规范_Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...

  3. Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...

  4. mysql映射mapper_这下够清楚了吧!详解Mybatis的Mapper映射文件

    前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( 也很枯燥),由于篇幅实在过于冗长,我预计大家想看完得花上两段上 ...

  5. MyBatis学习之映射器Mapper(接口映射器+xml映射文件)

    Table of Contents 01 MyBatis映射器: 1.1 接口映射器+xml映射器 1.2 接口映射器+注解 02 接口映射器+xml映射器  方式 2.1 mybatis配置文件 引 ...

  6. java中mapper层作用_Java的MyBatis框架中Mapper映射配置的使用及原理解析

    Mapper的内置方法model层就是实体类,对应数据库的表.controller层是Servlet,主要是负责业务模块流程的控制,调用service接口的方法,在struts2就是Action.Se ...

  7. mybatis的mapper.xml文件中含有中文注释时运行出错,mybatis配置优化和别名优化 mybatis配置之映射器说明

    记录一个发现的小问题,刚刚在UserMapper.xml文件中有一段中文注释掉的内容: <!-- <resultMap id="Usermap" type=" ...

  8. 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap[转]

    上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...

  9. Mybatis中Mapper映射文件详解(默认值)

    Mapper映射文件是一个xml格式文件,必须遵循相应的dtd文件规范,如ibatis-3-mapper.dtd.我们先大体上看看支持哪些配置?如下所示,从Eclipse里截了个屏: 从上图可以看出, ...

最新文章

  1. 你知道吗?Linux命令竟如此简单!
  2. 理想的计算机职业作文100,我的理想作文100字(通用30篇)
  3. 小小的吹一下集结号~
  4. 关于为使用ArrayAdapter创建ListView时,使用TextView添加子项的问题
  5. 【渝粤教育】广东开放大学 Android移动开发项目实践 形成性考核 (58)
  6. 【HDU - 1069】Monkey and Banana (最长下降子序列 + 贪心,最长上升子序列类问题)
  7. 项目合作| 视频监控解决隧道洗车线的安全问题
  8. Nature官方劝退读博:全球七成博士对前途迷茫
  9. web前端基础(11html5和css)
  10. 蓝牙小票机php接口,Android蓝牙打印小票,仿美团外卖小票打印
  11. 数字万用表性能指标介绍
  12. Centos下增加swap空间
  13. 投资理财-赚取平均收益
  14. 【华为机试真题 Python实现】查找众数及中位数
  15. python技巧:将文件夹下的文件遍历,保留特定文件,删除其他文件
  16. 大数据金融,这个“跨界整合”会带来什么
  17. 使用frp+MobaXterm进行ssh远程连接报错及解决办法
  18. CV学习笔记-VGG
  19. (一)框架搭建,前端路由设置,自定义寻找指定路径(Django+Vue+Mysql,数据库管理数据分析网站)
  20. 【开源技术分享】无需流媒体服务,让浏览器直接播放rtsp/rtmp的神器:EasyMedia

热门文章

  1. linux 常用分区有哪些,Linux常用分区及目录
  2. matlab离散点包络,求大神指点绘制空间内散点图的包络面,,,散点程序如下
  3. ie浏览器查看vue中js_浅析 Vue.js 中那些空间换时间的操作
  4. 管家婆支持mysql_开放多接口,支持对接管家婆等第三方应用
  5. vs点击方法跳不到对于的地方_迷你世界:大神玩花式跑酷有多简单?老玩家教你,轻松学会百段跳...
  6. leetcode64. 最小路径和
  7. String类的实现
  8. 排序算法之 插入排序
  9. 数据库实验7 数据库视图的定义与使用
  10. opencv 仿射变换与透视变换详解