准备工作(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