MyBatis之旅-Mybatis进阶

上一篇博文中讲过了如何创建一个简单的mybatis程序,这一篇博文中要讲的是进一步深入了解和使用mybatis。

在上一篇博文中的例子是根据id来查找一个用户,id是一个简单的int类型,那么如果要根据一个用户对象来查询一个用户应该怎么做啦?只需要对<select>节点进行简单的修改即可。

<select id="selectByUser" paramterType="test.User" resuiltType="test.User">

select * from user where name like ‘%${name}%‘ and password=#{password}

</select>

这里有两个新的东西,第一个就是${},之前在使用简单类型作为输入参数的时候我们使用的是#{},而${}的意思是拼装sql,也就是${}会将输入参数不加修饰的传入到这里,而如果是#{}而且传入的参数为字符串,那么它会自动为传入的参数值加上单引号,比如这里的#{password},结果是password=‘123‘,而‘%${name}%‘的结果是‘%张三%‘,如果是‘%#{name}%‘,那么结果就变成了‘%‘张三‘%‘。这就是#{}和${}的区别。

第二个就是paramterType是一个包装类型,而且select语句中有两个参数,而mapper接口定义的方法中只有一个输入参数,那么这个怎么解决啦?这里的name和password和User类也就是paramterType定义的类型中的name和password属性相同,那么mybatis就会自动的将传入参数User中的name赋值到这里${name}和#{password}。这就是mybatis中的包装类型输入参数。还可以这样来定义传入参数${user.name}、#{user.passwrod},这里的user就是调用mapper接口的selectByUser时传入的User对象。传出参数也可以使用包装类型,结果类型中如果包含和sql查询结果相同名称的属性,那么mybatis就会把查询具有相同名称的结果内容封装到结果参数中,例如:修改一下select节点的sql,

select id id_,name name_ from user where name like ‘%${name}%‘ and password=#{password}

这是为查询结果的字段定义了别名,但是User对象中没有id_和name_这两个同名称的属性,所以这两个结果就不会被封装到User结果参数中,为了将这两个结果封装到User结果参数中有两种解决方案,就是使用一个包装类型继承User然后定义id_和name_,并绑定到User的id和name属性上,另一种方案则是mybatis提供了resultMap的来解决。正常的方式是使用resultMap来处理。resultMap是映射文件中的一个节点,例如:

<resultMap type="test.User" id="userResultMap"> <!-- 其中type是输出结果参数类型,id是唯一标准 -->

<id column="id_" property="id" /> <!-- id节点是唯一主键 column是查询结果,property是属性名称 -->

<result column="name_" property="name" /> <!-- result是普通列 -->

</resultMap>

然后在select 节点上加入resultMap="userReusltMap" 这里的userResultMap就是上面定义的resultMap的id,这样就能将其关联,然后输出结果参数就能够正确封装查询结果。

后面是if foreach sql片段的东西,这三个东西比较简单,需要的时候可以在查询相关资料。

时间: 2025-01-04 15:34:42

MyBatis之旅-Mybatis进阶的相关文章

mybatis之旅第一篇-初识mybatis

一.JDBC的问题 为什么我们要使用mybatis,是因为JDBC存在以下问题 1. 数据库连接创建.释放频繁造成系统资源浪费,从而影响系统性能.如果使用数据库连接池可解决此问题. 2. Sql语句在代码中硬编码,造成代码不易维护,实际应用中sql变化的可能较大,sql变动需要改变java代码. 3. 使用preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不一定,可能多也可能少,修改sql还要修改代码,系统不易维护. 4. 对结果集解析存在硬编码(查询

《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项

0.写在前面 MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓存机制上.MyBatis提供了一级缓存.二级缓存 这两个缓存机制,能够很好地处理和维护缓存,以提高系统的性能.本文的目的则是向读者详细介绍MyBatis的一级缓存,深入源码,解析MyBatis一级缓存的实现原理,并且针对一级缓存的特点提出了在实际使用过程中应该注意的事项. 读完本文,你将会学到: 1.什么是一级缓存?为什么使用一级缓存? 2.MyBatis的一级缓存是怎样组织的?(即SqlSes

MyBatis动态SQL————MyBatis动态SQL标签的用法

1.MyBatis动态SQL MyBatis 的强大特性之一便是它的动态 SQL,即拼接SQL字符串.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号.利用动态 SQL 这一特性可以彻底摆脱这种痛苦. 通常使用动态 SQL 不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意的 SQL 映射语句中. 动态 SQL 元素和

mybatis实战教程(mybatis in action),mybatis入门到精通

转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看中文的:http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html) 写在这个系列前面的话: 以前曾经用过ibat

mybatis实战教程(mybatis in action)之一:开发环境搭建

文章转载自http://www.yihaomen.com/article/java/302.htm 什么是mybatisMyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想无论是用过的hibernate,myb

MyBatis MapperScannerConfigurer配置――MyBatis学习笔记之八

MyBatis MapperScannerConfigurer配置——MyBatis学习笔记之八 2012-09-02 20:01:42 标签:Spring MyBatis MapperScannerConfigurer bean默认命名 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://legend2011.blog.51cto.com/3018495/980150 在上一篇博文的示例中,我们在beans.xml中配置了stu

mybatis实战教程(mybatis in action),mybatis入门到精通(转)

转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看中文的:http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html) 写在这个系列前面的话: 以前曾经用过ibat

《深入理解mybatis原理》 MyBatis事务管理机制

MyBatis作为Java语言的数据库框架,对数据库的事务管理是其非常重要的一个方面.本文将讲述MyBatis的事务管理的实现机制.首先介绍MyBatis的事务Transaction的接口设计以及其不同实现JdbcTransaction 和 ManagedTransaction:接着,从MyBatis的XML配置文件入手,讲解MyBatis事务工厂的创建和维护,进而阐述了MyBatis事务的创建和使用:最后分析JdbcTransaction和ManagedTransaction的实现和二者的不同

《深入理解mybatis原理》 Mybatis数据源与连接池

对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题.本文将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池. 本文首先会讲述MyBatis的数据源的分类,然后会介绍数据源是如何加载和使用的.紧接着将分类介绍UNPOOLED.POOLED和JNDI类型的数据源组织:期间我们会重点讲解POOLED类型的数据源和其实现的连接池原理. 以下是本章的组织结构: 一.MyBatis数据源DataSource分类 二.数据源DataSour