17.浅析Mybatis(Mybatis框架构成)

1.mybatis是什么?

 

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

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

 

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

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

 

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

 

 

1.1  MyBatis的优点

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

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

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

·        提供了很多第三方插件(分页插件 / 逆向工程)

·        能够与Spring很好的集成

2.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对象,sqlid即是MappedStatementid

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

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


3.举个小例子:


1)       映射文件命名:

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

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

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

在sqlMapConfig.xml中加载User.xml:

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

 

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

      

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值