springJDBC实现事务管理

注解形式实现事务

引入jar

aopalliance-1.0.jar
aspectjweaver-1.8.10.jar
commons-dbcp2-2.1.1.jar
commons-io-2.5.jar
commons-lang3-3.4.jar
commons-logging.jar
commons-logging-1.2.jar
commons-pool2-2.4.2.jar
junit-4.8.2.jar
mysql-connector-java-5.1.8.jar
mysql-connector-java-8.0.11.jar
spring-aop-4.3.6.RELEASE.jar
spring-aspects-4.3.6.RELEASE.jar
spring-beans-4.3.6.RELEASE.jar
spring-context-4.3.6.RELEASE.jar
spring-core-4.3.6.RELEASE.jar
spring-expression-4.3.6.RELEASE.jar
spring-jdbc-4.3.6.RELEASE.jar
spring-tx-4.3.6.RELEASE.jar

创建并编写User对象

public class User {
    private Integer u_id;
    private String u_name;
}

创建并编写UserDao接口

public interface UserDao {

    public int createUser(User user);
    public int updateUser(User user);
    public User getUser(int id);
    List<User> getUserList();
}

创建并编写UserDao接口实现类UserDaoImpl

public class UserDaoImpl implements UserDao {

    private JdbcTemplate jdbcTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public int createUser(User user) {
        String createSql = "insert into user (u_id,u_name) values(?,?)";
        Object[] params = {user.getU_id(),user.getU_name()};
        return this.jdbcTemplate.update(createSql, params);
    }

    @Override
    public int updateUser(User user) {
        String updateSql = "update user set u_name=? where u_id=?";
        Object[] params = {user.getU_name(),user.getU_id()};
        return this.jdbcTemplate.update(updateSql,params);
    }

    @Override
    public User getUser(int id) {
        String sql = "select * from user where u_id=?";
        RowMapper<User> rowMapper = new BeanPropertyRowMapper<>(User.class);
        return this.jdbcTemplate.queryForObject(sql,rowMapper,id);
    }

    @Override
    public List<User> getUserList() {
        String sql = "select * from user";
        RowMapper<User> rowMapper = new BeanPropertyRowMapper<>(User.class);
        return this.jdbcTemplate.query(sql,rowMapper);
    }

}

编写服务层UserService接口

public interface UserService {
    int insert(User user);
}

编写服务层UserService接口实现类UserServiceImpl

@Service
public class UserServiceImpl implements UserService {

    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Transactional(readOnly = false, rollbackFor = Exception.class)
    @Override
    public int insert(User user) {
        userDao.createUser(new User(4, "user4"));
        int c=10/0;
        return userDao.createUser(user);
    }
}

编写spring配置文件applicationContext.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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/aop
         http://www.springframework.org/schema/aop/spring-aop.xsd
         http://www.springframework.org/schema/tx
         http://www.springframework.org/schema/tx/spring-tx.xsd">

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/integration?serverTimezone=UTC"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <bean id="userDao" class="edu.gdkm.dao.impl.UserDaoImpl">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>

    <!--  配置事务管理器 txManager -->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 增加对事务的支持 核心-->
    <tx:annotation-driven transaction-manager="txManager"  />

    <bean id="userService" class="edu.gdkm.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property>
    </bean>

</beans>

编写测试类Test

public class Test {

    public static void createUser() {
        ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = (UserService)act.getBean("userService");
        System.out.println(userService.insert(new User(5, "user5")) > 0 ? "成功" : "失败");
    }

    public static void main(String[] args) {
        createUser();
    }
}

基于XML形式的事务管理

修改spring配置文件applicationContext.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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/aop
         http://www.springframework.org/schema/aop/spring-aop.xsd
         http://www.springframework.org/schema/tx
         http://www.springframework.org/schema/tx/spring-tx.xsd">

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/integration?serverTimezone=UTC"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <bean id="userDao" class="edu.gdkm.dao.impl.UserDaoImpl">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>
	
    <!--  配置事务管理器 txManager -->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    
	<tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="*" read-only="false"/>
        </tx:attributes>
	</tx:advice>

    <aop:config>
        <aop:pointcut expression="execution(* edu.gdkm.service.*.*(..))" id="pt"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/>
    </aop:config>

    <bean id="userService" class="edu.gdkm.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property>
    </bean>

</beans> 

修改UserServiceImpl实现类

public int insert(User user) {
	userDao.createUser(new User(4, "user4"));
	int c=10/0;
	return userDao.createUser(user);
}

编写测试类Test

public class Test {
	public static void createUser() {
        ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = (UserService)act.getBean("userService");
        System.out.println(userService.insert(new User(5, "user5")) > 0 ? "成功" : "失败");
	}

    public static void main(String[] args) {
        createUser();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值