MyBatis归纳
SqlSessionTemplate详解
SqlSessionTemplate类是MyBatis-Spring的核心。这个类负责管理MyBatis的SqlSession,调用MyBatis的SQL方法,翻译异常。
SqlSessionTemplate类实现了SqlSession接口,它管理session的生命周期,包含必要的关闭,提交或回滚操作。
特别注意,SqlSessionTemplate类是线程安全的,可以被多个Dao所共享使用,而SqlSession是线程不安全的,不能被共享。因此SqlSession不能被设置成全局变量,自然也就不能被注入了(如果设为全局变量,那么相同应用程序中两个类之间的转换可能会引起数据一致性的问题。)
Junit4与Spring配合使用
使用以下两个注解:
@RunWith(SpringJUnit4ClassRunner.class)
更改测试运行器,让测试运行于Spring测试环境;(其实就是加载Spring配置文件,创建上下文)
@ContextConfiguration(locations={"classpath:com/hyq/spring.xml"})
用于指定要加载的spring配置文件的地址
如图所示:

通过以上两个注解,我们就无需手动加载spring配置文件以获取上下文了。
sql注入及解决方法
sql注入就是指用户输入的sql参数中包含单引号,使得原本的sql语句加上该参数组成了新的sql语句。
比如原来的sql语句是以下这一句:
select * from tbl_user2 where username like '%'+?+'%';
而用户输入'or',导致sql语句变成如下情况:
select * from tbl_user2 where username like '%' or '%';
解决办法:
字符串数据是用单引号包在外面的,如果插入的数据中包含单引号,就需要处理,你可以将单引号替换成两个单引号,在sql中连续两个单引号就表示一个单引号字符,例如
insert into yourTable(f1,f2) values(100,'ab''c')表示插入新记录f2字段为ab'c
使用函数replace可以实现这个功能:replace(yourStr,"'","''")
resultMap相关特性
1、如果用了association,那么从数据库中查询出来的字段全部都得设置映射,否则不会赋值;
如果没用association,那么与输出映射中的属性相同的字段会被自动映射,无需手动设置。
2、除了association关联的对象,如果其他属性与前一个查询出来的对象全都相同,那么就会被认为是同一个对象,那么查询出来的对象只会有1个。


如图所示,从数据库中查询出来的数据会有五条,所用的note都为"speed",由于我只配置了一个note映射,
所以实用resultMap查询出来的对象只有一个,这个对象是最后查询出来的那个,他把前面的都覆盖了。
3、resultMap中的id和result标签没什么区别;
动态SQL查询

使用SQL片段


foreach用法

foreach中的open中如果写了and并且是where后的第一个,where语句不会自动把and去掉,所以我们需要在if语句中写上and。
主键返回策略

last_insert_id()可以返回上一个添加数据的主键值;
UUID()可以生成一个字符串,以其作为主键;
别名定义

mapper映射文件加载方式

延迟加载



使用属性文件配置数据源


查询


一对多查询


extends代表继承其它resultMap
多对多查询


逆向工程

再附加一个逆向工程配置文件即可
常用函数
selectOne(“名称空间+方法名”,参数)
下同:
selectList()
insert()
delete()
update()
getMapper(UserMapper.class)
代码规范
将会话工厂配置为全局变量;
由于SqlSession是线程不安全的,所以要将其定义在方法体内,成为局部变量。
注意:
1、#{}是一个占位符,程序会自动转为字符串;
${},用于拼接sql语句,将接收到的输入参数不加任何修饰符拼接在sql中;但是使用${}拼接sql,可能会引起sql注入;
如果传入的参数是简单类型,那么${}中就只能使用value,即${value};
2、其实mapper映射文件与接口相配合时,mapper映射文件中的输入类型不写或写错了类型(但是这个类型在java中要找得到)都没事;
3、当传入的参数是map集合时,那么它的键可以直接当作属性使用;

MyBatis操作流程
获取session对象

MyBatis和Spring整合
1、在spring中配置数据源;
2、配置会话工厂,

3、整合mapper,无需用session去获取mapper接口,spring会自动创建,默认创建后的mapper的id名称为类名首字母小写,


突然发现sqlSessionFactoryBeanName不用配置也行
MyBatis归纳的更多相关文章
- MyBatis动态sql语句归纳
1.删除数据(假删除)并修改时间 <!--根据id删除学生信息(多条)--> <update id="updateStuStatus" parameterType ...
- MyBatis与Spring整合
1.单独使用MyBatis 单独使用MyBatis,不结合其他框架,主要步骤是: 1.创建SqlSessionFactory对象 创建方法是通过SqlSessionFactoryBuilder这个类从 ...
- mybatis笔记2 基础理论准备
之前发了一篇mybatis的crud入门笔记,算是入门了,为了让功力加深一级,来研究下mybatis的理论知识,哈哈,以后好拿来跟技术经理吹吹牛- 按照问题来吧!个人觉得有自主意识,带着自己的问题来研 ...
- MyBatis极速入门开发手册(2017-2-6更新)
前言: 本篇文章对我的学习内容做一个归纳梳理,同时也记录一些学习过程中遇上的问题及注意事项等等,可以帮助新入门的朋友们消除一些误区与盲区,希望能帮上一些正在学习的朋友们.在编写时会引用一些mybati ...
- Spring mybatis源码学习指引目录
前言: 分析了很多方面的mybatis的源码以及与spring结合的源码,但是难免出现错综的现象,为了使源码陶冶更为有序化.清晰化,特作此随笔归纳下分析过的内容.博主也为mybatis官方提供过pul ...
- Spring + Mybatis 集成原理分析
由于我之前是写在wizNote上的,迁移过来比较浪费时间,所以,这里我直接贴个图片,PDF文件我上传到百度云盘了,需要的可直接下载. 地址:https://pan.baidu.com/s/12ZJmw ...
- 日常报错记录2: MyBatis:DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.------------ Cause: java.lang.NoSuchMethodException: com.offcn.dao.ShopDao.<init>()
直接上干货: 报错归纳1: DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4 ...
- 使用ThreadLocal管理Mybatis中SqlSession对象
转自http://blog.csdn.net/qq_29227939/article/details/52029065 public class MybatisUtil { private stati ...
- spring-data-jpa与mybatis的对比
Spring Data JPA 与 MyBatis对比 Spring Data JPA是Spring Data的子模块.使用Spring Data,使得基于“repositories”概念的JPA实现 ...
随机推荐
- HDU - 5001 Walk(概率dp+记忆化搜索)
Walk I used to think I could be anything, but now I know that I couldn't do anything. So I started t ...
- HDU - 1176 免费馅饼 DP多种状态转移
免费馅饼 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内.馅饼如果掉在了 ...
- Sharepoint2013搜索学习笔记之设置sharepoint网站内容源(五)
第一步,进入管理中心,点击管理应用程序,点击search service 应用程序进入到搜索管理配置页面,点击内容源 第二步,点击新建内容源,给内容源命名,在爬网内容类型中选sharepoint网站, ...
- Coreseek 安装问题
Ubuntu下安装coreseek mmseg出现了cannot find input file: src/Makefile.in 解决方法如下 >autoheader >automake ...
- 平衡的阵容 st表学习
模板 预处理 void rmq_isit() { ;i<=n;i++) mx[i][]=mn[i][]=a[i]; ;(<<j)<=n;j++) ;i+(<<j)- ...
- uoj#280. 【UTR #2】题目难度提升(构造)
传送门 咱先膜一下\(GXZ\)再说 我们先把序列从小到大排序,然后分情况讨论 无解是不存在的,从小到大输出所有数肯定可行 情况一,如果\(a[mid]=a[mid+1]\),因为最终的中位数也是它们 ...
- video,audio用法小例子
用此小程序设计播放/暂停,放大缩小 <!DOCTYPE html> <html> <body> <div style="text-align:cen ...
- 【实验吧】该题不简单——writeup
题目地址:http://ctf5.shiyanbar.com/crack/3/ 一定要注意读题: 要求找出用户名为hello的注册码,这八成就是 要写注册机啊! ——————————————————— ...
- Exception inside CORBA when accessing a remote bean
http://stackoverflow.com/questions/23291520/exception-inside-corba-when-accessing-a-remote-bean
- [Java]LinkedHashMap实现原理
1.概述 在理解了#7 介绍的HashMap后,我们来学习LinkedHashMap的工作原理及实现.首先还是类似的,我们写一个简单的LinkedHashMap的程序: LinkedHashMap&l ...