上篇文章介绍了MyBatis的配置文件,现在来介绍实体映射文件Mapper.xml。

说道实体映射文件,就不得不说一下实体与表之间的映射关系:单表映射和多表映射。

a. 单表映射

1 public class Admin{
2     private String id;
3     private String name;
4     private String password;
5     //三个属性的setter和getter方法
6 }

映射文件

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="yitian.study.dao.mapper">
 6     <resultMap id="adminMapper" type="com.xxx.entity.Admin">
 7         <id property="id" column="id"/>
 8         <result property="name" column="name"/>
 9         <result property="password" column="password"/>
10     </resultMap>
11     <select id="selectAdmin"
12             resultType="Admin" parameterType="Admin">
13         SELECT *
14         FROM Admin
15         WHERE id = #{id}
16     </select>
17     <select id="selectAdminByName"
18             resultType="Admin">
19         SELECT *
20         FROM Admin
21         WHERE name = #{name}
22     </select>
23     <insert id="insertAdmin"
24             useGeneratedKeys="true">
25         INSERT INTO Admin (name, password) VALUES (#{name}, #{password})
26     </insert>
27     <update id="updateAdmin">
28         UPDATE Admin
29         SET password = #{password}
30         WHERE id = #{id}
31     </update>
32     <delete id="deleteAdmin">
33         DELETE FROM Admin
34         WHERE id = #{id}
35     </delete>
36 </mapper>

View Code

映射文件包含实体类的映射和5条SQL语句,分别是增删查改以及按名称查找。每一条语句都需要一个标识符(id),将会在后面再代码中用到。如果是查询语句还需要resultType,指定返回类型。MyBatis会将数据表列名和这里指定的类型属性按名称自动映射起来。如果需要在语句中传入参数,可以使用 parameterType属性,指定Java实体类的全名或简写,然后就可以在SQL语句中使用#{}来访问参数的属性了。如果是简单的映射,那么parameterType属性还可以省略,MyBatis会自动从传入的Java对象中获取相应的属性。对于某些数据库(例如MySQL),还可以在插入的时候指定useGeneratedKeys="true",让数据库自动生成主键。

常用的方法有增删查改这几个方法。这些方法的第一个参数是前面我们在映射文件中定义的语句ID,第二个参数是要传入的参数。对于查询来说有selectOne和selectList方法,它们的区别主要在于返回个数,如果确定只返回一个对象就使用selectOne方法。

示例如下:

1 Admin admin = sqlSession.selectOne("selectAdminByName",name);

上述方法是采用字符串来指定要使用的查询。MyBatis还给我们提供了一种映射类的方式来实现sql语句。

映射类其实就是一个简单的接口。该接口中的方法和映射文件中定义的语句一一对应。接口方法的名称必须和语句id完全相同,接口方法的返回值和参数和相应的语句相对应。

public interface AdminMapper {Admin selectAdmin(int id);Admin selectAdminByName(String name);void insertAdmin(Admin admin);void updateAdmin(Admin admin);void deleteAdmin(Admin admin);
}

仅仅增加映射类还不够,我们需要修改映射文件,以便让MyBatis能找到这个映射类。做法就是将映射文件的命名空间改为对应的映射类的类名。

<mapper namespace="com.xxx.mapper.AdminMapper">

在两者定义好之后,我们就可以使用了。在SqlSession上调用getMapper方法,并传入要获取的Mapper类即可。

1 AdminMapper mapper = sqlSession.getMapper(AdminMapper.class);
2 Admin s = mapper.selectAdminByName(name);

b. 多表映射

      关于多表映射的书写,请参考这篇文章----《MyBatis快速入门(2):多表映射》个人觉得讲的还不错,本人就不在赘述了。

转载于:https://www.cnblogs.com/shouming/articles/7809599.html

MyBatis的学习之路(二)相关推荐

  1. 前端Vue学习之路(二)-Vue-router路由

    Vue学习之路 (二) Vue-router(基础版) 一.增加静态路由 二.动态路由+路由嵌套+404页面 三. 编程式导航 四.命名路由 五.命名视图 六.重定向和起别名 1.重定向 2.起别名 ...

  2. Hive学习之路(二):Hive表操作详讲

    操作内容简介 一.操作前的准备 二.Hive表操作详讲 1. 创建数据库 2. 查看所有数据库/表 3. 在Hive上直接操作HDFS 4. 在Hive上直接执行终端命令 5. 创建数据表/查看表的信 ...

  3. python 剑指offer 学习之路(二)

    剑指offer 学习之路 合并两个排序的链表 树的子结构 顺时针打印矩阵 包含min函数的栈 从上往下打印二叉树 二叉搜索树的后序遍历序列 二叉树中和为某一值的路径 复杂链表的复制 数组中出现次数超过 ...

  4. Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发

    前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)--MyBatis的基础知识.MybatisFirst中存在大量重复的代码.这次简化下代码: 使用MyBatis开发Dao ...

  5. zigbee学习之路(二)点亮LED

    一.前言 今天,我来教大家如何点亮led,这也是学习开发板最基础的步骤了. 二.原理分析 cc2530芯片跟虽然是51的内核,但是它跟51单片机还是有区别的,51单片机不需要对IO口进行配置,而cc2 ...

  6. MyBatis由浅入深学习总结之二:MyBatis解决Java实体类和数据库表字段不一致方法总结

    在此,首先说明一点任何持久性框架都需要解决一个问题,那就是Java实体类的字段一般来说基本上会与数据库表中字段不一致,那么它们是如何解决的呢?咱们以Hibernate和SpringJDBC为例说明一下 ...

  7. Spring Boot 学习之路二 配置文件 application.yml

    一.创建配置文件 如图所示,我们在resources文件夹中新建配置文件application.yml 结构图 二.一些基本配置 server: port: 8090 //配置端口session-ti ...

  8. C++学习之路二:C++

    目录 二.C++ 1. C,java,C++区别 2. C++ 对象模型(C++ class底层原理) 2.1 基本对象模型与C++对象模型 2.2 C++ 构造函数模型 2.3 C++继承的底层原理 ...

  9. 3D点云之PCL学习之路(二)

    VTK的基本知识(1) PCL使用的第三方库有 boost.eigen.FLANN.OpenNI2.Qhull.VTK. PCL的显示部分就是基于VTK来实现的.简单介绍一下这个库.主要参考依据是:& ...

最新文章

  1. eeglab教程系列(14)-Working with ICA Components
  2. 独立成分分析ICA系列4:ICA的最优估计方法综述
  3. linux fedora自带终端字体间距过大问题解决
  4. php监听mq消息,客户端监听服务端获取rabbitmq消息队列,rabbitmq有消息的时候客户端刷新页面才能获取到消息,监听没起到作用,请求各位大神指点迷津...
  5. Multi-thread--C++11中std::condition_variable的使用
  6. 列表页的动态条件搜索
  7. php 导航栏链接网页,怎样用php来给网页做导航栏_php实例
  8. sqlserver 两个数值字段相加_SQLServer 中多行数据合并成一行数据(一个字段)
  9. C语言 复制字符串 malloc
  10. 北理工计算机学院新闻,新闻睇睇睇 | 计算机学院举办第八届ACM/ICPC程序设计竞赛校内选拔赛暨北理工邀请赛...
  11. shell脚本语法教程
  12. kuka机器人程序是c语言吗,KUKA机器人示教器编程问题讲解——KUKA机器人
  13. python插值算法_python插值算法
  14. linux电子相册设计,电子相册设计报告
  15. php解压7z,linux解压7z文件命令
  16. html保持div长宽比例,div自适应宽高保持比例不变
  17. 16S测序 生物信息数据处理
  18. Python学习之【Django】
  19. Big Faceless Applet PDF阅读器
  20. 普通人怎样投资区块链

热门文章

  1. android p正式版,国内首家!一加正式推送Android P正式版
  2. 关键字typedef、关键字using、auto类型说明符和declytpe类型指示符
  3. 网易校园招聘历年经典面试题汇总:前端 岗
  4. 《Head First设计模式》第九章(2)组合模式
  5. 《Python Cookbook 3rd》笔记(5.21):序列化 Python 对象
  6. 两条边延长角会有什么变化_叶片锁是什么样的 叶片锁使用方法【详解】
  7. 区块链中涉及到密码学的场景
  8. Android Studio设置
  9. 高智商孩子14个独有的特点
  10. 一次失败的项目经理招聘经验