这里我们记录一些mybatis的一些常用知识和项目中遇到的问题总结。快乐人生的三个必要元素是,有要做的事、热爱的事及盼望的事。

mybatis的一些知识

一、mybatis插入返回主键值

  • 插入的java代码:其中返回是当前插入的主键,insert方法返回的是影响的行数。
public void insertUserInfo() {
Map<String, Object> map1 = new HashMap<>();
map1.put("userName", "huhx");
map1.put("age", 35);
int effectRow = this.sqlSession.insert("login.insertUserInfo", map1);
System.out.println(map1.get("huhxId")); //
System.out.println(effectRow); //
}
  • 语句映射的sql语句:
<insert id="insertUserInfo" parameterType="java.util.HashMap" useGeneratedKeys="true" keyProperty="huhxId">
INSERT INTO
puser(user_name, age)
VALUES
(#{userName}, #{age})
</insert>

关于mybatis的官方文档: http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html

二、mybatis的一个参数传递的异常

  • java代码
public Map<String, Object> getUserInfoById(Long userId) {
return this.sqlSession.selectOne("user.queryUserInfoByUserId", userId);
}
  • xml映射的代码
<select id="queryUserInfoByUserId" parameterType="java.lang.Long" resultType="java.util.HashMap">
SELECT
userId, username, password, address, birthday, sex
FROM
puser
WHERE
1 = 1
<if test="userId != null">
AND userId = #{userId}
</if>
ORDER BY
userId DESC
</select>
  • 抛出异常
org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'userId' in 'class java.lang.Long'

对于这类单个入参然后用if判断的,mybatis有自己的内置对象。如果你在if判断里面写的是你的入参的对象名,那么就会抛出上述的异常。

三、mybatis的查询数据包含上送的数据字段

  这里面注意几点:一、parameterType的类型可以为缩写的形式map;二、SELECT中可以有#{ActivityType} AS ActivityType的写法;三、LEFT JOIN前端的FROM里面的数据需要括号。

<select id="getOtherActivity" parameterType="map" resultType="map">
SELECT
a.ActivitySeq,
a.ActivityName,
a.ActivityDes,
a.ActivityBeginDate,
a.ActivityEndDate,
a.ActivityStatus,
b.ActivityChannel,
c.ToolName,
c.ToolType,
c.ToolDesc,
#{ActivityType} AS ActivityType
FROM
(A_ACTIVITY a, A_ACTIVITY_CHANNEL b, T_TOOL c)
LEFT JOIN
<choose>
<when test="ActivityType != null and ActivityType == 2">
A_CONVERT d
</when>
<when test="ActivityType != null and ActivityType == 3">
A_DISTRIBUTION d
</when>
<when test="ActivityType != null and ActivityType == 6">
A_MISSION d
</when>
</choose>
ON
d.ActivitySeq = a.ActivitySeq AND
d.ToolSeq = c.ToolSeq
WHERE
a.ActivitySeq = b.ActivitySeq
<if test="ActivityNo != null">
AND a.ActivitySeq = #{ActivityNo}
</if>
ORDER BY
a.ActivitySeq DESC
</select>

四、mybatis的批量插入传递额外的数据

我们的需求是在批量插入的时候,有些数据是一定的,不需要在遍历的列表里面。

public String batchInsertMap() {
Map<String, Object> parmMap = new HashMap<>();
parmMap.put("personId", "1");
List<Map<String, String>> list = new ArrayList<>();
for (int i = 0; i < 3; i ++) {
Map<String, String> map = new HashMap<>();
map.put("content", "comment " + i);
list.add(map);
}
parmMap.put("list", list);
// 批量插入数据
int rowCounts = this.sqlSession.insert("user.insertBatchComments", parmMap);
return rowCounts + "";
}

mybatis的sql语句如下:

<insert id="insertBatchComments" parameterType="map">
INSERT INTO comment
(person_id, content)
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(
#{personId},
#{item.content}
)
</foreach>
</insert>

友情链接

java框架---->mybatis的使用(一)的更多相关文章

  1. java框架-Mybatis

    一.Mybatis介绍 mybatis是一个持久层的框架,是对JDBC操作数据库的封装,使开发者只需要关注业务本身,不需要花费精力去处理加载驱动.创建数据库连接对象.创建statement语句对象.参 ...

  2. Java框架-MyBatis三剑客之MyBatis Generator(mybatis-generator MBG插件)详解

    生成器设计思路: 连接数据库 -> 获取表结构 -> 生成文件 1 下载与安装 官网文档入口 最方便的 maven 插件使用方式 贴至pom 文件 2 新建配置文件 填充配置信息(官网示例 ...

  3. 详解Java的MyBatis框架中SQL语句映射部分的编写

    这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML 文件 ...

  4. 【JAVA框架】Hibernate 与Mybatis 区别

    Hibernate Mybatis 简介 区别 与联系 欢迎提出见解及转载. 1 简单简介     1.1    Hibernate 框架          Hibernate是一个开放源代码的对象关 ...

  5. 转 分享我在阿里工作十年接触过Java框架设计模式

    转 原文: 分享我在阿里工作十年接触过Java框架设计模式 一.前言 说起来设计模式,大家应该都耳熟能详,设计模式代表了软件设计的最佳实践,是经过不断总结提炼出来的代码设计经验的分类总结,这些模式或者 ...

  6. 杂项-Java:MyBatis

    ylbtech-杂项-Java:MyBatis 1.返回顶部 1. MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundatio ...

  7. Java自学路线图之Java框架自学

    Java自学路线图的框架分为两个阶段,第一阶段的Java框架包含六个内容:MyBatis,Spring,SpringMVC,Maven高级,Git,Dubbo. 在Java自学过程中掌握框架的使用,对 ...

  8. 程序员必须掌握的Java 框架,小白学会之后15k不是问题

    Spring 的核心特性是什么?Spring 优点? Spring 的核心是控制反转(IoC)和面向切面(AOP) Spring 优点: 程序员必须掌握的Java 框架,学会之后50k不是问题 (1) ...

  9. 一个C#开发编写Java框架的心路历程

    前言 这一篇絮絮叨叨,逻辑不太清晰的编写Java框架的的一个过程,主要描述我作为一个java初学者,在编写Java框架时的一些心得感悟. 因为我是C#的开发者,所以,在编写Java框架时,或多或少会带 ...

随机推荐

  1. Keystone-manage 命令

    本文介绍Icehouse发行版的keystone-manage命令 keystone-manage是用来同keystone服务进行交互的命令行工具,通常该命令只用于不能通过HTTP API完成的操作, ...

  2. word文档加密破解方法,实测有效

    其他方法也可以,如下: http://www.360doc.com/content/13/1227/10/8726682_340474327.shtml

  3. oracle 11g RAC 在Windows 7下安装

    oracle 11g RAC 在Windows 7下安装 完全要参考RAC11gR2OnWindows.pdf 难点总是在Grid Infrastructure 而安装Grid Infrastruct ...

  4. OpenGL 遮挡查询

    原文地址:http://www.linuxidc.com/Linux/2015-02/114036.htm 在一个场景中,如果有有些物体被其他物体遮住了不可见.那么我们就不需要绘制它.在复杂的场景中, ...

  5. 转 linux 权限

    发布系统架构图简化如下: 管理员通过Jenkins调用“发布程序(代号varian,以下简称varian)”,发布程序会进行一系列的初始化操作,完成后生成Docker镜像上传到Docker仓库,容器集 ...

  6. java 坑

    时间戳 unix的时间戳和java中的是不同的.unix为10位,java的13位.需要进行转换. long timestamps = 1509783992L; long javaTimstamps ...

  7. Java读写配置文件——Properties类的简要使用笔记

    任何编程语言都有自己的读写配置文件的方法和格式,Java也不例外. 在Java编程语言中读写资源文件最重要的类是Properties,功能大致如下: 1. 读写Properties文件 2. 读写XM ...

  8. UNIX环境编程学习笔记(26)——多线程编程(一):创建和终止线程

    lienhua342014-11-08 在进程控制三部曲中我们学习了进程的创建.终止以及获取终止状态等的进程控制原语.线程的控制与进程的控制有相似之处,在表 1中我们列出了进程和线程相对应的控制原语. ...

  9. Dos命令大全(1)

    MS DOS 命令大全 一.基础命令 1 dir 无参数:查看当前所在目录的文件和文件夹. /s:查看当前目录已经其所有子目录的文件和文件夹. /a:查看包括隐含文件的所有文件. /ah:只显示出隐含 ...

  10. 7 切片slice

    include 切片 切片的日常用法 切片slice 其本身并不是数组,它指向底层的数组 作为变长数组的替代方案,可以关联底层数组的局部或者 为引用类型. 可以直接创建或从底层数组获取生成. 使用le ...