文档章节

mybatis开发记录

bithup
 bithup
发布于 2017/04/10 15:24
字数 650
阅读 38
收藏 0

问:插入一条记录后如何返回主键id?

id设为主键自增,加入<selectKey>标签,如下。

<insert id="insert" parameterType="entity.Order">
	<selectKey keyProperty="id" resultType="long" order="AFTER">
		SELECT max(id)  AS value  from tb_order
	</selectKey>
	INSERT INTO tb_order
	(id,member_id,order_no)
	VALUES
	(#{id},#{memberId},#{orderNo})
	</insert>

令insert语句返回值为主键id,加上keyProperty和useGeneratedKeys属性。

<!--此处keyProperty="id"中的id是Java实体类中的属性名-->
<insert id="insert" parameterType="entity.Order" useGeneratedKeys="true" keyProperty="id">
	INSERT INTO tb_order
	(id,member_id,order_no)
	VALUES
	(#{id},#{memberId},#{orderNo})
</insert>

通过配置可以使插入记录成功后自动将生成的主键封装到实体类中。

 

数据库中为某个浮点数字段设置默认值0.00,使用mybatis添加一条数据该字段并不是默认值,而是null。

mybatis中的增改的SQL中的字段不应该随意写,数据库默认值会被覆盖。

 

记一次开发中的问题:在使用mybatis插入一条记录时,要让一个字段初始的值为null,对应实体类中的属性是int类型,数据库默认值是null,但是新插入的记录该字段的值始终是0

解决的办法是将实体类中该字段的类型改为int的包装类型,int类型是无法用null赋值的,

所以如果数据库中的字段允许为空,对应实体类属性就要用包装类

 

问:#{} 和${}传参的区别

#{}:将参数传到数据库再替换
${}:在编译的时候替换,容易被SQL注入,要检查字符串参数是否合法

limit  ${page*(page-1)},${pageSize}

${page*(page-1)}:参数使用表达式时,必须使用${},#{page*(page-1)}是不对的
,而且page必须是数值类型,不能是String类型

 

问:

mybatis中一条查询语句的resultType设为hashmap

但是对应的接口方法的返回类型是实体类的List集合 List<Recommend>

如下调用该方法

List<Recommend> dataList = recommendDao.getRecommendList(map);

编译和运行都没有出错,但是调试时dataList的实际类型是List<HashMap>

不报错的原因是,List<Recommend>和List<HashMap>都是List

如果想遍历dataList,遍历的类型无论使用Recommend类型和HashMap类型都会报错

System.out.println(dataList instanceof List);// 提示表达式总是true
System.out.println(dataList instanceof ArrayList);//输出true

此问题说明,1:ArrayList类型对象的引用可以指向泛型不同的ArrayList对象

2:mybatis默认返回ArrayList类型的List集合

© 著作权归作者所有

bithup
粉丝 8
博文 101
码字总数 82172
作品 0
朝阳
程序员
私信 提问
Mybatis入门程序,根据id查询用户

1. 创建数据库(在源代码中给出) sqltable.sql:记录表结构 sqldata.sql:记录测试数据,在实际企业开发中,最后提供一个初始化数据脚本 数据库 JDBC传统程序问题总结 2. Mybatis框架 myba...

小小蒜头
2017/11/23
0
0
Mybatis 入门案例 2 ---- mapper 代理的方式

我们只需要编写DAO接口和mapper.xml文件即可,DAO接口实现对象由mybatis自动生成代理对象。 如: 一、为什么不使用原始的DAO方式开发呢? 1、dao的实现类中存在重复代码,整个mybatis操作的过...

故新
2017/11/07
0
0
MyBatis 实践 -Mapper与DAO

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hanqing280441589/article/details/50760236 标签: Java与存储 MyBatis简介 MyBatis前身是iBatis,是一个基于...

菜鸟-翡青
2016/02/28
0
0
浅析Mybatis与Hibernate的区别与用途

有很长一段时间对mybatis是比较陌生的,只知道与Hibernate一样是个orm数据库框架。随着使用熟练度的增加,发现它与Hibernate区别是非常大的,应当结合不同的情况分析选用。结合至今为止的经验...

小欣妹妹
2017/10/26
74
0
Hibernate 与mybatis的区别

首先简单介绍下两者的概念: Hibernate :Hibernate 是当前最流行的ORM框架,对数据库结构提供了较为完整的封装。 Mybatis:Mybatis同样也是非常流行的ORM框架,主要着力点在于POJO 与SQL之间...

爪哇程序猿
2015/09/23
351
1

没有更多内容

加载失败,请刷新页面

加载更多

视频如何加水印?

很多视频制作者的视频都被他人盗用过,为了防止自己的劳动成果被他人窃取,给视频加水印对于视频制作者来说,是一件非常重要的事情。那么下面分享一个手机给视频加水印的方法,一起来看看吧!...

白米稀饭2019
24分钟前
5
0
004-Envelop-基于Blockstack的文件传输dapp

本篇文章主要介绍基于Blockstack的文件传输工具; ####A-链接地址 官网地址:https://envelop.app/ Github地址:https://github.com/envelop-app ####B-特性: 1: Share private files easil...

Riverzhou
27分钟前
6
0
SpringCloud——声明式调用Feign

Feign声明式调用 一、Feign简介 使用Ribbon和RestTemplate消费服务的时候,有一个最麻烦的点在于,每次都要拼接URL,组织参数,所以有了Feign声明式调用,Feign的首要目标是将Java HTTP客户端...

devils_os
33分钟前
7
0
《JAVA核心知识》学习笔记 (22. 数据结构)

22.1.1. 栈(stack) 栈( stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶 (top)。它是后进先出(LIFO)的。对栈的基本操作只有 push(进栈)和 pop(出栈...

Shingfi
38分钟前
6
0
你对AJAX认知有多少(1)?

AJAX(一) AJAX技术对于前段或者后端工程师来说,都是必不可缺的 那我们这几期都来细细品味一下AJAX的相关知识,直接上干货喽~ 1、什么是AJAX,为什么要使用Ajax(请谈一下你对Ajax的认识) 什么...

理性思考
46分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部