1.mybatis是什么?

mybatis是一个持久层的框架是apache下的顶级项目。

mybatis托管到goolecode下,再后来托管到github下(https://github.com/mybatis/mybatis-3/releases)。

mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成半自动化大部分需要程序员编写sql满足需要sql语句。

MyBatis是一个实现了JPA规范的用来连接数据库并对其进行CRUD操作的开源框架

mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)


1.1  MyBatis的优点

·        简单易学,容易上手(相比于Hibernate) —- 基于SQL编程

·        消除了JDBC大量冗余的代码,不需要手动开关连接

·        很好的与各种数据库兼容因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持,而JDBC提供了可扩展性,所以只要这个数据库有针对Java的jar包就可以就可以与MyBatis兼容),开发人员不需要考虑数据库的差异性。

·        提供了很多第三方插件(分页插件 / ****)

·        能够与Spring很好的集成

 

2.mybatis框架

框架:初识Mybatis

 

框架:初识Mybatis

 

下面作简要概述:

1.    SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句,此文件需要在SqlMapConfig.xml中加载。

2.   通过mybatis环境等配置信息构造SqlSessionFactory(即会话工厂)。

3.    由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

4.    mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

5.    MappedStatement也是mybatis一个底层封装对象它包装了mybatis配置信息及sql映射信息等mapper.xml文件中一个sql对应一个MappedStatement对象,sql的id即是MappedStatement的id

6.MappedStatement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过MappedStatement在执行sql前将输入的java对象映射至sql中,输入参数映射就是JDBC编程中对preparedStatement设置参数。

7.MappedStatement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过MappedStatement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于JDBC编程中对结果的解析处理过程。

 

3.举个小例子:

框架:初识Mybatis

1)       映射文件命名:

User.xml(原始ibatis命名),mapper代理开发映射文件名称叫XXXMapper.xml,比如:UserMapper.xml、ItemsMapper.xml

在映射文件中配置sql语句。

 

2)     在SqlMapConfig.xml加载映射文件

在sqlMapConfig.xml中加载User.xml:

框架:初识Mybatis

使用User.xml,添加根据用户名称模糊查询用户信息的sql语句。

 

框架:初识Mybatis

4:小结

parameterType

在映射文件中通过parameterType指定输入参数的类型。

resultType

在映射文件中通过resultType指定输出结果的类型。

 

#{}和${}

 

#{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。

如果接收简单类型,#{}中可以写成value或其它名称。

#{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

 

${}表示一个拼接符号,会引用sql注入,所以不建议使用${}。

${}接收输入参数,类型可以是简单类型,pojo、hashmap。

如果接收简单类型,${}中只能写成value。

${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

selectOne和selectList

 

selectOne表示查询出一条记录进行映射。如果使用selectOne可以实现使用selectList也可以实现(list中只有一个对象)。

 

selectList表示查询出一个列表(多条记录)进行映射。如果使用selectList查询多条记录,不能使用selectOne。

 

如果使用selectOne报错:

org.apache.ibatis.exceptions.TooManyResultsException:Expected one result (or null) to be returned by selectOne(), but found: 4

相关文章: