【Spring与MyBatis整合】

导读:本篇文章讲解 【Spring与MyBatis整合】,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

准备工作(MyBatis基本):
1.导入mybatis-spring、spring-jdbc、spring-tx三个jar包
2.编写实体类、Mapper接口、Mapper.xml
3.编写mybatis-config.xml核心配置文件
整合步骤(基本):
1.导入commons-dbcp、commons-pool
2.编写applicationContext-mybatis.xml文件,至少包含4个bean

<bean id="dataSource">
<bean id="sqlSessionFactory">
	<property name="dataSource" ref="dataSource"/>
	<property name="configLocation" value="classpath:mybatis-config.xml"/>
	<property name="mapperLocations" >
		<list>
			<value>classpath:xx/xxx/xxx/**/*.xml</value>
	
3.Mapper进行查询
	方式1:教材183(缺点:每个Mapper接口需要编写实现类):
		<bean id="sqlSessionTemplate">
			<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
		<bean id="xxxMapper" class="xx.xxx.dao.xxxMapperImpl">
			<property name="sqlSession" ref="sqlSessionTemplate"/>
		sqlSession.selectList("xx.xxx.dao.user.XxxMapper.getList",xxx);

	改良1:教材185-186(缺点:每个Mapper接口需要编写实现类):
		让MapperImpl继承自SqlSessionDaoSupport类
		<bean id="xxxMapper" class="xx.xxx.dao.xxxMapperImpl">
			<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
			
	改良2:教材187-188(优点:Mapper接口不用写实现类;缺点:每个需要配置bean):
		Mapper.xml
		Mapper接口
		<bean id="xxxMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
			<property="mapperInterface" value="cn.smbms.dao.user.UserMapper"/>
			<property="sqlSessionFactory" ref="sqlSessionFactory"/>
	
	最终方案:教材188-189(Mapper不需要实现类,也不需要配置bean)
		<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
			<property name="basePackage" value="cn.smbms.dao,cn.smbms.dao2"/>
		Spring自动给Mapper接口的创建首字母小写的bean,按该名称注入即可

2.Spring和Mybatis整合的声明式事务
2.1.一般情况下:增删改的业务方法,传播REQUIRED(默认值),查询方法SUPPORTS
2.2.事务隔离级别:
未提交读:
事务A修改的数据,未提交的情况下,事务B也能看见(最低隔离级别)
提交读(又叫不可重复读):
事务A修改的数据,未提交的情况下,事务B看不见

		并发量大的情况下,
		事务A查userName=wangchao的User数据,
		事务B把userName=wangchao修改为userName=hexingfeng
		事务A按userName=wangchao作为条件进行update,预期受影响的行数是1,实际0
		
		加行锁for update(把符合查询条件的行锁住不让其他事务修改)
	可重复读(又叫幻影读):insert、delete
		事务A查了性别=男的User数据,10条
		事务B插入了一条性别=男的User数据,9条
		事务A修改性别=男的数据,预期是受影响是10条,实际会得到9,就像产生幻影一样
		
		加表锁
	串行读:
		数据最安全,并发效率最低,所有事务排队
		
2.3.步骤:
	1.定义POJO、Mapper接口、Mapper.xml、Service接口和实现类
	2.编写mybatis-config.xml 
	3.编写applicationContext-mybatis.xml 
		<context:component-scan />
		<bean id="dataSource">
		<bean id="sqlSessionFactory">
		<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<bean id="txManager" class="">
		<tx:advice id="txAdvice" transactionManager="txManager">
			<tx:attributes>
				<tx:method name="add*">
		<aop:config>
			<aop:pointcut id="po" expression="">
			<aop:advisor advice-ref="txAdvice" pointcut-ref="po">

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/116007.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!