java--spring---事务配置和Mybatis整合

一、事务的配置

1.事务的隔离级别:有4个值。

	DEFAULT:采用 DB 默认的事务隔离级别。MySql 的默认为 REPEATABLE_READ; Oracle默认为 READ_COMMITTED。
	➢ READ_UNCOMMITTED:读未提交。未解决任何并发问题。
	➢ READ_COMMITTED:读已提交。解决脏读,存在不可重复读与幻读。
	➢ REPEATABLE_READ:可重复读。解决脏读、不可重复读,存在幻读
	➢ SERIALIZABLE:串行化。不存在并发问题。

2.事务的传播行为

控制业务方法是不是有事务的, 是什么样的事务的。

7个传播行为,表示你的业务方法调用时,事务在方法之间是如果使用的。

PROPAGATION_REQUIRED
PROPAGATION_REQUIRES_NEW
PROPAGATION_SUPPORTS
以上三个需要掌握的
PROPAGATION_MANDATORY
PROPAGATION_NESTED
PROPAGATION_NEVER
PROPAGATION_NOT_SUPPORTED

3.spring框架中提供的事务处理方案

1. 使用注解。

spring框架自己用aop实现给业务方法增加事务的功能, 使用@Transactional注解增加事务。@Transactional注解是spring框架自己注解,放在public方法的上面,表示当前方法具有事务。可以给注解的属性赋值,表示具体的隔离级别,传播行为,异常信息等等

1.1使用@Transactional的步骤:
1.需要声明事务管理器对象
 <bean id=“xxx" class="...DataSourceTransactionManager"> 
1.2开启事务注解驱动, 告诉spring框架,我要使用注解的方式管理事务。
1.3.spring事务注解实例
<!--使用spring的事务处理-->
<!--声明事务管理器-->
<bean class="org.springframework.jdbc.support.JdbcTransactionManager" id="transactionManager">
    <!--连接的数据库,指定数据源-->
    <property name="dataSource" ref="dataSource"></property>
</bean>
<!--开启事务注解驱动,告诉spring使用注解管理对象-->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
public interface DeptService {
	public void testTran();
}

@Service
@Transactional
//添加事务 
public class DeptServiceImpl implements DeptService {
	@Override
	public void testTran() {
		Dept d1 = new Dept("测试事务", "测试");
		deptDao.save(d1);
		Dept d2 = new Dept(1, "ces", "ces");
		deptDao.save2(d2);
	}
}
2.不使用注解
2.1配置事务
<!--声明业务方法它的事务属性(隔离级别,传播行为,超市时间)
    id:自定义名称transaction-manager,表示tx:advice和</tx:advice>之间的配置内容
    transaction-manager:代表事务管理器对象的id
-->
<tx:advice id="myadvice" transaction-manager="transactionManager">
    <!---->
    <!--tx:attributes:配置事务属性-->
    <tx:attributes>
        <!--tx:method:给具体的方法配置事务属性,method可以有多个,
              分别给不同的方法设置事务属性
              name:方法名称:1)完整的方法名称,不带有包和类
                           2)方法可以使用通配符,*表示任意字符
                 propagation:传播行为,枚举值
                   isolation:隔离级别
                     rollback-for:指定的异常类名,全限定类名,发生异常一定回滚  -->
        <tx:method name="buy" propagation="REQUIRED" isolation="DEFAULT"
                   rollback-for=" java.lang.NullPointerException,com.openlab.excep.NotEnoughException" />
        <!--通过通配符,指定很多的方法-->
        <tx:method name="add" propagation="REQUIRES_NEW"></tx:method>
        <!--指定修改方法-->
        <tx:method name="modif"></tx:method>
    </tx:attributes>
</tx:advice>
2.2配置aop
<!--配置aop-->
<aop:config>
     <!--配置切入点表达式:指定那些包中的类要应用事务
           id切入点表达式的名称唯一值
           expression;切入点表达式指定那些类要使用事务,aspectj会创建代理对象
    -->
    <aop:pointcut id="point" expression="execution(* com.openlab.service.BuyGoodsService.*(..))"/>
    <!-- 配置增强器:关联advice和pointcut
    advice-ref:通知,上面tx:advice的配置
    -->
    <aop:advisor advice-ref="myadvice" pointcut-ref="point"></aop:advisor>
</aop:config>

二、Mybatis整合

1.通过mapper.xml映射文件整合

1.配置pom文件加入依赖
2.创建实体类
3.创建dao接口和mapper文件

int insertuser(Users user);
List<Users> selectAll();
<mapper namespace="com.openlab.dao.UserDao">
    <insert id="insertuser">
        insert into user values (#{id},#{name },#{password})
  </insert>

  <select id="selectAll" resultType="com.openlab.pojo.Users">
      select * from  user
  </select>
</mapper>

4.创建mybatis主配置文件

<typeAliases>
    <package name="com.openlab.pojo"/>
</typeAliases>
 <mappers>
     <package name="com.openlab.dao"/>
 </mappers>

5.创建service接口和实现类,属性是dao

int add(Users user);
List<Users> quseryUser();
//引用类型
private UserDao dao;
 @Override
 public int add(Users user) {
     int nums= dao.insertuser(user);
     return nums;
 }

 @Override
 public List<Users> quseryUser() {
     List<Users> list=dao.selectAll();
     return list;
 }

6.创建spring配置文件,声明mybatis的对象交给spring创建

<context:property-placeholder location="classpath:db.properties"></context:property-placeholder>
<!---->
<!--声明数据源datesource,作用连接数据库-->
 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>
<!--声明的是mybatis中提供的sqlsessionfactory类。这个类内部创建sqlsessionfactory-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
    <!--set注入,把数据库连接池付给datesource属性-->
    <property name="dataSource" ref="dataSource"></property>
    <!--mybatis主配置文件的位置
        configLocation:属性resource类型,读取配置文件的
        他的赋值,使用value,指定文件路径,使用calsspath:表示文件的位置
    -->
    <property name="configLocation" value="classpath:mybatis.xml"></property>

</bean>
<!--创建dao对象,使sqlsession的getmapper(user.class)
MapperScannerConfigurer:在内部第调用getmapper()生成每个dao接口的代理对象
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!--指定sqlsessionfactory对象的id-->
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    <!--指定包名包名使接口所在的包名
    MapperScannerConfigurer会扫描这个包中的所有接口,把每个接口都执行一次
    getmapper()方法,得到每个接口的到对象
    创建好的dao对象放入到spring的容器中
    -->
    <property name="basePackage" value="com.openlab.dao"></property>
</bean>

7.测试

<!--声明service--><bean id="userservice" class="com.openlab.service.impl.Userviceimpl"><property name="dao" ref="userDao"></property></bean>
ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");
 Userviceimpl u = ac.getBean(Userviceimpl.class);
 List<Users> users = u.selectAll();
      for(Users u:users){
          System.out.println(u);
      }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RuoYi-plus是一个基于RuoYi升级的springcloud版本管理系统。软件由SMP多商户后台管理系统+API后端接口组成,项目支持cms内容管理和商城业务,提供单机版服务、微服务体系双向选择,微服务集成分布式事务解决方案seata,框架基于SpringBoot2.x,springcloudG版本。 RuoYi-plus项目介绍 项目核心: 多商户权限系统+商城平台+CMS内容管理+微服务API系统 架构技术: 基于SpringBoot2.x, springcloud G版本eureka、hystrix、feign、config、gateway微服务架构体系的全新版本,集成分布式事务解决方案seata,集成redis、quartz、tk.mybatis、lombok、各种设计模式等。 项目优势: 架构更清晰、技术更前沿、代码更整洁、页面更美观、学习商用均可。可用于OA系统、 CRM系统、 PDM系统等二次开发,微服务架构学习,非常适用于公司管理平台旧版本升级、新平台搭建快速整合、同时提供API接口服务(供APP、微端、h5等使用)。 RuoYi-plus内置功能 管理平台基础功能 1、用户管理:用户是系统操作者,该功能主要完成系统用户配置。 2、部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 3、岗位管理:配置系统用户所属担任职务。 4、菜单管理:配置系统菜单,操作权限,按钮权限标识等。 5、角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 6、字典管理:对系统经常使用的一些较为固定的数据进行维护。 7、参数管理:对系统动态配置常用参数。 8、通知公告:系统通知公告信息发布维护。 9、操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 10、登录日志:系统登录日志记录查询包含登录异常。 11、在线用户:当前系统活跃用户状态监控。 12、定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 13、代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 14、系统接口:根据业务代码自动生成相关的api接口文档。 15、服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 16、在线构建器:拖动表单元素生成相应的HTML代码。 17、连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 商城业务基础功能 1、商户管理:多商户系统核心业务,商户管理对应权限数据。 2、类别管理:商品类别配置,为商品区分类别。 3、商品管理:每个商户下的商品信息。 CMS内容基础功能 1、文章类别管理:文章列表信息,为文章区分不同类别。 2、文章信息管理:文章具体信息,直接生成文章html页面。 3、素材类别管理:为素材提供类别以区分不同业务的素材图片/视频。 4、素材信息管理:文章信息的素材图片管理。 API接口基础功能 1、业务模块:接收网关gateWay转发请求,api微服务结构处理具体业务,解决分布式事务。 2、订单模块:订单相关业务处理。 3、商品模块:商品相关业务处理。 商用须知 本项目遵循MIT协议,无需授权,留言备注公司信息即可。 演示地址账号:tecom  密码:123456

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值