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的事物的做法,本文的目的是在这个的基 ...
随机推荐
- 【Spring Boot学习之九】缓存支持
环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 一.Spring Boot Cache以及整合EhCacheSpring从3.1开始定义了org.springfram ...
- CentOS 7 编译安装clang+llvm
天在CentOS上将最新版本的LLVM套件(LLVM,Clang和Libc++)编译安装好了,中间遇到了不少问题.虽然已经有很多博客介绍如何编译安装LLVM了,但是根据我自己亲身体验的情况来看,还是有 ...
- 006 SpringCloud 学习笔记2-----SpringCloud基础入门
1.SpringCloud概述 微服务是一种架构方式,最终肯定需要技术架构去实施. 微服务的实现方式很多,但是最火的莫过于Spring Cloud了.SpringCloud优点: - 后台硬:作为Sp ...
- 域名解析中的cname解析和显性URL跳转和隐性URL跳转三者有什么区别
通俗的来讲,cname解析还是属于dns解析,只是把某个域名解析到另外一个域名对应的某个IP的空间中,所以还需要在服务器端(比如nginx)做域名解析(比如把baidu.com做一个cname解析到i ...
- golang 之文件操作
文件操作要理解一切皆文件. Go 在 os 中提供了文件的基本操作,包括通常意义的打开.创建.读写等操作,除此以外为了追求便捷以及性能上,Go 还在 io/ioutil 以及 bufio 提供一些其他 ...
- uwsgi重启shell脚本
一.概述 工作中使用uwsgi时,每次需要进入到工作目录,去执行uwsgi相关命令,比较繁琐.这里整理了一个uwsgi重启脚本! 根据参考链接,修改了部分内容(定义了变量,修复了一些bug,增加了颜色 ...
- spring Boot 学习(三、Spring Boot与检索)
一.检索我们的应用经常需要添加检索功能,开源的 ElasticSearch 是目前全文搜索引擎的 首选.他可以快速的存储.搜索和分析海量数据.Spring Boot通过整合Spring Data El ...
- 用HTML、CSS、JS制作圆形进度条(无动画效果)
逻辑 1.首先有一个圆:蓝色的纯净的圆,效果: 2.再来两个半圆,左边一个,右边一个将此蓝色的圆盖住,效果: 此时将右半圆旋转60°,就会漏出底圆,效果: 然后我们再用一个比底圆小的圆去覆盖这个大 ...
- kafka消费者问题
[] 2019-12-17 15:40:01 - [INFO] [AbstractCoordinator:542 coordinatorDead] Marking the coordinator 机器 ...
- 英语secuerity证券
中文名:证券 外文名:security.secuerity 类别:经济权益凭证统称 组成:资本证券.货币证券和商品证券 作用:用来证明持者权益的法律凭证 发展历程 世界 1603年,在共和国大议长奥登 ...