mybatis不可忽略的细节】的更多相关文章

自我总结,欢迎拍砖! 目的:在需要返回int,long等基础类型数据的情况下,尽量在mybatis的Mapper中用基础类型的包装类. 原因:当查询的字段为空值时,mybatis会返回null,用基础类型接收则会出现异常,但是用包装类就把这个问题规避了. 一.读数据环境准备: 创建student表(无主键): create table student(id int,name varchar(20),idCard bigint,classNo varchar(10)); insert into s…
Mybatis要解决的问题: 1. 将sql语句硬编码到java代码中,如果修改sql语句,需要修改java代码,重新编译.系统可维护性不高. 设想如何解决? 能否将sql单独配置在配置文件中. 2. 数据库连接频繁开启和释放,对数据库的资源是一种浪费. 设想如何解决? 使用数据库连接池管理数据库连接. 3. 向preparedStatement中占位符的位置设置参数时,存在硬编码(占位符的位置,设置的变量值) 设想如何解决? 能否也通过配置的方式,配置设置的参数,自动进行设置参数 4. 解析结…
​前言:老刘不敢保证说的有多好,但绝对是非常良心地讲述自学大数据开发路上的一些经历和感悟,保证会讲述一些不同于别人技术博客的细节. 01 自学flume的细节 老刘现在想写点有自己特色的东西,讲讲自学大数据遇到的一些事情,保证讲一些别人技术博客里忽略的知识点. 很多自学编程的人都会有一个问题,特别是研二即将找工作的小伙伴,因为马上就要找工作了,自学时间不多了,所以在自学的路上,常常会忽略很多细小但很重要的知识点,很多伙伴都是直接背一些机构的资料. 自己没有静下心来好好研究各个知识点,也没有考虑这…
最近由于经常写前端,所以系统性的看了一下html5页面的基础信息,虽然以前写了很久的html代码,但是其中的一些细节还是容易被忽略,所以这里一起整理一下. 在html5中,空元素结尾处的空格和斜杠是可以忽略的. 标签中属性值两边的引号是可选的.不过习惯上还是会写上. 属性的数字值无需输入单位,只需输入数值本身即可.如标签中的height和width等. 标签中有的属性只接受预定义值(也称为枚举值).一定要用小写字母写枚举值.如input的type.有的属性可以是任意值,如input的Value.…
一.mybatis 基本配置 最近几天一直在学习mybatis,看了一些源码,本文讲述mybatis的一些基本配置和基本的用法和注意到一些细节.个人时间和精力有限,本文属于流水账类型,不成体系,算是自己的个人笔记吧. 1.本案例所使用的数据库为mysql,数据库的脚本代码如下: CREATE TABLE `message` ( `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `COMMAND` varchar(16) DEFAULT NULL…
1. img必备和可选的参数都有写了上了,但是必备参数里的一个值alt没写(其实一些大型的专业门户网站其实也是有存在一些小问题的,只要我们细心一 点就能发现).虽然这样alt不写,在页面中也不会有任何的问题,因为这个alt属性也只是在图像丢失.禁用或加载不到的情况下才显示,但是如果一些其他 特定的设备访问或一些其他条件下图片不显示的情况下,那这里就是一块大红XX和一大块白块,多影响用户体验. 虽然只是一个小小的alt属性,但是有时候是细节决定决定成败,用与不用,表面上看不出有什么问题,但是在某些…
1.mybatis对sql执行后会对结果进行封装,如果没有返回任何记录,只是封装后的对象没有值,而对象并不为空null: (这个问题疏忽坑了两次,在对返回数组结果进行判断的时候,我用的if(Array!=null) 结果是判断正确,应该if(Array.length!=0)做判断记录是否为空) 2.mapper的xml文件中,if<test="ids.length!=0  and ids!=null "> 这里的与运算是用的and 3.数组数据的绑定问题 在这里传进来的的参…
mybatis第二篇 1.${}和#{}的区别 1.#在传参的时候,会自动拼接单引号:$不能拼接单引号; 2.$传参时,一般不支持jdbcType指定类型的写法;#则可以;如: ​ #{name,jdbcType=VARCHAR} 3.$一般用于在sql中拼接表名,结果排序,模糊查询等操作;其他正常参数传递一般使用 4.因为${}使用后不会自动拼接单引号,所以可能还会导致sql攻击 select * from user where username=${username} and passwor…
try catch使用细节 一. try catch的使用方式容易理解,两者最终都要执行finally中的代码,而当return在try和catch中又会有什么效果? 如果我们做一个简单的例子就会发现,如果返回值的类型为常规变量时,如return在try或catch中,如果返回值在finally中做出了改变,最终的返回值时不受影响的.但返回值类型如果是集合等,返回值的类型就会因为finally中的改变做出变化,猜想:常规数据类型与arraylist等不同,return不会保存即时的状态,直接改变…
前言:老刘这篇文章敢做保证,java的单例模式讲的比大多数的技术博客都要好,讲述别人技术博客都没有的细节!!! 1 java单例模式 直接讲实现单例模式的两种方法:懒汉式和饿汉式,单例模式的概念自己上网搜吧这里就不讲了! 这里会涉及到java中的jvm,如果你没有这方面的知识,我建议你先去补补,不然会有点迷糊! 首先说说类什么时候进行加载? java虚拟机没有进行强制性的约束,但是对于初始化却严格规定了有且只有4种情况必须先对类进行初始化. 我们要知道的是在类加载的过程中,加载.验证.准备是在初…
一.加载pom依赖包 <!--spring-boot开发热部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> 二.使用描述 (1)当你使用IDE开发的时候,…
一.设计 1,数据类型尽量使用数字型,数字型的比较比字符型的快很多 2,数据类型尽量小,预测可以满足未来需求的前提 3,尽量建表时字段不允许为null,除非必要,可以用NOT NULL+DEFAULT代替 当你需要查询数据的时候你往往需要在WHERE条件中多加一个判断条件IS NOT NULL,这样的一个条件不仅仅增加了额外的开销,而且对查询的性能产生很大的影响,有可能就因为多了这个查询条件导致你的查询变的非常的慢:还有一个比较重要的问题就是允许为空的数据可能会导致你的查询结果出现不准确的问题,…
Mybatis技术内幕系列博客,从原理和源码角度,介绍了其内部实现细节,无论是写的好与不好,我确实是用心写了,由于并不是介绍如何使用Mybatis的文章,所以,一些参数使用细节略掉了,我们的目标是介绍Mybatis的技术架构和重要组成部分,以及基本运行原理. 博客写的很辛苦,但是写出来却不一定好看,所谓开始很兴奋,过程很痛苦,结束很遗憾.要求不高,只要读者能从系列博客中,学习到一点其他博客所没有的技术点,作为作者,我就很欣慰了,我也读别人写的博客,通常对自己当前研究的技术,是很有帮助的. 尽管还…
Mybatis技术内幕系列博客,从原理和源码角度,介绍了其内部实现细节,无论是写的好与不好,我确实是用心写了,由于并不是介绍如何使用Mybatis的文章,所以,一些参数使用细节略掉了,我们的目标是介绍Mybatis的技术架构和重要组成部分,以及基本运行原理. 博客写的很辛苦,但是写出来却不一定好看,所谓开始很兴奋,过程很痛苦,结束很遗憾.要求不高,只要读者能从系列博客中,学习到一点其他博客所没有的技术点,作为作者,我就很欣慰了,我也读别人写的博客,通常对自己当前研究的技术,是很有帮助的. 尽管还…
Mybatis技术内幕系列博客,从原理和源码角度,介绍了其内部实现细节,无论是写的好与不好,我确实是用心写了,由于并不是介绍如何使用Mybatis的文章,所以,一些参数使用细节略掉了,我们的目标是介绍Mybatis的技术架构和重要组成部分,以及基本运行原理. 博客写的很辛苦,但是写出来却不一定好看,所谓开始很兴奋,过程很痛苦,结束很遗憾.要求不高,只要读者能从系列博客中,学习到一点其他博客所没有的技术点,作为作者,我就很欣慰了,我也读别人写的博客,通常对自己当前研究的技术,是很有帮助的. 尽管还…
1.什么是mybatis? (1)mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动.创建连接.创建statement等繁杂的过程. (2)mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回. (3)MyBatis 支持定制化…
MyBatis 2.什么是MyBatis的接口绑定,有什么好处 接口映射就是在IBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,    我们直接调用接口方法就可以,这样比起原来了SqlSession提供的方法我们可以有更加灵活的选择和设置. 3.接口绑定有几种实现方式,分别是怎么实现的? 接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加上    @Select@Update等注解里面包含Sql语句来绑定,另外一种就是通过xml里面写SQL来绑定,    在这种情…
1.接口绑定有几种实现方式,分别是怎么实现的? 接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加上 @Select@Update等注解里面包含Sql语句来绑定, 另外一种就是通过xml里面写SQL来绑定, 在这种情况下,要指定xml映射文件里面的namespace必须为接口的全路径名. 2.什么情况下用注解绑定,什么情况下用xml绑定? 当Sql语句比较简单时候,用注解绑定, 当SQL语句比较复杂时候,用xml绑定,一般用xml绑定的比较多 3.MyBatis实现一对多有几种方…
1.#{}和${}的区别是什么? #{}是预编译处理,${}是字符串替换. #{}是sql的参数占位符,${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换. Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值: Mybatis在处理${}时,就是把${}替换成变量的值. 使用#{}可以有效的防止SQL注入,提高系统安全性. 2.通常一个Xml映射文件,都会写一个Dao接口与之对应,…
1.1 何为Spring Bean容器?Spring Bean容器与Spring IOC 容器有什么不同吗? 答:1)用于创建bean对象,管理bean对象的那个容器. 2)Spring IOC 容器本质上指的的就是Spring Bean容器,Spring Bean容器中最核心一个机制是IOC机制(控制反转), 所以有时候又将springbean容器称之为Spring IOC 容器. 1.2 Spring IOC 如何理解? 答:IOC 是Spring中提供一种控制反转机制,目的是将我们项目中对…
MyBatis面试题整理 1.什么是MyBatis? 答:MyBatis是一个可以自定义SQL.存储过程和高级映射的持久层框架. 2.讲下MyBatis的缓存 答:MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有,二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置<cache/> 3.Mybatis是如何进行分页的?分页插件的原理是什么? 答: 1)Myba…
Mybatis 技术内幕系列博客,从原理和源码角度,介绍了其内部实现细节,无论是写的好与不好,我确实是用心写了,由于并不是介绍如何使用 Mybatis 的文章,所以,一些参数使用细节略掉了,我们的目标是介绍 Mybatis 的技术架构和重要组成部分,以及基本运行原理. 博客写的很辛苦,但是写出来却不一定好看,所谓开始很兴奋,过程很痛苦,结束很遗憾.要求不高,只要读者能从系列博客中,学习到一点其他博客所没有的技术点,作为作者,我就很欣慰了,我也读别人写的博客,通常对自己当前研究的技术,是很有帮助的…
1.什么是MyBatis? 答:MyBatis是一个可以自定义SQL.存储过程和高级映射的持久层框架. 2.讲下MyBatis的缓存 答:MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有,二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置<cache/> 3.Mybatis是如何进行分页的?分页插件的原理是什么? 答: 1)Mybatis使用RowBound…
1.什么是 MyBatis? 答:MyBatis 是一个可以自定义 SQL.存储过程和高级映射的持久层框架. 2.讲下 MyBatis 的缓存 答:MyBatis 的缓存分为一级缓存和二级缓存,一级缓存放在 session 里面,默认就有,二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现 Serializable 序列化接口(可用来保存对象的状态),可在它的映射文件中配置<cache/> 3.Mybatis 是如何进行分页的?分页插件的原理是什么? 答: 1)Mybati…
今天中午回到工位已经是12:20多了,没有时间睡觉了,本想着还能提前开始,结果看了点新闻之后,又是12:40了,所以新闻坚决不能看,执行力. 今天主要记录一下MyBatis中的特殊符号的问题,这个问题已经在面试中被问到了两回了,但都没答好,事不过三,记录下来,下一次绝对不能再在这里出问题了. 一.mybatis特点 同hibernate一样,mybatis是一个持久层框架,通过这个框架可以减化我们持久层代码的开发.面试的时候我们会经常被问到这个框架同hibernate的比较,下面先罗列几点myb…
使用Mybatis的时候,有些时候能输出(主要是指sql,参数,结果)日志.有些时候就不能. 无法输出日志的时候,无论怎么配置log4j,不管是properties的还是xml的,都不起作用. 有些时候,我们没做什么配置就能输出日志.... 这是一个让无数人烦躁的问题.其实解决问题很容易(我过了这么久才解决,以前都用拦截器输出). 这是一个普大喜奔的日子,让我们一起来看看如何解决mybatis的日志问题. 为什么说这个问题很容易解决呢?因为mybatis的文档写的很清楚. 为什么我们都没找到解决…
前言:本文的目的是记录C这些语言easy忽视的细节.我会每天花一点时间来阅读整理,坚持下去,今天是第一章.也许今天是下个月的第二,明年,今天是第几?--我坚信,,记性不如烂笔头.第四篇了.fight~... 第一篇链接:C语言中easy被忽略的细节(第一篇) 第二篇链接:C语言中easy被忽略的细节(第二篇) 第三篇链接:C语言中easy被忽略的细节(第三篇) 1.void*类型的指针不能參与算术运算.仅仅能进行赋值.比較和sizeof操作的原因? 指针的算术运算还要包括指针所指对象的字节数信息…
Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具: SLF4J Apache Commons Logging Log4j 2 Log4j JDK logging 具体选择哪个日志实现工具由MyBatis的内置日志工厂确定.它会使用最先找到的(按上文列举的顺序查找). 如果一个都未找到,日志功能就会被禁用. 不少应用服务器的classpath中已经包含Commons Logging,如Tomcat和WebShpere, 所以MyBatis会把它作为具体的日志实现.这将意味着,…
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close.     item表示集合中每一个元素进行迭代时的别名, index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置, open表示该语句以什么开始, separator表示在每次进行迭代之间以什么符号作为分隔 符, collection表示要循环的集合, close表示以什么结束. 在使用fo…
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习是最好的办法.J Logging Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具: SLF4J Apache Commons Logging Log4j 2 Log4j JDK logging 具体选择哪个日志实现工具由MyBatis的内置日志工厂确定.它会使用最先找到的(按…