这里我们记录一些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. e620. Activating a Keystroke When Any Component in the Window Has Focus

    Normally, a keystroke registered to a component is activated when the component has the focus. This ...

  2. Linux账号和权限管理

    一. 用户和组的管理  - Linux中用户种类 种类 特点 root 是管理员,拥有至高无上的权限,不受限制,UID为0 普通用户 管理员创建的用户,受权限限制,UID一般从500开始,可以登录系统 ...

  3. Castle.Windsor依赖注入的高级应用_Castle.Windsor.3.1.0

    [转]Castle.Windsor依赖注入的高级应用_Castle.Windsor.3.1.0 1. 使用代码方式进行组件注册[依赖服务类] using System; using System.Co ...

  4. 《经久不衰的Spring框架:@ResponseBody 中文乱码》(转)

    转载自:http://www.cnblogs.com/shanrengo/p/6429291.html 问题背景 本文并不是介绍@ResponseBody注解,也不是中文乱码问题的大汇总笔记,这些网上 ...

  5. MD5 哈希等各种加密方式 都是对这个对象进行各种运算, 然后得出1个字符串

    你列出的4个  都是对对象的 加密算法

  6. mysql 找不到或无法加载已注册的 .Net Framework Data Provider和Unable to find the requested .Net Framework Data Provider. It may not be installed解决

    需要安装 mysql-connector-net-6.7.4.msi 在C盘安装mysql的位置找到三个DLL,复制到Bin文件夹下 在Web.config文件中添加对应配置: <system. ...

  7. 通过expect免自动输入密码登陆远程服务器

    通过expect免自动输入密码登陆远程服务器 1.前提必须已经安装expect 2.新建login.sh,文件内容如下 #!/usr/bin/expect -f spawn ssh root@140. ...

  8. 制作做最小的fedora、ubuntu , jeos系统

    之前做过, 2018年4月底,最新的fedora28 .ubuntu18.04发布后,自己又尝试做了下. ubuntu的成功了,比较简单: fedora的其实不用自己去制作,直接定制官方的Atomic ...

  9. web.py开发

    web.py需要使用python2.X,所以安装python版本2.7.9 web.py 是一个轻量级Python web框架,它简单而且功能强大 web.py安装 安装python (1)使用pip ...

  10. 妙味远程课堂-JS属性

    html由属性名和属性值组成 属性读操作:获取.找到 元素.innerHtml//读取元素内的html内容 元素.属性名 案例1:点击按钮弹出文本框的内容(value值) <!DOCTYPE h ...