MyBatis知识点总结(一)
前言:本篇主要记录在MyBatis学习过程中的主要知识点。
1.mybatis环境的搭建,通过maven可以快速的进行环境的搭建。
<!--文件版本-->
<properties>
<mybatis.version>3.4.5</mybatis.version>
<junit.version>4.12</junit.version>
<mysql-driver.version>5.1.38</mysql-driver.version>
<log4j.version>1.2.17</log4j.version>
<slf4j.version>1.7.25</slf4j.version>
<mbg.version>1.3.6</mbg.version>
</properties> <dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-driver.version}</version>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency> <dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency> <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency> </dependencies> <build>
<!--通过如下配置,解决找不到xml的异常-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<!--Mybatis-generator插件,用于自动生成Mapper和POJO-->
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>${mbg.version}</version>
<configuration>
<!--配置文件的位置,注意文件路径的写法-->
<configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>${mbg.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
2.mybatis核心配置文件
mybatis的核心配置文件,位置与名称都不固定。
需要注意的是mybatis的核心配置文件的标签是有顺序的,如果顺序不对,会产生错误提示,可根据具体提示进行标签位置的调整。
mybatis核心配置文件主要配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--mybatis的标签是有顺序的,顺序不正确,会报错-->
<!--使用properties标签来引入外部properties配置文件的内容
resource:引入类路径下的资源
url:引入网络或者磁盘上的资源
-->
<properties resource="DataBaseConfig/db.properties"/> <!--为了防止Oracle中插入null值报错,可以将jdbcTypeForNull,设置为NULL,mysql中是支持NULL和OTHER的-->
<settings>
<setting name="jdbcTypeForNull" value="NULL"/>
<!--以下两个属性配置后进行延迟加载-->
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
<setting name="cacheEnabled" value="true"/><!--开启二级缓存-->
</settings> <!--别名处理器:typeAliases可以为java类型起别名-->
<typeAliases>
<!--别名不区分大小写-->
<!--type:指实体类的全类名;默认别名为类名小写
alias:新的名称-->
<!--typeAlias为单独一个实体类起别名 -->
<!--<typeAlias type="com.mybatisstudy.domain.User"/>-->
<!--package批量起别名
为某个包下的所有实体类对象起别名
name:指定包名,为包下及其子包下的实体类对象都起一个别名,默认类名的小写-->
<!--使用@Alias注解为冲突的类名,重新起一个别名,但是类名重复一般不存在-->
<package name="com.mybatisstudy.domain"/>
</typeAliases>
<!--与spring整合和,environments将被废除,由spring进行管理-->
<!--environments可以配置多种环境,必须有transactionManager和dataSource
可以通过environments的default属性,来快速的切换环境,所有可以配置多种环境-->
<environments default="development">
<environment id="development">
<!--使用jdbc管理事务,type有JDBC和MANAGED-->
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments> <!--databaseIdProvider:支持多数据库厂商-->
<databaseIdProvider type="DB_VENDOR">
<!--为不同数据库起一个别名-->
<property name="MySQL" value="mysql"/>
</databaseIdProvider>
<!--mapper.xml文件一定要注册到全局配置文件中-->
<mappers>
<!--<mapper resource="com/mybatisstudy/sqlmap/UserMapper.xml"/>--> <!--<mapper resource="com/mybatisstudy/sqlmap/UserMapper.xml"/>-->
<!--<mapper class="com.mybatisstudy.mapper.UserMapperAnotation"/>-->
<!--批量注册,sql映射文件和接口必须在同一包下,并且必须同名,但可通过小技巧进行转换-->
<package name="com.mybatisstudy.mapper"/>
</mappers>
</configuration>
3.关于sql映射文件
由于我们采用mapper接口式的编程,所以sql映射文件与mapper接口类的名称要相同,并且sql映射文件中namespace的值为对应mapper接口的全类名形式。
4.关于mybatis中的参数处理
对于mapper接口中单个参数,mybatis不会做特殊处理。可以通过#{参数名}进行取值操作。
对于mapper接口中的多个参数,mybatis会做特殊处理。多个参数会被mybatis封装成一个map,#{}就是从map中进行取值。
key的形式为:param1、param2......paramN的形式。
value:就是说要传入的值。
但是这种方式的可读性极差,因此可以采用命名参数的形式,通过@Param注解明确指定map中的key值。
如果多个参数正好是业务逻辑的数据模型,则可直接传入POJO,通过#{属性名}进行取值。
特别注意,如果参数为Collection(List,Set)类型或者是数组,mybatis也会特殊处理,mybatis也会把list或者数组封装在map中。
如果参数为Collection则map中的key为Collection(collection)。
如果参数为List,则map中的key可以直接使用list。
如果参数为数组,则map中的key为array。
5.关于mybatis的返回值和实体类字段与数据库字段不一致的问题
当mapper接口中某函数的返回值类型为List时,在其对应sql语句的resultType上直接写List集合的中元素的类型即可。
使用resultMap(自定义结果集映射规则),解决数据库字段和实体类属性不一致的情况。注意:resultMap和resultType只能二选一。
6.mybatis中的缓存机制
mybatis中默认定义了两级缓存,默认情况下一级缓存(本地缓存)开启。
一级缓存:在与数据库同一次会话期间的数据会放到一级缓存中,以后如果需要查询相同的数据,直接从缓存中取,不需要到数据中进行查询。
注意:一级缓存为sqlSession级别的缓存,一直都是开启的,不能关闭。
一级缓存失效的四种情况:
1)sqlSession不同,缓存失效。
2)sqlSession相同,查询条件不同,缓存失效,因为缓存中可能还没有相关数据。
3)sqlSession相同,在两次查询期间,执行了增删改操作,缓存失效。
4)sqlSession相同,但是手动清空了一级缓存,缓存失效。
二级缓存(全局缓存)需要进行配置,二级缓存是基于namespace级别的,一个namespace对应一个二级缓存。
二级缓存工作机制:
1)一个会话,查询一条数据,该数据会放在当前会话的一级缓存中。
2)如果当前会话关闭,对应的一级缓存会被保存到二级缓存中,新的会话查询信息,就可以参照二级缓存。
3)不同namespace查询出的数据会放在自己对应的缓存中。
注意:查出的数据都会默认放在一级缓存中,只有会话提交或关闭后,一级缓存的数据才会被转移到二级缓存中。
by Shawn Chen,2018.3.14日,晚。
MyBatis知识点总结(一)的更多相关文章
- Mybatis知识点总结
---恢复内容开始--- Mybatis知识点总结 1.#{}和${}的区别是什么? 答:#{}的使用场景:在表的sql映射文件中如下使用: <mapper namespace="co ...
- MyBatis 知识点梳理
简单地梳理下MyBatis相关的知识点,主要想让自己重新捡起以前学的框架,如果能给广大程序猿朋友有所帮助那就更好了.有疏漏的地方也欢迎大家评论指出.闲言少叙,进入正题....... MyBatis知识 ...
- mybatis知识点
1.Mybatis比IBatis比较大的几个改进是什么 a.有接口绑定,包括注解绑定sql和xml绑定Sql , b.动态sql由原来的节点配置变成OGNL表达式, c. 在一对一,一对多的时候引进了 ...
- MyBatis 知识点
2010年,随着开发团队转投Google Code旗下,ibatis 3.x 正式更名为 Mybatis. orm工具的基本思想 无论是 hibernate.Mybatis,orm工具有一个共同点: ...
- MyBatis知识点整理
1.MyBatis一般使用步骤 1.1获取Configuration实例或编写配置文件 //获取Configuration实例的样例 TransactionFactory transactionFac ...
- mybatis知识点(已掌握)
1.${} 和 #{} 的区别? ${} 直接显示传入数据,不能防止sql注入,一般用于传数据库对象(比如表名). #{} 传入数据被当成字符串,自动加上双引号,防止sql注入. 2.有哪些Execu ...
- 知名互联网公司校招 Java 开发岗面试知识点解析
天之道,损有余而补不足,是故虚胜实,不足胜有余. 本文作者在一年之内参加过多场面试,应聘岗位均为 Java 开发方向.在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点. 主要包括以下几 ...
- 后端——框架——持久层框架——Mybatis——《Mybatis从入门到精通》读书笔记——初篇
1.Mybatis知识点 框架的知识点大致可以分为三个部分 基础: 介绍编写增,删,改,查: 动态标签: config配置文件 Mapper配置文件 插件:常见的插件有三个 pageHelper:分页 ...
- ORM——Mybatis
引言 ORM 是 blablabla…… Mybatis知识点
随机推荐
- Asp.net 获取访问者IP
using System.Web; namespace Wxlhjcyy.Public { public class GetIp { public static string IPAddress { ...
- 使用 hashMap和treeMap开启多个摄像头的监控任务
背景:今天有个需求,传入多个摄像头ID,然后调用接口,开启这些摄像头的监控任务. 方法一: 如果你的摄像头监控任务格式为: {camera_id_list=[{createBy=tjt, camera ...
- JSJ—编译器与虚拟机哪个重要?
阅读本文约“2分钟” 熟悉Java的朋友都知道虚拟机还有编译器,那么它们各自主要的功能是什么?谁比较重要呢?让我们来了解一下这两位美女的故事. 虚拟机可以说就是Java,她能让程序运行起来. 但是编译 ...
- web站点和windows服务项目发布时如何排除指定文件
在发布asp.net站点和windows服务项目时,有的时候这样的需求:msbuild编译之后发布到服务器指定目录时要排除指定文件,比如通过jenkins构建时,不希望覆盖原来的Web.config和 ...
- mybatis插件机制
目录 mybatis插件机制 主要 类/接口 和 方法 mybatis插件机制实现 mybatis插件机制 mybatis的插件机制使用动态代理实现,不了解的朋友请先了解代理模式和动态代理:插件本质是 ...
- hihoCoder编程练习赛49
题目1 : 相似颜色 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在CSS中我们可以用井号(#)加6位十六进制数表示一种颜色,例如#000000是黑色,#ff0000 ...
- 基于timestamp和nonce的防重放攻击
以前总是通过timestamp来防止重放攻击,但是这样并不能保证每次请求都是一次性的.今天看到了一篇文章介绍的通过nonce(Number used once)来保证一次有效,感觉两者结合一下,就能达 ...
- [C语言]易错知识点、小知识点复习(1)
1. 计算机只能识别由0和1组成的二进制指令,需要将用高级语言(如C.C++)编写的源程序(.c..cpp)编译成二进制目标文件(.obj).一个程序可以根据需要写在不同的文件里,编译是以文件为单位进 ...
- SOD框架--系统概要
SOD框架(源PDF.NETE框架)系统概要介绍 --核心三大功能(S,O,D): SQL-MAP XML SQL config and Map DAL SQL Map Entity ORM OQL( ...
- web自动化 基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架
基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架 by:授客 QQ:1033553122 博客:http://blog.sina.com.cn/ishou ...