MyBatis实现原理以及配置详解

23 篇文章 0 订阅
2 篇文章 0 订阅
在开发中持久层框架MyBatis是支持定制化sql,存储过程以及高级映射的,在使用时候能够动态的执行sql也是MyBatis的核心竞争力之一
1.Mybatis配置详解:
  1. 创建数据源,先读取properties文件中的数据,连接数据库url,driver,name,pwd等信息
  2. 创建sqlsession工厂函数对象用来调用mapper映射操作
  3. 创建dao层的实现类
  4. 配置事务管理类
	这里也可以用这一段替代读取peoperties文件,因为多个文件使用的是一个IOC容器,所以只要在一个文件中读取就可以
    <context:property-placeholder location="classpath:properties/*.properties"/>
	<!-- 创建数据库连接池,也就是创建数据源,jdbc连接 -->
	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location" value="classpath:jdbc.properties"></property>
	</bean>
	<bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="jdbcUrl" value="${url}"></property>
		<property name="driverClass" value="${driver}"></property>
		<property name="user" value="${name}"></property>
		<property name="password" value="${pwd}"></property>
		<!-- 初始化的连接数量 -->
		<property name="initialPoolSize" value="10"></property>
		<!-- 最大连接数 -->
		<property name="maxPoolSize" value="50"></property>
	</bean>
	
	<!-- 使用spring来管理mybatis -->
	<!-- myBatista需要创建sessionFactory对象来调用mapper -->
	<!--创建SqlSessionFactory,mybatis中的工厂函数对象  -->
	<bean class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 首先是连接数据库,上面数据源创建好后,这里注入,使用dataSource属性,引用用ref -->
		<property name="dataSource" ref="datasource"></property>
		<!-- 读取mapper映射文件 使用mapperLocations属性,可以使用目录文件通配符,可以同时读取多个mapper文件-->
		<property name="mapperLocations" value="classpath:com/mapper/*.xml"></property>
		<!-- 加载MyBatis配置文件 -->
		<property name="plugins">
		    <array>
		      <bean class="com.github.pagehelper.PageInterceptor">
		        <property name="properties">
		          <!--使用下面的方式配置参数,一行配置一个 -->
		          <value>
		            helperDialect=mysql
		          </value>
		        </property>
		      </bean>
		    </array>
		  </property>
	</bean>

	<!-- 创建dao的impl实现类 ,进入MapperScannerConfigurer的class来创建-->
	<!-- 如果使用了通用mapper,需要在该配置里把引用的第一个文件名org改成tk就可以了 -->
	<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- basePackage该标签就是自动去value值里面对应的包下面找接口文件,然后再自动关联mapper映射文件,自动生成接口的实现类-->
		<!-- 可以在service中使用@AutoWired注解来引用dao层对象的实现类注入 -->
		<property name="basePackage" value="com.dao"></property>
	</bean>

	<!-- 配置事务管理 ,创建事务管理类-->
	<!-- 先导入DataSourceTransactionManager类 -->
	<bean id="txmanager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!-- 如果要管理事务的提交,回滚等操作,需要数据库连接,那么就需要注入数据源对象 -->
		<property name="dataSource" ref="datasource" ></property>
	</bean>
	<!-- 利用注解来实现事务管理类 ,先添加激活事务注解标签,注入对应的事务管理类-->
	<tx:annotation-driven transaction-manager="txmanager"/>
	<!-- 然后再java中需要进行事务管理的service类中的方法或类名上方添加注解@Transactional 来实现事务控制-->
  1. properties文件中的数据库连接信息
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/zhizhe?useUnicode=true&characterEncoding=utf8&autoReconnect=true
jdbc.username=root
jdbc.password=admin
  1. 这里还有两个配置是spring中的配置信息就是扫描Ioc容器和激活注解的配置,因为是spring整合mybatis,这两段是放在spring配置文件当中的
<!-- 如果程序中使用了注解,注解本身并没有特别的功能 我们需要让IOC容器知道类中哪里使用了注解,
	那么就去创建对应的bean context:component-scan作用用于扫描注解类 base-package代表注解类所在的包,
	可以设置多个值,用逗号分隔,也可以使用通配符,也可以是使用父级包名 -->
	<context:component-scan base-package="com.service"></context:component-scan>
	<!-- 激活aop注解 -->
	<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
2.Mybatis执行过程:

在这里插入图片描述
在这里插入图片描述

  1. SqlSession:作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能
  2. Executor: MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
  3. StatementHandler:封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。
  4. ParameterHandler:负责对用户传递的参数转换成JDBC Statement 所需要的参数,
  5. ResultSetHandler:负责将JDBC返回的ResultSet结果集对象转换成List类型的集合;
  6. TypeHandler:负责java数据类型和jdbc数据类型之间的映射和转换
  7. MappedStatement:MappedStatement维护了一条<select|update|delete|insert>节点的封装,
  8. SqlSource:负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
  9. BoundSql :表示动态生成的SQL语句以及相应的参数信息
  10. Configuration:MyBatis所有的配置信息都维持在Configuration对象之中。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值