文档章节

mybits

lf20101072
 lf20101072
发布于 2017/04/26 19:42
字数 1333
阅读 46
收藏 0

 

ibatis是mybatis的前身

入门实例

需求: 按照id查询user表的一条数据

 

1. 引入jar包

增加log4j的配置
让SQL现实出来

1. 新增mybatis的全局配置文件

新增一个实体类, 映射文件UserMapper.xml

修改全局配置文件

 

代码测试

根据name去模糊查询

1.1 #{}和${}的区别

#{}是作为参数是绑定用的, 最终的SQL里面会转化成?的形式

优点: 安全性比较高

缺点: 有涉及到SQL语法的问题的时候不能用

 

${}是直接拼接SQL

优点: 灵活, 有涉及到SQL语法的问题的时候, 必须用${}

缺点: 安全性低, SQL注入

 

添加用户

需求  --> 1. 写statement(SQL)  --> 2. 通过sqlsession调用statement

 

 

 

 

1.1 类型别名

com.kaikeba.entity.User  -->  user

 

别名是不区分大小写的

mybatis中是包含了很多内置的别名

http://www.mybatis.org/mybatis-3/zh/configuration.html#typeAliases

 

1.1 返回新增数据的id

主要用于主键是自增的情况

1.1.1 方法一(推荐)

 

1.1.1 方法二

MySQL的一个内置函数

last_insert_id()

sqlsession:

selectOne(statement-id, param)

selectList

insert

 

参数的绑定:

SQL中有几个参数

什么时候用简单类型?

用于只有一个参数的情况

 

如果有多个参数的情况?

用对象

属性名 --- 参数名

用Map

key -- 参数名

 

用户的删除和更新

 

 

mapper接口代理的方式开发dao层

开发规范:

1. 在xxMapper.xml中namespace等于接口的全限定名

2. mapper接口中的方法名和xxMapper.xml中statement的id保持一致

3. mapper接口中的方法参数类型必须xxMapper.xml中statement的parameterType一致

4. mapper接口中的方法返回值类型必须xxMapper.xml中statement的resultType一致

 

 

 

 

作用:

1. 解决了使用statement-id带来的硬编码的问题, 只有在运行时才会发现错误

2. 解决了参数不能限定类型的问题

3. 解决了返回值不能限定类型的问题

 

常用错误:

1. 当你的接口所对应的namespace找不到的时候
org.apache.ibatis.binding.BindingException: Type interface com.kaikeba.dao.UserMapper is not known to the MapperRegistry.

a) mapper.xml没有配置到全局文件中

b) namespace没有按照规范来

 

 

结论:

如果返回值是单个对象, 那么mybatis内部会调用sqlsession的selectOne, 这个时候查询结果必须是<=1条

如果返回值是集合, 那么mybatis内部会调用sqlsession的selectList

 

字段名和属性名不一致的情况

1.1 给字段取个别名

 

动态SQL

图书的高级搜索

按照书名, 作者, 出版社 去搜索图书

 

动态标签select, update, delete, insert标签的里面, 作为子标签

1.1 if标签

 

1. 条件表达式中的变量和SQL语句中的变量名是一个意思, 区别是不需要增加#{}

2. &&和||, 在表达式中用and和or去代替

3. 字符串的表示方式用的是单引号

4. 字符串的比较不建议用equals(可以用, 但是麻烦), 用的是==和!=

动态SQL

if, where, foreach

1.1 if标签

1.2 where标签

1. 在条件中如果where后面有多余的and, 可以自动去除这个and, 不需要编写where 1=1

2. 在SQL中没有查询条件的话, 会自动去除where关键字

 

 

1.1 foreach标签

需求: 根据多个bid获取book列表

select * from t_book where bid in(?,?,?.....)

 

方法参数有多个的情况

mybatis是不会自动识别方法中参数的名字, 只能通过@Param去指定参数的名字

 

sql片段的参数的绑定是取决于具体引用于哪个statement的参数

本身sql片段是不支持参数的绑定的, 只是一个sql的拼接

 

参数绑定的总结:

1. 单个参数

a) 没有使用@Param给参数取名字

i. 简单类型
参数名字可以是任意的

ii. 对象
参数名字对象中属性的名字

b) 使用@Param给参数取名字(如:param)

i. 简单类型
参数名字param( 固定的 )

ii. 对象
在前面有param.去增加一个前缀, 加上对象中属性的名字

2. 多个参数

a) 必须使用@Param给参数取名字(如:param)

i. 简单类型
参数名字param( 固定的 )

ii. 对象
在前面有param.去增加一个前缀, 加上对象中属性的名字

 

高级映射

给对象中的关联对象赋值用的

这两个标签都是ResultMap的子标签

1.1 association

如果用了高级映射, 那么属性名和字段名不会默认一一映射, 只会对手动配置了result标签的属性进行映射

 

spring和mybatis整合

 

 

 

 

 

 

 

常用异常:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

1. 接口和映射文件是不是在同一个包路径下面

2. 接口的名称和映射文件的名称是否一致

 

一sqlmapconfig.xml
configuration
1.别名
typealiases
       packagename ="com.kaikeba.entity"/>
 typealiases
 
2.数据源的配置会在spring 之后去掉
   
3.配置映射文件的路径
mapper
configuration

二 sqlmap.xml
select  delete update insert
namespace  就是 对应 dao 的地址
#{}标识一个参数的占位符
 #{id}:其中的id表示接受输入的参数的名称是id, 如果参数是简单类型(int,String..), 参数名可以任意取
 
三dao
public interface UserMapper{

   User  getUserById(int id);
}

entity

 

 

 

 

© 著作权归作者所有

上一篇: sql 查询
下一篇: springMVC
lf20101072
粉丝 0
博文 116
码字总数 18583
作品 0
孝感
私信 提问
Java 怎么实现一个封号功能

用Spring + mybits 怎么实现封禁一个账号的功能

小菜鸟报道
2015/08/27
780
5
spring,springmvc有什么区别

想搭建一个项目,打算使用SSM,但是在网上一查发现,不在是spring,struts,mybits,而是spring,spring mvc,mybits, 自己就想尝试搭建一下,但是刚开遇到个问题,spring和springmvc的jar包是一样...

幼龙
2017/04/15
737
7
orcal mybits 批处理插入新数据

我用的是orcal10g ,mybits连接 我用的是for循环一条一条的插入的,现要求改成批处理操作, 以前没有用过,现请求各位大侠们指导

java_edu
2012/07/06
887
2
SpringBoot入门-整合H2测试Mybits DAO

声明:原创文章,转载请注明出处。http://www.jianshu.com/p/43ade838dcc0 本文代码地址:https://github.com/hawkingfoo/java-web 一、概述 上一节中,我们分享了SpringBoot快速整合Mybits的...

唐影若凡
2018/07/04
0
0
mybits联表查询

有时查询时需要查其他表中的内容,需要用到连表查询。 首先需要在mapper.xml中建一个resultMap,加入需要查询的字段(包括其他表中的): <resultMap id="ticketGiveAndStoreInfo" type="com...

ty淡然
2018/01/26
67
0

没有更多内容

加载失败,请刷新页面

加载更多

用VideoView播放视频出现Can't play this video原因

见鬼了,两个工程一个能播放,一个不能播放,代码都一样,最后发现 android:usesCleartextTraffic="true" 增加这句话就可以播放了

Domineering
18分钟前
1
0
Linux JDK 安装与配置

一、下载 JDK 官网链接:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 系统是 CentOS 7 X64的,进入系统选择相应的安装包下载,这里下载压缩包。...

HuaiAnGG
20分钟前
1
0
面试复盘

shared_ptr 和 weak_ptr 的区别. 一个有向图有几个圈, 计数。 A,B 胜的概率分别为 1/2, 1/2; A胜两局赢,B胜3局赢, 最少几局可定胜负, A 胜的概率,B胜的概率. 他们采用的是时序ARMA 图论...

MtrS
21分钟前
3
0
什么样的人要学点python编程?请你对号入座

什么样的人需要学点python编程? 时代越来越不一样了,编程这种专业程序员的工作,已经开始应用于各种其他日常工作中,就以前象征着互联网的电脑,现在早已进入普通人家。 那么什么样的人需要...

这人就爱编程
33分钟前
4
0
哪吒之魔童降世的背景音乐怎么提取 视频中提取音频的方法

随着国漫的不断崛起一大批优质的动漫正向我们袭来,从大鱼海棠到大圣归来再到我们现在的哪吒让我们看到国漫质的飞跃,也让我们对国漫充满信心,前段时间哪吒之魔童降世以国产第二的票房下线到...

cenfeng123
36分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部