前言

MyBatis作为一款持久层的框架,从最初的ibatis更名,经过五六年的发展更新,如今已经更新到了3.4.5版本。MyBatis通过简单的xml或注解配置,就能将接口和Java的对象映射成数据库的记录,避免了很多的手动配置,现已被越来越多的开发者使用。

刚开始使用的话,可能会有很多困惑:明明传递了值,为什么传递不到xml中?到底该用resultMap还是用resultType?如果我想返回String、Map、List等等,该如何写?在写了这么多MyBatis代码后,我总结了一下项目中常见的几种,供大家参考,如果想进一步了解,请参考官方文档:http://www.mybatis.org/mybatis-3/zh/index.html

干货图

接口和xml对应图表

高清图:http://img.blog.csdn.net/20170831064012748

干货图描述

在业务逻辑中,最常用的当属查询了,传递的值多样化,需要的返回值样式也不一样,但是等写好了回来再看时,发现也就那几种。

1. 参数类型:String,返回值类型:List<对象>

public List<Student> getStudentByName(@Param(value="name") String name);

<select id="getStudentByName" parameterType="java.lang.String" resultMap="BaseResultMap">

select * from xxx where stu_name = #{name}

</select>

2. 参数类型:Map<String, Object>,返回值类型:List<对象>

public List<Student> getStudents(Map<String, Object> params);

<select id="getStudents" parameterType="java.util.Map" resultMap="BaseResultMap">

select * from xxx where stu_name = #{name}

</select>

3. 参数类型:String,返回值类型:对象

public Student getStudentById(@Param(value="id") String id);

<select id="getStudentById" resultMap="BaseResultMap">

select * from xxx where id = #{id}

</select>

4. 参数类型:String,返回值类型:String

String queryUserIdByThirdParty(@Param("openId") String openId);

<select id="queryUserIdByThirdParty" resultType="java.lang.String">

select user_id from sys_users where open_id=#{openId}

</select>

5. 参数类型:String,返回值类型:List<String>

List<String> getUserIds(@Param("tenantId") String tenantId);

<select id="getUserIds" resultType="java.lang.String">

select id from sys_users where tenant_id = #{tenantId};

</select>

6. 参数类型:String,返回值类型:Map<String, Object>

Map<String, Object> getChargeSum(@Param(value = "uid") String uid);

<select id="getChargeSum" resultType="java.util.Map" parameterType="java.lang.String">

select sum(transaction_amount) as chargeSum from xxx where id = #{uid}

</select>

7. 参数类型:String,返回值类型:List<Map<String, Object>>

List<Map<String,Object>> getReadsNum(@Param(value = "account") String account);

<select id="getReadsNum" resultType="java.util.Map">

select * from xxxx where mw_account = #{account}

</select>

8. 参数类型:String,返回值类型:int

int deleteById(@Param(value = "id") String id, @Param(value = "uid") String uid);

<delete id="deleteById" parameterType="java.lang.String">

delete from xxxx where id = #{id} and create_by = #{uid};

</delete>

9. 参数类型:void,返回值类型:int

int deleteById(@Param(value = "id") String id, @Param(value = "uid") String uid);

<delete id="deleteById">

delete from xxxx where id = #{id} and create_by = #{uid};

</delete>

10. 参数类型:对象,返回值类型:int

int updateStuInfo(StudentInfo studentInfo);

<update id="updateStuInfo" parameterType="xx.xxx.xxxx.StudentInfo">

update xxxx set stu_name = #{stuName}...

where id = #{id}

</update>

说明

1. 接口中的@Param注解指的是 org.apache.ibatis.annotations.Param,使用这个注解就相当于给一个参数起一个别名,在xml中可以直接使用这个别名。如果不使用这个注解,需要保证参数的名称和xml中property配置相同。

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>3.4.5</version>

</dependency>

2. 在查询中,parameterType有时是可选的,但是resultMap或者resultType基本上都是需要的。

3. BaseResultMap指的是数据表和对象的映射关系,如:

<resultMap id="BaseResultMap" type="xx.xxx.xxxx.StudentInfo">

<id column="id_" jdbcType="VARCHAR" property="id" />

...

</resultMap>

4. 如果使用IDEA开发工具,可以下载Free MyBatis plugin插件,可以在xml和接口直接进行点击跟踪。

这次没有涉及到批量插入和复杂点继承关系查询,后续会更新。

mybatis 基础的更多相关文章

  1. myBatis 基础测试 表关联关系配置 集合 测试

    myBatis 基础测试 表关联关系配置 集合 测试 测试myelipse项目源码 sql 下载 http://download.csdn.net/detail/liangrui1988/599388 ...

  2. JAVA之Mybatis基础入门--框架搭建与简单查询

    JAVA中,操作数据库有JDBC.hibernate.Mybatis等技术,今天整理了下,来讲一讲下Mybatis.也为自己整理下文档: hibernate是一个完全的ORM框架,是完全面向对象的.但 ...

  3. MyBatis基础入门《二十》动态SQL(foreach)

    MyBatis基础入门<二十>动态SQL(foreach) 1. 迭代一个集合,通常用于in条件 2. 属性 > item > index > collection : ...

  4. mybatis基础系列(四)——关联查询、延迟加载、一级缓存与二级缓存

    关本文是Mybatis基础系列的第四篇文章,点击下面链接可以查看前面的文章: mybatis基础系列(三)——动态sql mybatis基础系列(二)——基础语法.别名.输入映射.输出映射 mybat ...

  5. mybatis基础系列(三)——动态sql

    本文是Mybatis基础系列的第三篇文章,点击下面链接可以查看前面的文章: mybatis基础系列(二)--基础语法.别名.输入映射.输出映射 mybatis基础系列(一)--mybatis入门 动态 ...

  6. mybatis基础系列(二)——基础语法、别名、输入映射、输出映射

    增删改查 mapper根节点及其子节点 mybatis框架需要读取映射文件创建会话工厂,映射文件是以<mapper>作为根节点,在根节点中支持9个元素,分别为insert.update.d ...

  7. mybatis基础系列(一)——mybatis入门

    好久不发博客了,写博文的一个好处是能让心静下来,整理下之前学习过的一些知识一起分享,大神路过~ mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射. ...

  8. MyBatis基础入门《十九》动态SQL(set,trim)

    MyBatis基础入门<十九>动态SQL(set,trim) 描述: 1. 问题 : 更新用户表数据时,若某个参数为null时,会导致更新错误 2. 分析: 正确结果: 若某个参数为nul ...

  9. MyBatis基础入门《十八》动态SQL(if-where)

    MyBatis基础入门<十八>动态SQL(if-where) 描述: 代码是在<MyBatis基础入门<十七>动态SQL>基础上进行改造的,不再贴所有代码,仅贴改动 ...

  10. MyBatis基础入门《十七》动态SQL

    MyBatis基础入门<十七>动态SQL 描述: >> 完成多条件查询等逻辑实现 >> 用于实现动态SQL的元素主要有: > if > trim > ...

随机推荐

  1. C#.Net调用VB.Net中的MY

    用过VB.NET的人应该只要MY有多强大了吧,是不是很想在C#中也能调用呢? 当然是可以的,.net作为微软的跨语言的平台,必须是能实现的,不然微软就自己打自己嘴巴了~ 回到正题上: 1.在程序中加上 ...

  2. struts2 内容记录

    多xml文件配置 在开发过程中我们经常会将每一张表(如:user表)的struts.xml文件分开,便于管理,故需要建立struts_user.xml文件管理请求等.那么需要用到inculde标签. ...

  3. [转载] su和sudo

    转载自http://www.cnblogs.com/haichuan3000/articles/2123633.html Mandriva 说也奇怪,用root登录的用户比一般用户还难用,当初用FC6 ...

  4. 怎样在一个HTML中嵌入另一个HTML页面(iframe标签用法)

    iframe 怎么 在一个网页中嵌入另一个网页呢,我们可以用html中的iframe标签搞定. iframe支持所有浏览器.下面来看语法: <iframe src="规定在 ifram ...

  5. linux 运维常用工具表

    https://code.google.com/p/httperf/  ※测量Web服务器的性能 ./configure   make &&make install http://ww ...

  6. 【Android开发学习笔记之一】5大布局方式详解

    Android中常用的5大布局方式有以下几种: 线性布局(LinearLayout):按照垂直或者水平方向布局的组件. 帧布局(FrameLayout):组件从屏幕左上方布局组件. 表格布局(Tabl ...

  7. 《java.util.concurrent 包源码阅读》15 线程池系列之ScheduledThreadPoolExecutor 第二部分

    这篇文章主要说说DelayedWorkQueue. 在ScheduledThreadPoolExecutor使用DelayedWorkQueue来存放要执行的任务,因为这些任务是带有延迟的,而每次执行 ...

  8. C#学习笔记随笔(1)----C#中static关键字的作用

    静态分配的,有两种情况: 1. 用在类里的属性.方法前面,这样的静态属性与方法不需要创建实例就能访问, 通过类名或对象名都能访问它,静态属性.方法只有“一份”:即如果一个类新建有N个 对象,这N 个对 ...

  9. 2734:十进制到八进制-poj

    总时间限制:  1000ms 内存限制:  65536kB 描述 把一个十进制正整数转化成八进制. 输入 一行,仅含一个十进制表示的整数a(0 < a < 65536). 输出 一行,a的 ...

  10. Unity20172.0 Android平台打包

    Android SDK及Jdk百度网盘下载链接:https://pan.baidu.com/s/1dFbEmdz 密码:pt7b Unity20172.0 Android平台打包 简介说明: 第一步: ...