java框架---->mybatis的使用(一)
这里我们记录一些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的使用(一)的更多相关文章
- java框架-Mybatis
一.Mybatis介绍 mybatis是一个持久层的框架,是对JDBC操作数据库的封装,使开发者只需要关注业务本身,不需要花费精力去处理加载驱动.创建数据库连接对象.创建statement语句对象.参 ...
- Java框架-MyBatis三剑客之MyBatis Generator(mybatis-generator MBG插件)详解
生成器设计思路: 连接数据库 -> 获取表结构 -> 生成文件 1 下载与安装 官网文档入口 最方便的 maven 插件使用方式 贴至pom 文件 2 新建配置文件 填充配置信息(官网示例 ...
- 详解Java的MyBatis框架中SQL语句映射部分的编写
这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML 文件 ...
- 【JAVA框架】Hibernate 与Mybatis 区别
Hibernate Mybatis 简介 区别 与联系 欢迎提出见解及转载. 1 简单简介 1.1 Hibernate 框架 Hibernate是一个开放源代码的对象关 ...
- 转 分享我在阿里工作十年接触过Java框架设计模式
转 原文: 分享我在阿里工作十年接触过Java框架设计模式 一.前言 说起来设计模式,大家应该都耳熟能详,设计模式代表了软件设计的最佳实践,是经过不断总结提炼出来的代码设计经验的分类总结,这些模式或者 ...
- 杂项-Java:MyBatis
ylbtech-杂项-Java:MyBatis 1.返回顶部 1. MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundatio ...
- Java自学路线图之Java框架自学
Java自学路线图的框架分为两个阶段,第一阶段的Java框架包含六个内容:MyBatis,Spring,SpringMVC,Maven高级,Git,Dubbo. 在Java自学过程中掌握框架的使用,对 ...
- 程序员必须掌握的Java 框架,小白学会之后15k不是问题
Spring 的核心特性是什么?Spring 优点? Spring 的核心是控制反转(IoC)和面向切面(AOP) Spring 优点: 程序员必须掌握的Java 框架,学会之后50k不是问题 (1) ...
- 一个C#开发编写Java框架的心路历程
前言 这一篇絮絮叨叨,逻辑不太清晰的编写Java框架的的一个过程,主要描述我作为一个java初学者,在编写Java框架时的一些心得感悟. 因为我是C#的开发者,所以,在编写Java框架时,或多或少会带 ...
随机推荐
- Retrofit/OkHttp API接口加固技术实践(下)
作者/Tamic http://blog.csdn.net/sk719887916/article/details/65448628 imageMogr2/auto-orient/strip%7Cim ...
- Linux目录和文件管理
今天我们来介绍一下对于Linux系统“命令“的理解和分类以及常用的目录文件管理命令的使用. 一. 命令 用于实现某一类功能的指令或程序,命令的执行依赖于解释器程序(例如:/bin/bash) 分类 内 ...
- winform 用户控件事件的写法
public partial class UcTest : UserControl { public UcTest() { InitializeComponent(); } //定义事件 public ...
- docker默认ip查询
查询docker ip地址 docker-machine ip default
- 移动端控制在input里输入的值只能是数字
<input type='text' oninput="(this.v=function(){this.value=this.value.replace(/[^0-9-]+/,''); ...
- 【WP8】为Webbrowser添加ScrollBar
在WP8中,控件WebBrowser没有提供对滚动条的支持,而在内置的IE中,却可以显示出滚动条(微软这是在坑我们吗),但如果在客户端使用Webbrowser的话,自己构造ScrollBar来显示 通 ...
- 自建Nuger Server拾遗
企业内部的包需要通过nuget来管理发布,或者一些不允许上外网的企业,通过自己的nuget服务器来使用nuget,都会考虑到自建一个nuget服务器.本文整理了一些有用的链接和使用心得,以备不时之需. ...
- Nine-patch
http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch This NinePatch defi ...
- Aspose------导出Excel
代码: /// <summary> /// 导出Excel /// </summary> /// <typeparam name="T">泛型类 ...
- JAVA自定义注解 和 运行时靠 反射获取注解,解决 shiro 注解型权限因子获取问题
项目的权限分配,采用的是RBAC的设计模式.后台配置权限的时候,需要获取到所有的权限因子. 不经让我想起YII框架的SRBAC模块,还有以前的一个ecshop改造系统的权限配置方式,都采用的是PHP的 ...