框架:初识Mybatis

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框架

 

 

下面作简要概述:

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.举个小例子:

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


 Mybatis是什么?

mybatis是一个持久层框架,mybatis是一个不完全的ORM框架。sql语句需要程序员自己去编写,但是mybatis也有映射(输入参数映射、输出结果映射)。

mybatis入门门槛不高,学习成本低,让程序员把精力放在sql语句上,对sql语句优化非常方便,适用与需求变化较多项目,比如互联网项目。


mybatis框架执行过程:

1、配置mybatis的配置文件,SqlMapConfig.xml(名称不固定)

2、通过配置文件,加载mybatis运行环境,创建SqlSessionFactory会话工厂

       SqlSessionFactory在实际使用时按单例方式。

3、通过SqlSessionFactory创建SqlSession

       SqlSession是一个面向用户接口(提供操作数据库方法),实现对象是线程不安全的,建议sqlSession应用场合在方法体内。

4、调用sqlSession的方法去操作数据。

       如果需要提交事务,需要执行SqlSession的commit()方法。

5、释放资源,关闭SqlSession


mybatis开发dao的方法:

1、原始dao 的方法

       需要程序员编写dao接口和实现类

       需要在dao实现类中注入一个SqlSessionFactory工厂。

 

2、mapper代理开发方法(建议使用)

       只需要程序员编写mapper接口(就是dao接口)

       程序员在编写mapper.xml(映射文件)和mapper.java需要遵循一个开发规范:

       1、mapper.xml中namespace就是mapper.java的类全路径。

       2、mapper.xml中statement的id和mapper.java中方法名一致。

       3、mapper.xml中statement的parameterType指定输入参数的类型和mapper.java的方法输入参数类型一致。

       4、mapper.xml中statement的resultType指定输出结果的类型和mapper.java的方法返回值类型一致。

 

SqlMapConfig.xml配置文件:可以配置properties属性、别名、mapper加载。。。


输入映射:

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

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

 

输出映射:

       resultType:

              查询到的列名和resultType指定的pojo的属性名一致,才能映射成功。

       reusltMap:

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

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

              高级映射:

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

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

 

动态sql:(重点)

       if判断(掌握)

       where

       foreach

       sql片段(掌握)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值