Mybatis容易遇到的问题
1.MyBatis中#和$的区别?
1.使用#的原理是?占位符,而$的原理为直接字符串拼接方式
2.$方式一般使用在写数据库中的固定字段时候才会使用例如表名或者列名(select * from user order by xxx)这个中的xxx可以使用$
3.#可以防止注入,$不能防止sql注入
4.一般情况下能使用#就不适用$.
2.MyBatis的编程步骤是什么样的?
1.创建SqlSessionFactory
2.通过sqlSessionFactory创建SqlSession
3.通过sqlSession执行数据库操作.
4.调用session.commit()提交事务
5.调用sessioin.close()关闭会话
3.JDBC编程有那些不足之处,NyBatis是如何解决的?
1.数据库的创建,释放频繁造成系统资源浪费从而影响性能,如果使用数据库连接池可解决此问题.
解决:在Sqlmapconfig.xml中配置数据连接池,使用连接池管理数据库连接
2.sql语句写在代码中造成代码不易维护,实际用sql变化大,sql变动需要改变java代码
解决:将sql语句配置在xxxmapper.xml文件中与java代码分离.
3.向sql语句传参麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应.
解决:mybatis自动将java对象映射至sql语句.
4.对结果即解析麻烦,sql变化导致解析代码变化,且解析前需要进行遍历,如果能将数据库记录封装成pojo对象解析还比较方便.
解决:mybatis自动将sql执行结果映射至java对象
4.使用mybatis的mapper接口调用时有那些要求?
1.Mapper.xml文件中的namespace即是mapper接口的类路径
2.Mapper接口方法名和mapper.xml中定义的每个sql的id相同
3.Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同.
4.Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同.
MyBatis中一级缓存和二级缓存?
1.一级缓存:基于perpetualCache的HashMap本地缓存,其存储作用域为session,当session flush或者close()之后,该session中的所有cache将清空.
2.二级缓存和一级缓存其机制相同,默认也是采用PerpetualCache,HashMap存储,不同在于其存储作用域为Mapper(NameSpace),并且可自定义存储源,如Ehcache.作用域为namespace是指该namespace对应的配置文件中所有的select操作结果都缓存,这样不同于线程之间就可以共用二级缓存,启动二级缓存:在mapper配置文件中<cache/>
二级缓存可以设置返回的缓存对象策略:<cache readOnly="true">.当readOnly="true"时,表示二级缓存返回给所有调用者同一个缓存对象实例,调用者可以update获取的缓存实例,但是这样可能造成其他调用者出现数据不一致的情况(因为所有调用的是同一个实例).当readOnly=false时,返回给调用者的是二级缓存总缓存对象的拷贝,即不同调用者获取的是缓存对象的不同实例,这样调用者对各自的缓存对象的修改不会影响到其他的调用者,即是安全的,所以默认是readOnly="false"
3.对于缓存数据更新机制,当某一个作用域(一级缓存session/二级缓存namespaces)的进行了cud操作后,默认该作用域下所有select中的缓存将被clear'
6.Mybstis在insert插入数据操作时返回主键ID?
数据库为mysql时:
<insert id="insertUser" parameterType="com.qingmu.pojo.User" useGeneratedKeys="true" keyProperty="id">
<!--<selectKey keyProperty="id" order="AFTER" resultType="int">-->
<!--select LAST_INSERT_ID()-->
<!--</selectKey>-->
insert into USER VALUES (#{id},#{username},#{sex},#{birthday},#{address})
</insert>
keyproperty表示返回的id要保存到对象的那个属性中,useGeneratedKeys表示主键id为自增长模式.Mysql中做上配置就可以了.
数据库为Oracle时"
"
由于Oracle没有自增长这一说,只有序列这种模仿自增的形式,所以不能再使用UserGeneratedKeys属性,而是使用selectKey将Id获取并赋值到对象的属性中,insert插入操作时正常插入id
Mybatis容易遇到的问题的更多相关文章
- 【分享】标准springMVC+mybatis项目maven搭建最精简教程
文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...
- Java MyBatis 插入数据库返回主键
最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...
- [原创]mybatis中整合ehcache缓存框架的使用
mybatis整合ehcache缓存框架的使用 mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓 ...
- 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程
本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...
- mybatis plugins实现项目【全局】读写分离
在之前的文章中讲述过数据库主从同步和通过注解来为部分方法切换数据源实现读写分离 注解实现读写分离: http://www.cnblogs.com/xiaochangwei/p/4961807.html ...
- MyBatis基础入门--知识点总结
对原生态jdbc程序的问题总结 下面是一个传统的jdbc连接oracle数据库的标准代码: public static void main(String[] args) throws Exceptio ...
- Mybatis XML配置
Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...
- MyBatis源码分析(一)开篇
源码学习的好处不用多说,Mybatis源码量少.逻辑简单,将写个系列文章来学习. SqlSession Mybatis的使用入口位于org.apache.ibatis.session包中的SqlSes ...
- (整理)MyBatis入门教程(一)
本文转载: http://www.cnblogs.com/hellokitty1/p/5216025.html#3591383 本人文笔不行,根据上面博客内容引导,自己整理了一些东西 首先给大家推荐几 ...
- MyBatis6:MyBatis集成Spring事物管理(下篇)
前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基 ...
随机推荐
- kafka生产部署
kafka真实环境部署规划 1. 操作系统选型 因为kafka服务端代码是Scala语言开发的,因此属于JVM系的大数据框架,目前部署最多的3类操作系统主要由Linux ,OS X 和Windows, ...
- LeetCode 942. 增减字符串匹配(DI String Match) 49
942. 增减字符串匹配 942. DI String Match 题目描述 每日一算法2019/6/21Day 49LeetCode942. DI String Match Java 实现 and ...
- AntV设置Chart高度
AntV在使用柱状图时不能单独设置一个柱状图的宽度,但可以设置整体高度,宽度,代码如下 const chart = new F2.Chart({ id: 'c1', // 指定图表容器 ID widt ...
- Data-Structure-Notes
Data Structure Notes Chapter-1 Sorting Algorithm Selection Sorting: /* * Selection Sort */ template& ...
- Huber Loss 介绍
Huber Loss 是一个用于回归问题的带参损失函数, 优点是能增强平方误差损失函数(MSE, mean square error)对离群点的鲁棒性. 当预测偏差小于 δ 时,它采用平方误差,当预测 ...
- Redis主从架构搭建和哨兵模式(四)
一主一从,往主节点去写,在从节点去读,可以读到,主从架构就搭建成功了 1.启用复制,部署slave node wget http://downloads.sourceforge.net/tcl/tcl ...
- windows平台上编译mongdb-cxx-driver
编译方法见以下链接,写的非常详细 http://www.pianshen.com/article/9722211716/ 我的编译环境和编译工具如下: 环境:win7或者win10,都试过,没有任何区 ...
- Spring AOP 创建Advice 定义pointcut、advisor
前面定义的advice都是直接植入到代理接口的执行之前和之后,或者在异常发生时,事实上,还可以对植入的时机定义的更细. Pointcut定义了advice的应用时机,在Spring中pointcutA ...
- (转).NET Core中实现AOP编程
原文地址:https://www.cnblogs.com/xiandnc/p/10088159.html AOP全称Aspect Oriented Progarmming(面向切面编程),其实AOP对 ...
- java之spring mvc之Restful风格开发及相关的配置
1. Restful : 表征状态状态转移. 传统 : url : http://localhost:8080/usersys/delete.do?user.id=12 Restful 风格:url ...