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框架时,或多或少会带 ...
随机推荐
- Unity-------------------------关于GUI绘制的编程
转载:在这篇文章中我将给读者介绍Unity中的图形用户界面(GUI)编程.Unity有一个非常强大的GUI脚本API.它允许你使用脚本快速创建简单的菜单和GUI. 简介 Unity提供了使用脚本创建G ...
- android http json请求3种不同写法
第一种: public static String invoke() { String result = null; try { final Str ...
- springmvc接口ios网络请求
springmvc: application/json;charset=utf-8的ios网络请求: 后台使用 @RequestBody注解参数接收:
- [Learn AF3]第二章 App Framework 3.0的组件View——AF3的驱动引擎
View:af3中的驱动引擎 组件名称:View 使用说明:按照官方的说法,view组件是af3的“驱动引擎(driving force)”,view是af3应用的基础,一个app中可以包 ...
- UNIX环境编程学习笔记(24)——信号处理进阶学习之信号集和进程信号屏蔽字
lienhua342014-11-03 1 信号传递过程 信号源为目标进程产生了一个信号,然后由内核来决定是否要将该信号传递给目标进程.从信号产生到传递给目标进程的流程图如图 1 所示, 图 1: 信 ...
- 【DeepLearning】汉字手写体识别
http://blog.topspeedsnail.com/archives/10897 两个双卷积池化 + dropout + 2个全链接 + softmax
- 6 Django系列之关于models的sql语句日常用法总结
preface Django提供了强大的ORM,我们可以通过ORM快速的写出我们想要对数据做什么样操作的代码.下面就说说我在日常工作中的用法: 外键关联精确查询 应用场景:表A host字段关联到了表 ...
- 常用的网络上的Webservice接口
商业和贸易: 1.股票行情数据 WEB 服务(支持香港.深圳.上海基金.债券和股票:支持多股票同时查询) Endpoint: http://webservice.webxml.com.cn/WebSe ...
- Python之XML解析详解
什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这 ...
- 判断一个字符串同时出现几个字符的C#版本和JS版本
C#版本,参考:http://www.cnblogs.com/dudu/p/3841256.html JS版本是我群友写的: var str="abcdef"; var arr=[ ...