mybatis 基础
前言
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 基础的更多相关文章
- myBatis 基础测试 表关联关系配置 集合 测试
myBatis 基础测试 表关联关系配置 集合 测试 测试myelipse项目源码 sql 下载 http://download.csdn.net/detail/liangrui1988/599388 ...
- JAVA之Mybatis基础入门--框架搭建与简单查询
JAVA中,操作数据库有JDBC.hibernate.Mybatis等技术,今天整理了下,来讲一讲下Mybatis.也为自己整理下文档: hibernate是一个完全的ORM框架,是完全面向对象的.但 ...
- MyBatis基础入门《二十》动态SQL(foreach)
MyBatis基础入门<二十>动态SQL(foreach) 1. 迭代一个集合,通常用于in条件 2. 属性 > item > index > collection : ...
- mybatis基础系列(四)——关联查询、延迟加载、一级缓存与二级缓存
关本文是Mybatis基础系列的第四篇文章,点击下面链接可以查看前面的文章: mybatis基础系列(三)——动态sql mybatis基础系列(二)——基础语法.别名.输入映射.输出映射 mybat ...
- mybatis基础系列(三)——动态sql
本文是Mybatis基础系列的第三篇文章,点击下面链接可以查看前面的文章: mybatis基础系列(二)--基础语法.别名.输入映射.输出映射 mybatis基础系列(一)--mybatis入门 动态 ...
- mybatis基础系列(二)——基础语法、别名、输入映射、输出映射
增删改查 mapper根节点及其子节点 mybatis框架需要读取映射文件创建会话工厂,映射文件是以<mapper>作为根节点,在根节点中支持9个元素,分别为insert.update.d ...
- mybatis基础系列(一)——mybatis入门
好久不发博客了,写博文的一个好处是能让心静下来,整理下之前学习过的一些知识一起分享,大神路过~ mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射. ...
- MyBatis基础入门《十九》动态SQL(set,trim)
MyBatis基础入门<十九>动态SQL(set,trim) 描述: 1. 问题 : 更新用户表数据时,若某个参数为null时,会导致更新错误 2. 分析: 正确结果: 若某个参数为nul ...
- MyBatis基础入门《十八》动态SQL(if-where)
MyBatis基础入门<十八>动态SQL(if-where) 描述: 代码是在<MyBatis基础入门<十七>动态SQL>基础上进行改造的,不再贴所有代码,仅贴改动 ...
- MyBatis基础入门《十七》动态SQL
MyBatis基础入门<十七>动态SQL 描述: >> 完成多条件查询等逻辑实现 >> 用于实现动态SQL的元素主要有: > if > trim > ...
随机推荐
- 手工搭建基于ABP的框架(3) - 登录,权限控制与日志
为了防止不提供原网址的转载,特在这里加上原文链接: http://www.cnblogs.com/skabyy/p/7695258.html 本篇将实现登录.权限控制.日志配置与审计日志的功能.首先我 ...
- YII 多表联查 纵表
A id 与B a.id B id 与C b.id C id 与D c.id 查A读D数据 应用场景: order表 ordergoods表 goods表 merchant加盟商 order 与ord ...
- 《java.util.concurrent 包源码阅读》16 一种特别的BlockingQueue:SynchronousQueue
SynchronousQueue是一种很特别的BlockingQueue,任何一个添加元素的操作都必须等到另外一个线程拿走元素才会结束.也就是SynchronousQueue本身不会存储任何元素,相当 ...
- (ajax)——jquery用法
例子:/* ajax获得状态 */ 点击事件 $("#findBycname").click(function(){ var company = ...
- Less的转义字符
Less的转义字符 有时候,当需要引入无效的CSS语法或Less不能识别的字符,就需要使用转义字符.此时,就可以在字符串前面加一个 ~,并将需要转义的字符串放在 "" 中.格式为: ...
- 比ngx_http_substitutions_filter_module 更强大的替换模块sregex的replace-filter-nginx-module
之前写过nginx反代替换的教程(传送门),使用了ngx_http_substitutions_filter_module模块.不过这货只能替换同一行,具有局限性-_-# 现在一个更强大的替换模块来了 ...
- linux磁盘管理系列-LVM的使用
LVM是什么 LVM是Linux操作系统的逻辑卷管理器. 现在有两个Linux版本的LVM,分别是 LVM1,LVM2.LVM1是一种已经被认为稳定了几年的成熟产品,LVM2 是最新最好的LVM版本. ...
- Java集合(1)一 集合框架
目录 Java集合(1)一 集合框架 Java集合(2)一 ArrayList 与 LinkList Java集合(3)一 红黑树.TreeMap与TreeSet(上) java集合(4)一 红黑树. ...
- Postgres是如何管理空值的
创建表test,y字段插入null. test=# create table test(x bigint,y bigint,z text); CREATE TABLE test=# insert in ...
- swiper3插件无缝滚动配置
<html> <head> <link rel="stylesheet" href="https://cdn.bootcss.com/Swi ...