通过XML文件来配置事物的提交方式

通常之前写的事物提交是在ServiceImpl中写完增删改后 出现方法名.commit().但是在以后的工作中可能会用其他的方式来写事物的提交。

 实体类

package com.bean;

import lombok.Data;

@Data
public class User {
	private int id;
	private String username;
	private String password;
	public User(int id, String username, String password) {
		this.id = id;
		this.username = username;
		this.password = password;
	}
	public User() {
		
	}
	
}

持久层(Dao) 此处我是用的注解的方式来实现增删改查的方法。

之前实现数据库的修改方法是用的 XML文件(具体见5-31Mybatis项目)

package com.dao;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.bean.User;

public interface UserDao {
	//增加
	@Insert("INSERT INTO users VALUES(DEFAULT,#{username},#{password})")
	public void insert(User user);
	//删
	@Delete("DELETE FROM users WHERE id=#{id}")
	public void delete(int id);
	//改
	@Update("UPDATE users SET username = #{username} , PASSWORD = #{password} WHERE id = #{id}")
	public void updateInfo(User user);
	//查
	@Select("select * from users")
	public List<User> selectAll();

}

service包  也可以叫切面类,以前学过面向切面。此处的方法全为切点方法。

package com.service;

import java.util.List;

import com.bean.User;
import com.dao.UserDao;
/**
 * 切面类
 * @author Lenovo
 *
 */
public class UserService {
//拿到数据访问层对象
	private UserDao ud;

	public UserDao getUd() {
		return ud;
	}

	public void setUd(UserDao ud) {
		this.ud = ud;
	}
	//查看  (切点方法)
	public List<User> findAll() {
		List<User> list = ud.selectAll();
		return list;
	}
	//增加  (切点方法)
	public void insertInfo(User user) {
		ud.insert(user);
	}
	//删   (切点方法)
	public void deletInfo(int id) {
		ud.delete(id);
	}
	//改   (切点方法)
	public void modifyInfo(User user) {
		ud.updateInfo(user);
		
	}
}

视图层

package com.test;

import java.util.List;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.bean.User;
import com.service.UserService;

public class demo {
	/*public static void main(String[] args) {
		ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("springtx.xml");
		String[] bean = ac.getBeanDefinitionNames();
		for (String string : bean) {
			System.out.println(string);
		}
	}*/
	//连接数据库
	public UserService getCon() {
		ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("springtx.xml");
		UserService us = ac.getBean("service",UserService.class );
		return us;
	}
	//查
	@Test
	public void selectAll() {
		UserService con = this.getCon();
		List<User> list = con.findAll();
		for (User user : list) {
			System.out.println(user);
		}
	}
	//增加
	@Test
	public void insertUser() {
		UserService con = this.getCon();
		User user= new User();
		user.setUsername("疾速追杀");
		user.setPassword("1234");
		con.insertInfo(user);
		this.selectAll();
	}
	//删除
	@Test
	public void deleteUser() {
		UserService con = this.getCon();
		con.deletInfo(2);
		this.selectAll();
	}
	//修改
	@Test
	public void modify() {
		UserService con = this.getCon();
		User user= new User();
		user.setId(3);
		user.setUsername("叶问");
		user.setPassword("1999");
		con.modifyInfo(user);
		this.selectAll();
	}
}

其中ac.getBean("service",UserService.class ); 中的service是来源于xml文件

xml 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">

		<!-- 1.创建对象,用于连接数据库 name是属性名字  id可以随意起名-->
		<bean id="dataSourceWXB" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
		<property name="url" value="jdbc:mysql://localhost:3308/school"></property>
		<property name="username" value="root"></property>
		<property name="password" value="1234"></property>
		</bean>
		<!-- 2.创建一个类似于session的对象,用于调用增删改查方法 -->
		<bean id="session" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSourceWXB"></property>
		</bean>
		
		<!-- 3.创建一个mapper对象,用于关联sql语句在那个包就关联 -->
		<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
			<property name="basePackage" value="com.dao"/>
			<property name="sqlSessionFactory" ref="session"/>
		</bean>
		
		<!-- 4.创建业务逻辑层类UsersService,并且通过Spring自定义的对象,给ud属性赋值 -->
		<bean id="service" class="com.service.UserService">
		<property name="ud" ref="userDao"></property>
		</bean>
		<!-- 5.创建事务对象,用于管理增删改 -->
		<bean id="txID" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
			<property name="dataSource" ref="dataSourceWXB"/>
		</bean>
		<!-- 6.配置事务信息(将“事务”与“切面通知”关联起来) -->
		<tx:advice id="txAdvice" transaction-manager="txID">
				<tx:attributes>
				<tx:method name="findAll"/>
				<tx:method name="insertInfo"/>
				<tx:method name="deletInfo"/>
				<tx:method name="modifyInfo"/>
				</tx:attributes>
		</tx:advice>
		<!-- 7.配置面向切面相关信息 -->
		<aop:config>
				<aop:pointcut expression="execution(* com.service.UserService.*(..))" id="point"/>
				<!-- 后置通知 -->
				<aop:advisor advice-ref="txAdvice" pointcut-ref="point"/>
		</aop:config>
</beans>

 此处xml文件整体流程是:

1.连接数据库 其中name:属性名称是固定好的  id 可以随便起名。

2.添加session 用于数据库操作

3.创建mapper用于关联sql语句  第一个语句是用来连接存放具体sql语句的包  第二个是用来关联session

4.创建业务逻辑userService 在UserDao里面查找属性

5.创建事物对象  将事务的属性关联到数据库中

6.配置事务信息  method name必须和service名字一样

7.后置通知

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值