MyBatis概述 开发环境,流程及生命周期 映射器 动态sql和高级查询 嵌套查询和延迟加载 事务控制及数据源 MyBatis的缓存 附录:常用配置 一:MyBatis概述 MyBatis的前身是...可是为什么MyBatis却越来越受欢迎呢?...导入Junit单元测试坐标。 1.2 创建mybatis的主配置文件 在resources目录下建立一个名字为mybatis-config.xml(名称随意)配置文件,编写所需配置信息。...单元测试或service调用。 Tips: 接口中方法名称和Mapper.xml文件中sql语句的id保持一致!...不能通过编码方式进行策略的改变,而应该通过修改配置文件改变加载策略。可以使用嵌套查询(分步查询)。 2.嵌套查询 2.1根据多的一方,嵌套查询少的一方 <!
Select 查询 关联的嵌套结果映射 关联的多结果集(ResultSet) 集合 集合的嵌套 Select 查询 集合的嵌套结果映射 集合的多结果集(ResultSet) 鉴别器 缓存 使用自定义缓存...ResultMap 的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系就行了。 你已经见过简单映射语句的示例了,但并没有显式指定 resultMap。...关联的不同之处是,你需要告诉 MyBatis 如何加载关联。MyBatis 有两种不同的方式加载关联: 嵌套 Select 查询:通过执行另外一个 SQL 映射语句来加载期望的复杂类型。...这个属性值是一个类型处理器实现类的完全限定名,或者是类型别名。 关联的嵌套 Select 查询 属性 描述 column 数据库中的列名,或者是列的别名。...和关联元素一样,我们可以使用嵌套 Select 查询,或基于连接的嵌套结果映射集合。 集合的嵌套 Select 查询 首先,让我们看看如何使用嵌套 Select 查询来为博客加载文章。
} 参数的配置好像越来越繁琐了,但实际上,很少需要如此繁琐的配置。...ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。 之前你已经见过简单映射语句的示例,它们没有显式指定 resultMap。...关联的不同之处是,你需要告诉 MyBatis 如何加载关联。MyBatis 有两种不同的方式加载关联: 嵌套 Select 查询:通过执行另外一个 SQL 映射语句来加载期望的复杂类型。...这个属性值是一个类型处理器实现类的完全限定名,或者是类型别名。 关联的嵌套 Select 查询 属性 描述 column 数据库中的列名,或者是列的别名。...和关联元素一样,我们可以使用嵌套 Select 查询,或基于连接的嵌套结果映射集合。 集合的嵌套 Select 查询 首先,让我们看看如何使用嵌套 Select 查询来为博客加载文章。
2.where子句为什么不能使用count的别名 先举一个反例。...但这是错误,这是书上的一个反例,错误的原因是如果使用AS赋给列一个别名并且在WHERE子句中使用该列,那么必须通过它的原名来引用,而不能使用别名。根本原因是select的语句的执行顺序。...B有100行,那么上面的查询就需要1000*100次比较。...5.子查询,临时表和视图的区别 子查询是用于查询语句中辅助主查询完成结果查询的查询语句。子查询存在嵌套查询中,嵌套查询就是多个子查询嵌套在主查询中形成的查询语句。...例如下面的查询语句就是嵌套查询: sql select A.XX from A where A.XX in (select B.XX from B) 上面select B.XX from
UserMapper.xml中配置resultMap和select元素 查询全部的SysUser 添加接口方法 配置UserMapper.xml 单元测试 基础测试类BaseMapperTest 全局属性...mapUnderscoreToCamelCase 1.增加UserMapper接口 2.配置UserMapper.xml 3.单元测试 多表关联查询 需求一: 根据用户id返回该用户所拥有的角色,返回的结果为角色集合...UserMapper.xml 配置语句 3....我们先来看下select元素 ---- select用法 权限系统中,几个常见的业务,需要查询出系统中的用户、角色、权限等数据, 纯JDBC时,需要写查询语句,并且对结果集进行手工处理,将结果映射到对象的属性中...可以发现,如果使用resultType来设置返回结果的类型,需要在SQL中为所有列名和属性名不一致的列设置别名,通过设置别名使最终的查询结果和resultType指定对象的属性名保持一致,进而实现自动映射
,会非常方便 resultMap的设计思想是简单的语句不需要明确的结果映射,复杂的语句只需要描述属性和字段的关系即可 在UserMapper.xml中增加resultMap配置,定义t_user表中的字段和...Java的类 jdbcType 配置的数据库的类型 property 类型处理器,使用这个属性会覆盖默认的类型处理器,要求填写一个全类名或者是别名 如果是枚举类型,需要自定义类型转换器。...,多用于一对一查询 collection:复杂类型的集合,嵌套结果映射,多用于一对多查询或者多对多查询 discriminator:使用结果值来决定使用哪个resultMap case:基于某些值得结果映射...resultType 从这条语句中返回的期望类型的类的完全限定名或别名。...resultOrdered 这个设置仅针对嵌套结果 select 语句:如果为 true,将会假设包含了嵌套结果集或是分组,当返回一个主结果行时,就不会产生对前面结果集的引用。
对于表达式的查询在数据库引擎内部都将转化为对底层对象的查询。 为什么使用表表达式: 1.使用表表达式的好处是逻辑方面,在性能上没有提升。 2.通过模块化的方法简化问题的解决方案,规避语言上的某些限制。...在外部查询的任何字句中都可以引用在内部查询的SELECT字句中分配的列别名。...,嵌套查询也是很容易产生问题的一个方面。...在这个例子中,使用嵌套派生表的目的是为了重用列别名。但是,由于嵌套增加了代码的复杂性,所以对于本例考虑使用方案一。...) SELECT * FROM O1 外联格式:列的别名写在外部查询中 WITH 表名(别名) AS ( 内部查询 ) 外部查询 例子: WITH O1(custid_1,companyname
一 .select 查询语句 Select 元素的属性 select 元素允许你配置很多属性来配置每条语句的行为细节。...的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。之前你已经见过简单映射语句的示例,它们没有显式指定 resultMap。...关联的不同之处是,你需要告诉 MyBatis 如何加载关联。MyBatis 有两种不同的方式加载关联: 嵌套 Select 查询:通过执行另外一个 SQL 映射语句来加载期望的复杂类型。...关联查询的的嵌套结果映射 之前,你已经看到了一个非常复杂的嵌套关联的例子。 下面的例子则是一个非常简单的例子,用于演示嵌套结果映射如何工作。...和关联元素一样,我们可以使用嵌套 Select 查询,或基于连接的嵌套结果映射集合。 集合的嵌套 Select 查询 首先,让我们看看如何使用嵌套 Select 查询来为博客加载文章。
,希望没有映射的字段是不能在后台查询并输出的,则需要在核心配置文件settings中设置resultMap的自动映射级别(autoMappingBehavior)为NONE,即禁止自动匹配 <settings...Select 属性: 1)Id 命名空间中唯一的标识符,可以被用来引用这条语句 由于我们常用的映射方法是基于Mapper接口,所有id值需跟对应的接口方法名一致 2)ParameterType: 标识查询语句传入参数的类型的完全限定名或别名...如果是实体类对象和基本数据类型多参数传参 取值时:实体类对象.属性名 3)ResultType: 查询语句返回结果类型的完全限定名或别名,命名与ParameterType大体一致 3. ...和使用association元素一样,我们使用嵌套查询,或者从连接中嵌套结果集 查询进行调整 配置这个的前提是必须配置好上面2)针对mapper的namespace 如果需要对个别查询进行调整,可以单独设置cache: <select id="listAll" resultMap
第1种: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致。 ? 第2种: 通过 来映射字段名和实体类属性名的一一对应的关系。 ?...17、为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?...有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次, 通过在resultMap里面配置association节点配置一对一的类就可以完成; 嵌套查询是先查一个表,根据这个表里面的结果的 外键id...有联合查询和嵌套查询。...联合查询是几个表联合查询,只查询一次,通过在resultMap里面的collection节点配置一对多的类就可以完成;嵌套查询是先查一个表,根据这个表里面的 结果的外键id,去再另外一个表里面查询数据,
MyBatis 有两种不同的方式加载关联: 嵌套查询:通过执行另外一个 SQL 映射语句来返回预期的复杂类型。 嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集。...这个属性值是类的完全限定名或者是一个类型处理器的实现, 或者是类型别名。 association的嵌套查询 属性 描述 column 来自数据库的列名,或重命名的列标签。...这会引起 prop1 和 prop2 以参数对象形式来设置给目标嵌套查询语句。 select 另外一个映射语句的 ID,可以加载这个属性映射需要的复杂类型。...这 是一种替代方法来调用另外一个查询语句。这允许你联合多个表来合成到 resultMap 一个单独的结果集。这样的结果集可能包含重复,数据的重复组需要被分解,合理映射到一个嵌套的对象图。...比如,在一些情况下你也许想排除 从缓存中查询特定语句结果,或者你也许想要一个查询语句来刷新缓存。相似地,你也许有 一些更新语句依靠执行而不需要刷新缓存。
对于每个环境 environment,我们需要配置 dataSource 和 transactionManager。...当然也可以不用为每一个JavaBean 单独定义别名,你可以为提供需要起别名的JavaBean 所在的包,Mybatis会自动扫描包内定义的JavaBeans,然后分别为JavaBean注册一个小写字母开头的非完全限定的类名形式的别名...此参数只可以在查询设置中被覆盖。 任意正整数 Not Set (null) safeRowBoundsEnabled 允许在嵌套语句中使用分页(RowBounds)。如果允许使用则设置为false。...此参数只可以在查询设置中被覆盖。 任意正整数 Not Set (null) safeRowBoundsEnabled 允许在嵌套语句中使用分页(RowBounds)。...(从 3.2.3 版本开始) 类型别名或者全类名. Not set 三、映射文件讲解 我们通过映射器配置文件配置了映射语句,同时创建一个完全对应的一个映射器接口。接口名跟配置文件名相同。
此参数只可以在查询设置中被覆盖。 任意正整数 Not Set (null) safeRowBoundsEnabled 允许在嵌套语句中使用分页(RowBounds)。如果允许使用则设置为false。...true false safeResultHandlerEnabled 允许在嵌套语句中使用分页(ResultHandler)。如果允许使用则设置为false。...true | false False localCacheScope MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。...默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。...mapper 映射器:我们添加的SQL语句的映射文件要被配置文件能够发现,在自动发现方面mybatis在这方面并没有实现,所以我们需要通过mapper标签来关联映射文件。 方式一:一个个扫描 <!
属性都是可外部配置且可动态替换的,可以在 Java 属性文件中配置,然后其中的属性就可以在整个配置文件中使用 ${} 来替换需要动态配置的属性值。...只需要两步我们就将一个插件配置完毕了,然后根据相关 API 使用该插件即可。 ☞ 相关依赖 <!...1.2.1 select 查询语句是 MyBatis 中最常用的元素之一,光能把数据存到数据库中价值并不大,只有还能重新取出来才有用,多数应用也都是查询比修改要频繁。...select 元素允许你配置很多属性来配置每条语句的作用细节: 属性 描述 id 在命名空间中唯一的标识符,可以被用来引用这条语句 parameterType 将会传入这条语句的参数类的完全限定名或别名...这个设置仅针对嵌套结果 select 语句适用:如果为 true,就是假设包含了嵌套结果集或是分组,这样的话当返回一个主结果行的时候,就不会发生有对前面结果集的引用的情况。
例,我们想查询平均年龄在20岁以上的班级 能用下面的语句吗?...: 为什么要子查询?...这时就需要用到子查询来取得完整的信息。 什么是子查询?子查询就是嵌套在主查询中的查询。...接下来回到上面的SQL语句中,可以看出本条子查询的嵌套是在SELECT位置(括号括起来的部分),它与学号、学生姓名以逗号分隔开并列在SELECT位置,也就是说它是我们想要查出的一列, 子查询中查出的是,...而此篇博文目的是为了对嵌套查询、别名的用法等等打下基础,毕竟只是写法变了,思路还是相似的。 感谢您的浏览,希望能对您有所帮助。
1) Mybatis 和 hibernate 不同,它不完全是一个ORM 框架,因为 MyBatis需要程序员自己编写 Sql 语句。...第二种是使用标签和 SQL 列的别名功能,将列的别名书写为 对象属性名。...有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次, 通过在 resultMap 里 面配置 association 节点配置一对一的类就可以完成;嵌套查询是先查一个表,根据这个表里面的结果的...有联合查询和嵌套查询。...联合查询是几个表联合查询,只查询一次,通过在 resultMap 里面的 collection 节点配置一对多的类就可以完成;嵌套查询是先 查一个表,根据这个表里面的 结果的外键 id,去再另外一个表里面查询数据
事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。...视图可以嵌套,即可以利用从其他视图中检索数据的查询来构成视图。所允许的嵌套层数在不同的DBMS中有所不同(嵌套视图可能会严重降低查询的性能,因此在产品环境中使用之前,应该对其全面测试)。...许多DBMS禁止在视图查询中使用ORDER BY子句。 有些DBMS要求对返回的所有列进行命名,如果列是计算字段,则需要 使用别名。 视图不能索引,也不能有关联的触发器或默认值。...7.为什么要使用视图(View)?...6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
,所以在大部分情况下不需要大量配置它,只需要修改一些常用的规则即可,比如自动映射、驼峰命名映射、级联规则、是否启动缓存、执行器(Executor)类型等 配置项 作用 配置选项 默认值 cacheEnabled...Set (null) defaultFetchSize 设置数据库驱动程序默认返回的条数限制,此参数可以重新设置 任何正整数 Not Set (null) safeRowBoundsEnabled 允许在嵌套语句中使用分页...如果允许,设置 false true|false false safeResultHandlerEnabled 允许在嵌套语句中使用分页(ResultHandler)。...默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。...我们平时没有做任何关于 TypeHandler 的配置,为什么实体类对象里面的 String 属性,可以保存成数据库里面的 varchar 字段或者保存成 char 字段呢,这是因为 MyBatis 中已经内置了很多
简介 除了配置相关之外,另一个核心就是SQL映射,MyBatis 的真正强大也在于它的映射语句。...通过别名,将数据库列名通过别名与属性字段建立映射关系,然后Mybatis就可以进行自动匹配了 但是这种形式如果有多条SQL,每个SQL中都需要有别名,而且,如果后续有原因修改对象的字段名字,怎么办?...另外的方式就是使用ResultMap,ResultMap的基础用法就是相当于设置别名 但是借助于ResultMap,将别名的映射关系,维护在ResultMap中,所有使用到此映射类型的SQL都只需要关联这个...对于collection也可以采用类似association中的select元素进行嵌套查询 原理也是类似,当检索出来结果后,借助于select指定的查询语句,循环查询 嵌套查询的形式 select属性,可以进行嵌套查询,通过嵌套查询的方式,相当于经过这个select,内部的字段映射部分被路由到另一个ResultMap(ResultType)中了 而不需要在这个ResultMap
MyBatis configuration标签中又包含了以下这些标签,每个标签都有不同的作用 typeAliases 别名的使用 在mybatis-config.xml中的settings标签下面增加别名的配置...FULL 会自动映射任意复杂的结果集(无论是否嵌套),默认为PARTIAL defaultExecutorType:配置默认的执行器。...aColumn 的类似映射,默认是false localCacheScope:MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circula r references)和加速重复嵌套查询...--MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。...select – 映射查询语句 sql 标签 sql标签用来配置sql片段,针对重复次数较多的SQL片段,并使用include标签来引用配置的sql片段 <sql id="Base_Column_List
领取专属 10元无门槛券
手把手带您无忧上云