对Mybatis的理解

  首先Mybatis是一个对象关系映射(Object Relational Mapping,简称ORM)框架,是为了解决面向对象与关系数据库存在的互不匹配的现象。也就是说Mybatis的关注点在于对象与数据库之间的映射,Mybatis会把从数据库中得到的松散数据进行封装,使开发者直接拿到一个对象。Mybatis其实是对jdbc的操作数据库的过程进行了封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

Mybatis需要手写Sql语句,对jdbc的封装程度不如hibernate,但因此也灵活得多。

在使用mybatis时,只需要关注三个部分(1.sql语句 2.输入参数 3.输出参数)

输入参数映射->sql语句中的占位符

1.输入参数可以是基本类型

如果只有一个参数那么可以不使用@Param注解,但如果有多个参数,必须使用@Param注解,用于映射参数->占位符。

2.也可以是pojo类型,但如果是pojo类型,那么pojo中的属性必须与sql语句中的占位符一样

例如上图,那么User类中必须有name和id这两个属性名。否则会报Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘name2‘ in ‘class me.gacl.domain.User‘的错误。(从异常上也可以看出使用到了反射)

3.还可以这样使用pojo类型

输出参数映射->数据库表中的字段

输出参数一般的类型都是pojo或者是list<pojo>类型。(即一对一或者一对多的关系)

一般要求是pojo中的属性名要和数据库表中的字段一样才能完成映射(但是也可以通过别的方式完成映射,具体方法可以参考Mybatis 字段映射问题.note)。

如果查询出来的列名和pojo中的属性名全部不一致,不会创建pojo对象。

只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象,但其他属性值为默认值。

输入映射:

parameterType:指定输入参数类型可以简单类型、pojo、hashmap。

对于综合查询,建议parameterType使用包装的pojo,有利于系统 扩展。

输出映射:

resultType

查询到的列名和resultType指定的pojo的属性名一致,才能映射成功。(使用了反射机制,属性名和列名不一致就无法通过反射找到setter方法)

reusltMap

可以通过resultMap 完成一些高级映射。

如果查询到的列名和映射的pojo的属性名不一致时,通过resultMap设置列名和属性名之间的对应关系(映射关系)。可以完成映射。

高级映射:

将关联查询的列映射到一个pojo属性中。(一对一)

将关联查询的列映射到一个List<pojo>中。(一对多)

转载至:http://www.cnblogs.com/lanqi/p/7851552.html

原文地址:https://www.cnblogs.com/jylee/p/8810268.html

时间: 2024-11-10 11:07:53

对Mybatis的理解的相关文章

mybatis深入理解之 # 与 $ 区别以及 sql 预编译

mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = "ruhua"; 上述 sql 中,我们希望 name 后的参数 "ruhua" 是动态可变的,即不同的时刻根据不同的姓名来查询用户.在 sqlMap 的 xml 文件中使用如下的 sql 可以实现动态传递参数 name: select * from user whe

mybatis 基础理解

1.主要的类 1.1 SqlSessionFactoryBuilder 用于创建SqlSessionFactory,要通过配置文件也可以是代码. 主要的方法 SqlSessionFactory build(InputStream inputStream) SqlSessionFactory build(InputStream inputStream, String environment) SqlSessionFactory build(InputStream inputStream, Prop

mybatis(ibatis)理解

Mybatis MyBatis是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架. MyBatis消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索. MyBatis使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plan Old Java Objects,普通的 Java对象)映射成数据库中的记录. MyBatis核心 使用步骤:1.导入jar包2.新建一个MyBatis的配置文件,文件类型是xml,名字随便起.加上文件的dtd验证文件头,<

mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译

mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = "ruhua"; 上述 sql 中,我们希望 name 后的参数 "ruhua" 是动态可变的,即不同的时刻根据不同的姓名来查询用户.在 sqlMap 的 xml 文件中使用如下的 sql 可以实现动态传递参数 name: select * from user whe

mybatis架构理解

1. mybatis配置 SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息. mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句.此文件需要在SqlMapConfig.xml中加载. 2. 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂 3. 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行. 4. mybatis底层自定义了Executo

关于mybatis的理解

1.IJ Intellij Idea 智能的想法 2.MyEclipse 启动后占用的内存是300mb---500mb Idea的内存 400---700mb MyEclipse中的一个工作区(workspace)可以有N个project idea 一个Project有多个Module 3.创建一个Project 选择的是Maven--->archetype(骨架) 4.创建工程的时候,有一个快速的设置 设置如下 archetypeCatalog = internal 5.保存code 的时候一

Mybatis缓存理解

缓存 接触过hibernate的同学都知道hibernate中有个二级缓存,mybatis也存在二级缓存.mybatis中二级缓存有什么作用呢?mybatis提供查询缓存,可以提高查询效率,减轻数据库的压力. 一级缓存 一级缓存是session级别的缓存,基于PerpetualCache的HashMap本地存储,其存储作用域为Session,不能跨不同的session,当Session flush或close之后,该Session中的所有Cache就将清空. SqlSession session

mybatis深入理解(一)-----Mybatis初始化机制详解

对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章将通过以下几点详细介绍MyBatis的初始化过程. 一. MyBatis的初始化做了什么 1.configuration 任何框架的初始化,无非是加载自己运行时所需要的配置信息.MyBatis的配置信息,大概包含以下信息,其高层级结构如下: × configuration 配置 × properties 属性    × settings 设置   × typeAliases 类型命名   × typeHandlers

mybatis深入理解(二)-----Mybatis数据源与连接池

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