mybatis使用注意的细节】的更多相关文章

一.mybatis 基本配置 最近几天一直在学习mybatis,看了一些源码,本文讲述mybatis的一些基本配置和基本的用法和注意到一些细节.个人时间和精力有限,本文属于流水账类型,不成体系,算是自己的个人笔记吧. 1.本案例所使用的数据库为mysql,数据库的脚本代码如下: CREATE TABLE `message` ( `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `COMMAND` varchar(16) DEFAULT NULL…
自我总结,欢迎拍砖! 目的:在需要返回int,long等基础类型数据的情况下,尽量在mybatis的Mapper中用基础类型的包装类. 原因:当查询的字段为空值时,mybatis会返回null,用基础类型接收则会出现异常,但是用包装类就把这个问题规避了. 一.读数据环境准备: 创建student表(无主键): create table student(id int,name varchar(20),idCard bigint,classNo varchar(10)); insert into s…
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…
Mybatis要解决的问题: 1. 将sql语句硬编码到java代码中,如果修改sql语句,需要修改java代码,重新编译.系统可维护性不高. 设想如何解决? 能否将sql单独配置在配置文件中. 2. 数据库连接频繁开启和释放,对数据库的资源是一种浪费. 设想如何解决? 使用数据库连接池管理数据库连接. 3. 向preparedStatement中占位符的位置设置参数时,存在硬编码(占位符的位置,设置的变量值) 设想如何解决? 能否也通过配置的方式,配置设置的参数,自动进行设置参数 4. 解析结…
一.加载pom依赖包 <!--spring-boot开发热部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> 二.使用描述 (1)当你使用IDE开发的时候,…
今天中午回到工位已经是12:20多了,没有时间睡觉了,本想着还能提前开始,结果看了点新闻之后,又是12:40了,所以新闻坚决不能看,执行力. 今天主要记录一下MyBatis中的特殊符号的问题,这个问题已经在面试中被问到了两回了,但都没答好,事不过三,记录下来,下一次绝对不能再在这里出问题了. 一.mybatis特点 同hibernate一样,mybatis是一个持久层框架,通过这个框架可以减化我们持久层代码的开发.面试的时候我们会经常被问到这个框架同hibernate的比较,下面先罗列几点myb…
开发工具:STS 代码下载链接:https://github.com/theIndoorTrain/SpringBoot_Mybatis/tree/7892801d804d2060774f3720f82e776ff318e3ba 前言: 在调用mybatis的查询条件时,之前,遇到需要验证多个参数的查询时,往往需要把所有参数都绑定到一个实体中去,然后调用获取. 现在,我们来详细描述mybatis传递参数的细节. 一.单个参数: 1.定义mapper接口: package com.xm.mappe…
1.前言 努力学习完ssm框架之后,终于也成功的把三大框架的使用以及配置文件细节忘得一干二净.为了努力捡起来以及方便今后的复习,决定写一篇博客记录一下. 本博客的所有分析都是在持久层接口以及接口中的方法已经创建的基础上进行的. 本博客对于Mybatis中标签的细节属性不做过多探讨,主要着重于Mybatis框架的底层原理和大体使用步骤. 本博客着重于以Mybatis的xml配置方式为主,作源码分析. 本博客中的所有图片均为原创,如需原图,请联系作者. 2. mybatis简介 持久层框架Mybat…
一.mybatis的基础crud的操作 先在接口中,写对应的方法名称,返回类型,访问符. 之后在映射配置文件中,写具体的实现 二.mybati中crud的细节 1.模糊查询 这是接口中 这是xml中 有两种表示方式: 第一种: 模糊查询时的百分号%,并没有在sql语句中进行体现,而是要在代理对象使用该方法时,在对应的参数里面加入, 因为第一种方式,是用的预编译的形式,用的是占位符,所以当代理对象调用方法时,传入的参数,是完全的插入到了 sql语句中了. 第二种:采用的是字符串拼接的方式,而且里面…
序言 从简入深的使用SpringBoot搭建一个Web项目,同时也包括一些小的问题.第一篇博文是以较为简单的方式完成一个可以连接数据库的Springboot web程序.之前自己学习的时候看网上的教程总是感觉有点太大,我只是想最简单的搭建一个可以运行的项目,之后再去深究细节.每个教程的配置还都不一样,让我不知所措,所以我就写了这篇博文来记录自我感觉的较简单的步骤较少的方法去搭建一个springboot web项目,不常写文可能思路有点混乱. Code 创建项目 这里使用的IDE是IDEA,选择软…
简介 这是 Mybatis 系列博客的第四篇,我本来打算详细讲解 mybatis 的配置.映射器.动态 sql 等,但Mybatis官方中文文档对这部分内容的介绍已经足够详细了,有需要的可以直接参考.所以,我将扩展一些其他特性或使用细节,掌握它们可以更优雅.高效地使用 mybatis. 这里补充一点,本文的所有测试例子都是基于本系列 Mybatis 第一篇文章的项目,其他相关博客如下: Mybatis源码详解系列(一)--持久层框架解决了什么及如何使用Mybatis Mybatis源码详解系列(…
mybatis细节 增删改查ParameterType都可以不用写 解释这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler)推断出具体传入语句的参数 mybatis 中的sql语句不用写 : 增删改中 ResultType,paramType都不用写,只需要一个id 解释:增删改返回的是影响的多少行,mybatis会自动判断,如果是数字(int,long)自动返回该类型,如果是boolean,影响0行则返回false,否则是true. 查询中如果返回的是一个Jav…
mybatis Result Maps collection already contains value 这是个小功能,我当时没有怎么在意,后来发到了测试环境的时候测试提出了bug,我才慌忙查看原因, <select id="getRoleInfo" parameterType="java.lang.String" resultMap=" com.hupu.smart.game.platform.dto.common.RoleInfo"…
具体怎么整合的网上有很多优秀的博客介绍,这里就直接引用一篇个人觉得非常详细的教程: https://blog.csdn.net/winter_chen001/article/details/77249029 里面还包含了常用的额外插件,强烈推荐: PageHelper 分页插件 mybatis generator 自动生成代码插件 正文: 1. 开启事务管理(注解方式): 因为配置的druid数据库连接池,所以方法如下: 使用: 直接在对数据库进行操作的类上面添加 @Transaction 2…
mapper接口动态代理 动态代理dao开发规则 1.namespace必需是接口的全路径名 2.接口的方法名 必需与 映射文件的sql id一致 3.接口的输入参数必需与映射文件的parameterType类型一致 4.接口的返回类型必须与映射文件的resultType类型一致 动态代理dao开发步骤 1.创建xxxMapper.xml映射文件 编写SQL 2.创建UserMapper接口 3.加载UserMapper.xml 4.测试动态代理Dao dao层代码 List<User> fi…
页面有个功能 为 根据 品牌名进行 关键字查询,对应到数据库的是brand表的name字段的模糊查询 如果用的是SSM框架,在mybatis中我们需要自己写sql语句,涉及到like的模糊查询,mybatis中我们通常会使用#{}或${}来获取pojo对象的变量值. 这两个区别为   #{} 会在 变量外侧 加上 单引号  如   select * from brand where name='牌1' ${} 并不会 加单引号   如 select * from brand where name…
1.根据个人习惯,将储存那些数据库查询结果集有映射关系的实体类的Package包名有如下格式: cn.bjut.domain cn.bjut.pojo cn.bjut.model cn.bjut.entity 2.根据个人习惯,将mybatis持久层框架操作数据库必需的接口的Package包名有如下格式: cn.bjut.mapper cn.bjut.dao 前者偏向xml映射配置文件方式,后者偏向注解的方式使用. ====================== end…
1. xml中如果要使用到特殊的字符,比如> 或者< 等,使用 <![CDATA[<]> 进行包裹,避免解析XML的时候出错. 2. 后续还有内容,待总结.…
前几天上线了一个 版本,第二天到公司的时候,在cat上发现了一个长sql查询非常耗时,几乎把线上的项目搞崩溃了.我马上开始排查问题.最终发现 球队的ID传过来的时候是String 类型的,但是在执行sql 的时候就变成了 Integer 类型了,  如果是integer 类型,数据库就无法使用 索引,所以查询的速度大大降低了.组长说加个 jdbcType= varchar . 果然,加上之后查询速度快了很多.立马发布到线上 ,解决了线上的问题.…
1.将字符串转换为日期格式? @DateTimeFormat(pattern="yyyy-MM-dd")…
当一条SQL中既有条件查又有模糊查的时候,偶尔会遇到这样的and拼接问题.参考如下代码: <select id="listSelectAllBusiness"> select * from *** where <if test="a!= null"> a = #{a} </if> <if test="b!= null"> and b in <foreach collection="l…
properties 可以把数据库链接的配置放在上面的properties里面 #{占位符}的形式去引用上面的.下面的内容就是引用上面的内容的定义. 运行查询的方法测试一下 这样改造可以成功的运行程序. 数据库外部配置文件 可以支持把放到外部的配置文件里面. 给的资料里面有一个文件:jdbcConfig.properties 里面是配置数据库的信息 把此文件复制到我们项目的resources里面.jdbcConfig.properties 和配置文件内的前缀保持一致 运行测试方法 浏览器打开这个…
保存后得到id 默认查询出来的是0,因为没有插入就要得到最后的id值. insert语句跟在前面就可以获取到id了 新插入的这条数据就是51 order=after表示在insert语句后再去获取id.有些属性是可以生路的,这里为了演示,把属性都写在了这里. 也就是我们最新插入的这个值…
MyBatis是什么 MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的: MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of para…
1,mybatis流程跟踪,原理理解 基本思路: 从SqlSessionFactory的初始化出发,观察资源的准备和环境的准备,以及实现持久层的一些过程: 进入SqlSessionFactoryBean类,发现先执行的是 然后是: 在初始化类之后,做的准备工作如下: public void afterPropertiesSet() throws Exception {     notNull(dataSource, "Property 'dataSource' is required"…
mybatis比较轻量,适合开发比较小型的或者业务比较复杂的系统: 相对于hibernate来说可以灵活的写sql,更灵活的处理遇到的业务逻辑: 可以说hibernate是pojo实体对db的orm映射,而mybatis是pojo对sql的映射: 作为入门,先不考虑高级的特性,速度来一个CRUD再从源码和一个具体的业务来研究它的原理和高级特性: CRUD基本思路:作为一种比较流行的持久层ORM框架,相当于三层架构中的dao层: 最终作为程序员的我们使用的SqlSession对象,先来个思路,再来…
本文主要针对MySQL ---------------------------------------------------------------------------------------------------------- 用generatorConfig.xml工具生成我有总结过:http://www.cnblogs.com/fengchaoLove/p/5790352.html 了解的可以去看看. 本文主要针对纯手写. -----------------------------…
learn from:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#Result_Maps 关联查询 准备 关联结果查询(一对一) resultMap复用 集合(一对多) 3 关联查询 做查询之前,先修改几个配置.mapper.xml是在mybatis-config.xml中指定,那么我们每增加一个mapper都要增加一个配置,很麻烦.为了简化配置.需要将mapper接口和mapper.xml放到同一个文件下,并且接口和xml文件命名一致…