MyBatis基本概念

        之前讲过一个ORM框架,了解到Hibernate有许多优点,比如开源、轻量级封装、可扩展性高等优点。但是Hibernate存在着门槛高的问题,开发代价比较高,虽然其功能比较强大,自动化程度较高,但是正是由于其将sql语言进行封装,才导致后期维护比较困难,sql编写不够灵活等问题。因此,Hibernate适用于开发稳定的项目,而不是适合后期维护比较多的项目。因此,随着互联网的发展,软件包括应用等迭代升级是不可避免的,那么这时候使用Hibernate就会显得代价过高。因此,引入了另一个持久层框架:MyBatis。

1.何谓MyBatis
         MyBatis  本是 apache 的一个开源项目 iBatis , 2010 年这个项目由apache software foundation  迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。 MyBatis 是一个优秀的持久层框架,它对jdbc 的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。 Mybatis 通过xml 或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

2.Mybatis与Hibernate对比
1.从开发速度上来看:
        MyBatis框架相对于比较简单,容易掌握,而Hibernate门槛比较高,需要掌握的知识面比较广。但是MyBatis的配置文件比较多。

2.从SQL方面来看:
         Mybatis Hibernate 都属于持久层的框架, Mybatis 是对 JDBC 操作数据库的的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建 connection 、创建 statement 、手动设置参数、结果集检索等 JDBC 繁杂的过程代码。

3.从移植性来看:
        Hibernate数据库移植性很好,Hibernate具有数据库无关性的特点;而MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。

4.缓存机制
          Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

5.灵活性
        MyBatis程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。而Hibernate则是将SQL语句进行封装,如果进行软件版本的迭代,则会显得不具备灵活性。

5.适合行业
        MyBatis适合于互联网电商行业;而Hibernate适合于传统行业比如ERP、CRM、OA等。因此目前电商与互联网的高速发展,使得MyBatis的使用率逐渐提高。

3.MyBatis架构
          Mybatis架构具体如下图所示:

     1.首先是MyBatis的配置:即Mybatis-config.xml文件(文件名没有特别要求),其中配置框架运行环境。而Mapper文件则是根据对数据库进行CRUD操作的映射,该文件内部还含有原生的sql语句,这也是MyBatis框架的核心之一。而且Mapper文件都需要在Mybatis-config.xml文件中加载。

     2.SqlSessionFactory的获取:需要读取Mybatis-config.xml文件,从而能够创建SqlSessionFactory对象,例如下列代码:
//读取MyBatis配置文件
		InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
		//初始化mybatis,创建SqlSessionFactory类的实例。
		SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
      3.获取SqlSession:通过 SqlSessionFactory的openSession()方法获取SqlSession,如下所示:
            //创建Session实例
		SqlSession session=sqlSessionFactory.openSession();


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

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

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

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



4.配置文件
1.MyBatis全局配置文件:mybatis-config.xml。主要配置了框架的运行环境,例如如下配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
 
<!-- XML配置文件包含对MyBatis系统的核心设置 -->
<configuration>
	<!-- 指定MyBatis所用日志的具体实现 -->
	<settings>
		<setting name="logimpl" value="LOG4J"/>
	</settings>
	<environments default="development">
  		<environment id="development">
    		<transactionManager type="JDBC">
     		 	<property name="..." value="..."/>
    		</transactionManager>
    		<dataSource type="POOLED">
      			<property name="driver" value="org.gjt.mm.mysql.Driver"/>
      			<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8"/>
      			<property name="username" value="root"/>
      			<property name="password" value="root"/>
    		</dataSource>
  		</environment>
	</environments>
	<mappers>
		<mapper resource="com.mybatis.mapper.UserMapper.xml"/>
	</mappers>
</configuration>
2.log4j.properties:上面的全局配置中,日志文件使用的是LOG4J,因此这里需要配置一个log4j.properties的文件,例如:
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
3.Mapper文件:Mapper文件就是数据库的映射文件,并且其中定义要执行的SQL语句,并且定义相应的mapper接口的位置,完成映射,例如如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="UserMapper">
	<insert id="insertUser" parameterType="com.mybatis.model.impl.User" useGeneratedKeys="true"
	keyProperty="id">
		insert into TB_USER(name,sex,age)
		values(#{name},#{sex},#{age})
	</insert>
</mapper>











  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值