Spring(18):新增功能:在超市订单系统中实现角色表的查询和添加操作

2018/1/4

     

功能描述:

(1)新增功能:1.实现对角色表smbms_role 的查询和添加操作。

要求:1.角色名称模糊查询 角色信息列表;
  2.实现角色信息添加,使用事务切面实现声明式事务管理。
  3.使用属性文件配置数据源(database.properties)
  4.使用xml-aop标签配置事务切面。

下面是实现思路和方法:

【0】文件框架:


图1

{dao:sql映射文件和接口;entities:实体类;service:业务类}


【1】新建 数据源配置文件 database.properties:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8
user=root
password=

【2】新建 Spring配置文件 applicationContext-mybatis.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"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-2.5.xsd
        http://www.springframework.org/schema/tx 
     	http://www.springframework.org/schema/tx/spring-tx.xsd">
	
	<!-- 引入properties文件 -->
	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location">
			<value>classpath:database.properties</value>
		</property>
	</bean>	
	<!-- 数据源配置 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="${driver}"></property>
		<property name="url" value="${url}"></property>
		<property name="username" value="${username}"></property>
		<property name="password" value="${password}"></property>    
    </bean>
  
</beans>

然后添加 SqlSessionFactoryBean 配置内容:

    <!-- SqlSessionFactoryBean 配置 -->
    <bean id="sqlSessionFactory"
    		class="org.mybatis.spring.SqlSessionFactoryBean">
	<!-- 引用数据源组件 -->
		<property name="dataSource" ref="dataSource"></property>
	<!-- 引用Mybatis配置文件的配置 -->
		<property name="configLocation" value="classpath:mybatis-config.xml"></property>
    </bean>


【3】新建实体类Role.java :

package com.smbms.entities;

import java.math.BigInteger;
import java.util.Date;

public class Role {
	private Integer id;
	private String roleCode;
	private String roleName;
	private BigInteger createdBy;
	private Date creationDate;
	private BigInteger modifyBy;
	private Date modifyDate;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getRoleCode() {
		return roleCode;
	}
	public void setRoleCode(String roleCode) {
		this.roleCode = roleCode;
	}
	public String getRoleName() {
		return roleName;
	}
	public void setRoleName(String roleName) {
		this.roleName = roleName;
	}
	public BigInteger getCreatedBy() {
		return createdBy;
	}
	public void setCreatedBy(BigInteger createdBy) {
		this.createdBy = createdBy;
	}
	public Date getCreationDate() {
		return creationDate;
	}
	public void setCreationDate(Date creationDate) {
		this.creationDate = creationDate;
	}
	public BigInteger getModifyBy() {
		return modifyBy;
	}
	public void setModifyBy(BigInteger modifyBy) {
		this.modifyBy = modifyBy;
	}
	public Date getModifyDate() {
		return modifyDate;
	}
	public void setModifyDate(Date modifyDate) {
		this.modifyDate = modifyDate;
	}
	@Override
	public String toString() {
		return "Role [id=" + id + ", roleCode=" + roleCode + ", roleName=" + roleName + ", createdBy=" + createdBy
				+ ", creationDate=" + creationDate + ", modifyBy=" + modifyBy + ", modifyDate=" + modifyDate + "]";
	}
	public Role(Integer id, String roleCode, String roleName, BigInteger createdBy, Date creationDate,
			BigInteger modifyBy, Date modifyDate) {
		super();
		this.id = id;
		this.roleCode = roleCode;
		this.roleName = roleName;
		this.createdBy = createdBy;
		this.creationDate = creationDate;
		this.modifyBy = modifyBy;
		this.modifyDate = modifyDate;
	}
	public Role() {
		super();
		// TODO 自动生成的构造函数存根
	}
	
}

【4】新建 RoleMapper.java接口文件和sql映射文件RoleMapper.xml:

RoleMapper.java:

package com.smbms.dao;

import java.util.List;

import com.smbms.entities.Role;

public interface RoleMapper {
	public List<Role> roleshow();
	public List<Role> findRoleByCode(Integer roleId);
	public int addNewRole(Role role);
	
}


RoleMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.smbms.dao.RoleMapper">
 	<select id="roleshow" resultType="com.smbms.entities.Role">
 		select * from smbms_role
 	</select>
 	<select id="findRoleByCode" parameterType="integer" 
 	 		resultType="com.smbms.entities.Role">
 		select * from smbms_role where id like CONCAT('%',#{roleId},'%')
 	</select>
 	<insert id="addNewRole" parameterType="com.smbms.entities.Role">
 		insert into smbms_role (id,roleCode,roleName,createBy,creationDate)
 		   values
 		(#{id},#{roleCode},#{roleName},#{createdBy},#{creationDate})
 	</insert>
 </mapper>
 

【5】Dao层代码通过MapperScannerConfigurer 扫描自动生成,然后业务层就能直接调用 xxxMapper 属性,所以,需要在Spring配置文件中添加以下内容:

	<!-- 配置MapperScannerConfigurer,扫描生成 xxxmapper实例!!就是方便 -->  
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
        <property name="basePackage" value="com.smbms.dao"></property>  
    </bean>     	
  

【6】开始写业务层代码,新建RoleService.java接口文件和实现类RoleServiceimpl.java:

RoleService.java:

package com.smbms.service;

import java.util.List;

import com.smbms.entities.Role;

public interface RoleService {
	public List<Role> roleshow();
	public List<Role> findRoleByCode(Integer roleCode);
	public boolean addNewRole(Role role);
}

RoleServiceimpl.java:

package com.smbms.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.smbms.dao.RoleMapper;
import com.smbms.entities.Role;

@Service("roleService")
public class RoleServiceImpl implements RoleService {
	@Autowired
	private RoleMapper roleMapper;
	
	public RoleMapper getRoleMapper() {
		return roleMapper;
	}

	public void setRoleMapper(RoleMapper roleMapper) {
		this.roleMapper = roleMapper;
	}
	
	public RoleServiceImpl() {
		super();
		// TODO 自动生成的构造函数存根
	}

	public RoleServiceImpl(RoleMapper roleMapper) {
		super();
		this.roleMapper = roleMapper;
	}

	@Override
	public List<Role> roleshow() {
		return roleMapper.roleshow(); 
	}

	@Override
	public List<Role> findRoleByCode(Integer roleCode) {
		return roleMapper.findRoleByCode(roleCode);
	}

	@SuppressWarnings("finally")
	@Override
	public boolean addNewRole(Role role) {
		boolean result = false;
		try {
			roleMapper.addNewRole(role);
			result = true;
		}catch (RuntimeException e){
			e.printStackTrace();
			result = false;
			throw e;
		}finally{
			return result;
		}
	}

}

由于实现类是通过注解实现 RoleMapper 的依赖注入,所以要在Spring配置文件添加以下内容(扫描器):

    <!-- 扫描注解配置 -->
    <context:component-scan base-package="com.smbms.service"></context:component-scan>
   

【7】写测试单元RoleServiceImplTest.java:

package com.smbms.service;

import java.util.List;

import org.apache.log4j.Logger;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.smbms.entities.Role;

public class RoleServiceImplTest {
	static Logger log = Logger.getLogger(RoleServiceImplTest.class.getName());
	@Test
	public void test() {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-mybatis.xml");
		RoleService roleService = (RoleService)ctx.getBean("roleService");
		log.debug("-------1-------");
		List<Role> roles = roleService.roleshow();
		for(Role r:roles){
			log.debug(r.toString());
		}
		log.debug("-------2-------");
		roles = roleService.findRoleByCode(110);
		for(Role r:roles){
			log.debug(r.toString());
		}
		log.debug("-------3-------");
		Role role = new Role();
		role.setId(100);
		role.setRoleName("tour");
		boolean result = roleService.addNewRole(role);
		log.debug("testAddRole result :"+result);
		
		System.out.println("--------*****------------");
	}

}

【8】最后利用AOP 切面,给包下面的所有方法添加事务增强处理,需要在Spring配置文件添加以下内容:

    <!-- 事务管理器组件,以提供对事务处理的全面支持和统一管理,在切面中相当于增强处理的角色 ,需要注入数据源组件-->
    <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="find*" propagation="SUPPORTS"/>  
            <tx:method name="add*" propagation="REQUIRED"/>  
            <tx:method name="del*" propagation="REQUIRED"/>  
            <tx:method name="update" propagation="REQUIRED" />  
            <tx:method name="*" propagation="REQUIRED"/>  
        </tx:attributes>  
    </tx:advice>  
    <!-- 定义切面,这里不知道能不能也使用注解? -->  
    <aop:config>  
        <!-- 定义切入点 -->  
        <aop:pointcut id="serviceMethod" expression="execution(* com.smbms.service.*.*(..))" />  
        <!-- 将事务增强和切入点组合 -->  
        <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod"/>  
    </aop:config>  

【9】至此,Spring 配置文件的完整内容如下:

<?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"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-2.5.xsd
        http://www.springframework.org/schema/tx 
     	http://www.springframework.org/schema/tx/spring-tx.xsd">
	
	<!-- 引入properties文件 -->
	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location">
			<value>classpath:database.properties</value>
		</property>
	</bean>	
	<!-- 数据源配置 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="${driver}"></property>
		<property name="url" value="${url}"></property>
		<property name="username" value="${username}"></property>
		<property name="password" value="${password}"></property>    
    </bean>
    
    <!-- SqlSessionFactoryBean 配置 -->
    <bean id="sqlSessionFactory"
    		class="org.mybatis.spring.SqlSessionFactoryBean">
	<!-- 引用数据源组件 -->
		<property name="dataSource" ref="dataSource"></property>
	<!-- 引用Mybatis配置文件的配置 -->
		<property name="configLocation" value="classpath:mybatis-config.xml"></property>
    </bean>
	
	<!-- 配置MapperScannerConfigurer,扫描生成 xxxmapper实例!!就是方便 -->  
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
        <property name="basePackage" value="com.smbms.dao"></property>  
    </bean>     	
    <!-- 扫描注解配置 -->
    <context:component-scan base-package="com.smbms.service"></context:component-scan>
     
    <!-- 事务管理器组件,以提供对事务处理的全面支持和统一管理,在切面中相当于增强处理的角色 ,需要注入数据源组件-->
    <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="find*" propagation="SUPPORTS"/>  
            <tx:method name="add*" propagation="REQUIRED"/>  
            <tx:method name="del*" propagation="REQUIRED"/>  
            <tx:method name="update" propagation="REQUIRED" />  
            <tx:method name="*" propagation="REQUIRED"/>  
        </tx:attributes>  
    </tx:advice>  
    <!-- 定义切面,这里不知道能不能也使用注解? -->  
    <aop:config>  
        <!-- 定义切入点 -->  
        <aop:pointcut id="serviceMethod" expression="execution(* com.smbms.service.*.*(..))" />  
        <!-- 将事务增强和切入点组合 -->  
        <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod"/>  
    </aop:config>  
</beans>


【10】输出结果:

DEBUG 01-04 16:16:15,700 -------1-------  (RoleServiceImplTest.java:21) 
DEBUG 01-04 16:16:15,709 Creating new transaction with name [com.smbms.service.RoleServiceImpl.roleshow]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT  (AbstractPlatformTransactionManager.java:367) 
DEBUG 01-04 16:16:16,079 Acquired Connection [jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8, UserName=Administrator@localhost, MySQL Connector Java] for JDBC transaction  (DataSourceTransactionManager.java:206) 
DEBUG 01-04 16:16:16,083 Switching JDBC Connection [jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8, UserName=Administrator@localhost, MySQL Connector Java] to manual commit  (DataSourceTransactionManager.java:223) 
DEBUG 01-04 16:16:16,084 Bound value [org.springframework.jdbc.datasource.ConnectionHolder@c7045b9] for key [org.apache.commons.dbcp.BasicDataSource@6cb6decd] to thread [main]  (TransactionSynchronizationManager.java:193) 
DEBUG 01-04 16:16:16,084 Initializing transaction synchronization  (TransactionSynchronizationManager.java:272) 
DEBUG 01-04 16:16:16,084 Getting transaction for [com.smbms.service.RoleServiceImpl.roleshow]  (TransactionAspectSupport.java:466) 
DEBUG 01-04 16:16:16,088 Creating a new SqlSession  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,091 Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6ee4d9ab]  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,092 Bound value [org.mybatis.spring.SqlSessionHolder@18e36d14] for key [org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@5b7a8434] to thread [main]  (TransactionSynchronizationManager.java:193) 
DEBUG 01-04 16:16:16,098 Retrieved value [org.springframework.jdbc.datasource.ConnectionHolder@c7045b9] for key [org.apache.commons.dbcp.BasicDataSource@6cb6decd] bound to thread [main]  (TransactionSynchronizationManager.java:140) 
DEBUG 01-04 16:16:16,098 Retrieved value [org.springframework.jdbc.datasource.ConnectionHolder@c7045b9] for key [org.apache.commons.dbcp.BasicDataSource@6cb6decd] bound to thread [main]  (TransactionSynchronizationManager.java:140) 
DEBUG 01-04 16:16:16,099 JDBC Connection [jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8, UserName=Administrator@localhost, MySQL Connector Java] will be managed by Spring  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,103 Retrieved value [org.springframework.jdbc.datasource.ConnectionHolder@c7045b9] for key [org.apache.commons.dbcp.BasicDataSource@6cb6decd] bound to thread [main]  (TransactionSynchronizationManager.java:140) 
DEBUG 01-04 16:16:16,104 ==>  Preparing: select * from smbms_role   (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,130 ==> Parameters:   (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,149 <==    Columns: id, roleCode, roleName, createBy, creationDate, modiftyBy, modifyDate  (JakartaCommonsLoggingImpl.java:59) 
DEBUG 01-04 16:16:16,150 <==        Row: 101, 101, 鏅?氱敤鎴?, 110, 2017-12-17 12:26:00.0, null, null  (JakartaCommonsLoggingImpl.java:59) 
DEBUG 01-04 16:16:16,153 <==        Row: 110, 110, 绠$悊鍛?, 110, 2017-12-17 12:26:00.0, null, null  (JakartaCommonsLoggingImpl.java:59) 
DEBUG 01-04 16:16:16,154 <==        Row: 111, 111, 缁忕悊, 110, 2017-12-17 12:26:00.0, null, null  (JakartaCommonsLoggingImpl.java:59) 
DEBUG 01-04 16:16:16,154 <==      Total: 3  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,157 Retrieved value [org.mybatis.spring.SqlSessionHolder@18e36d14] for key [org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@5b7a8434] bound to thread [main]  (TransactionSynchronizationManager.java:140) 
DEBUG 01-04 16:16:16,157 Retrieved value [org.mybatis.spring.SqlSessionHolder@18e36d14] for key [org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@5b7a8434] bound to thread [main]  (TransactionSynchronizationManager.java:140) 
DEBUG 01-04 16:16:16,158 Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6ee4d9ab]  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,158 Completing transaction for [com.smbms.service.RoleServiceImpl.roleshow]  (TransactionAspectSupport.java:495) 
DEBUG 01-04 16:16:16,158 Triggering beforeCommit synchronization  (AbstractPlatformTransactionManager.java:926) 
DEBUG 01-04 16:16:16,158 Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6ee4d9ab]  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,158 Triggering beforeCompletion synchronization  (AbstractPlatformTransactionManager.java:939) 
DEBUG 01-04 16:16:16,158 Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6ee4d9ab]  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,158 Removed value [org.mybatis.spring.SqlSessionHolder@18e36d14] for key [org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@5b7a8434] from thread [main]  (TransactionSynchronizationManager.java:243) 
DEBUG 01-04 16:16:16,159 Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6ee4d9ab]  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,159 Retrieved value [org.springframework.jdbc.datasource.ConnectionHolder@c7045b9] for key [org.apache.commons.dbcp.BasicDataSource@6cb6decd] bound to thread [main]  (TransactionSynchronizationManager.java:140) 
DEBUG 01-04 16:16:16,159 Initiating transaction commit  (AbstractPlatformTransactionManager.java:755) 
DEBUG 01-04 16:16:16,160 Committing JDBC transaction on Connection [jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8, UserName=Administrator@localhost, MySQL Connector Java]  (DataSourceTransactionManager.java:269) 
DEBUG 01-04 16:16:16,160 Triggering afterCommit synchronization  (AbstractPlatformTransactionManager.java:952) 
DEBUG 01-04 16:16:16,160 Triggering afterCompletion synchronization  (AbstractPlatformTransactionManager.java:968) 
DEBUG 01-04 16:16:16,161 Clearing transaction synchronization  (TransactionSynchronizationManager.java:331) 
DEBUG 01-04 16:16:16,161 Removed value [org.springframework.jdbc.datasource.ConnectionHolder@c7045b9] for key [org.apache.commons.dbcp.BasicDataSource@6cb6decd] from thread [main]  (TransactionSynchronizationManager.java:243) 
DEBUG 01-04 16:16:16,162 Releasing JDBC Connection [jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8, UserName=Administrator@localhost, MySQL Connector Java] after transaction  (DataSourceTransactionManager.java:327) 
DEBUG 01-04 16:16:16,162 Returning JDBC Connection to DataSource  (DataSourceUtils.java:327) 
DEBUG 01-04 16:16:16,163 Role [id=101, roleCode=101, roleName=鏅?氱敤鎴?, createdBy=null, creationDate=Sun Dec 17 12:26:00 CST 2017, modifyBy=null, modifyDate=null]  (RoleServiceImplTest.java:24) 
DEBUG 01-04 16:16:16,163 Role [id=110, roleCode=110, roleName=绠$悊鍛?, createdBy=null, creationDate=Sun Dec 17 12:26:00 CST 2017, modifyBy=null, modifyDate=null]  (RoleServiceImplTest.java:24) 
DEBUG 01-04 16:16:16,163 Role [id=111, roleCode=111, roleName=缁忕悊, createdBy=null, creationDate=Sun Dec 17 12:26:00 CST 2017, modifyBy=null, modifyDate=null]  (RoleServiceImplTest.java:24) 
DEBUG 01-04 16:16:16,163 -------2-------  (RoleServiceImplTest.java:26) 
DEBUG 01-04 16:16:16,164 Initializing transaction synchronization  (TransactionSynchronizationManager.java:272) 
DEBUG 01-04 16:16:16,164 Getting transaction for [com.smbms.service.RoleServiceImpl.findRoleByCode]  (TransactionAspectSupport.java:466) 
DEBUG 01-04 16:16:16,164 Creating a new SqlSession  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,165 Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@43b9fd5]  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,165 Bound value [org.mybatis.spring.SqlSessionHolder@79dc5318] for key [org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@5b7a8434] to thread [main]  (TransactionSynchronizationManager.java:193) 
DEBUG 01-04 16:16:16,165 Fetching JDBC Connection from DataSource  (DataSourceUtils.java:110) 
DEBUG 01-04 16:16:16,165 Registering transaction synchronization for JDBC Connection  (DataSourceUtils.java:114) 
DEBUG 01-04 16:16:16,166 Bound value [org.springframework.jdbc.datasource.ConnectionHolder@54eb2b70] for key [org.apache.commons.dbcp.BasicDataSource@6cb6decd] to thread [main]  (TransactionSynchronizationManager.java:193) 
DEBUG 01-04 16:16:16,166 Retrieved value [org.springframework.jdbc.datasource.ConnectionHolder@54eb2b70] for key [org.apache.commons.dbcp.BasicDataSource@6cb6decd] bound to thread [main]  (TransactionSynchronizationManager.java:140) 
DEBUG 01-04 16:16:16,167 JDBC Connection [jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8, UserName=Administrator@localhost, MySQL Connector Java] will be managed by Spring  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,167 Retrieved value [org.springframework.jdbc.datasource.ConnectionHolder@54eb2b70] for key [org.apache.commons.dbcp.BasicDataSource@6cb6decd] bound to thread [main]  (TransactionSynchronizationManager.java:140) 
DEBUG 01-04 16:16:16,167 ==>  Preparing: select * from smbms_role where id like CONCAT('%',?,'%')   (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,168 ==> Parameters: 110(Integer)  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,169 <==    Columns: id, roleCode, roleName, createBy, creationDate, modiftyBy, modifyDate  (JakartaCommonsLoggingImpl.java:59) 
DEBUG 01-04 16:16:16,169 <==        Row: 110, 110, 绠$悊鍛?, 110, 2017-12-17 12:26:00.0, null, null  (JakartaCommonsLoggingImpl.java:59) 
DEBUG 01-04 16:16:16,171 <==      Total: 1  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,171 Retrieved value [org.mybatis.spring.SqlSessionHolder@79dc5318] for key [org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@5b7a8434] bound to thread [main]  (TransactionSynchronizationManager.java:140) 
DEBUG 01-04 16:16:16,171 Retrieved value [org.mybatis.spring.SqlSessionHolder@79dc5318] for key [org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@5b7a8434] bound to thread [main]  (TransactionSynchronizationManager.java:140) 
DEBUG 01-04 16:16:16,172 Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@43b9fd5]  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,172 Completing transaction for [com.smbms.service.RoleServiceImpl.findRoleByCode]  (TransactionAspectSupport.java:495) 
DEBUG 01-04 16:16:16,172 Triggering beforeCommit synchronization  (AbstractPlatformTransactionManager.java:926) 
DEBUG 01-04 16:16:16,172 Triggering beforeCompletion synchronization  (AbstractPlatformTransactionManager.java:939) 
DEBUG 01-04 16:16:16,172 Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@43b9fd5]  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,172 Removed value [org.mybatis.spring.SqlSessionHolder@79dc5318] for key [org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@5b7a8434] from thread [main]  (TransactionSynchronizationManager.java:243) 
DEBUG 01-04 16:16:16,172 Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@43b9fd5]  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,172 Retrieved value [org.springframework.jdbc.datasource.ConnectionHolder@54eb2b70] for key [org.apache.commons.dbcp.BasicDataSource@6cb6decd] bound to thread [main]  (TransactionSynchronizationManager.java:140) 
DEBUG 01-04 16:16:16,173 Removed value [org.springframework.jdbc.datasource.ConnectionHolder@54eb2b70] for key [org.apache.commons.dbcp.BasicDataSource@6cb6decd] from thread [main]  (TransactionSynchronizationManager.java:243) 
DEBUG 01-04 16:16:16,173 Returning JDBC Connection to DataSource  (DataSourceUtils.java:327) 
DEBUG 01-04 16:16:16,173 Triggering afterCommit synchronization  (AbstractPlatformTransactionManager.java:952) 
DEBUG 01-04 16:16:16,173 Triggering afterCompletion synchronization  (AbstractPlatformTransactionManager.java:968) 
DEBUG 01-04 16:16:16,173 Clearing transaction synchronization  (TransactionSynchronizationManager.java:331) 
DEBUG 01-04 16:16:16,173 Role [id=110, roleCode=110, roleName=绠$悊鍛?, createdBy=null, creationDate=Sun Dec 17 12:26:00 CST 2017, modifyBy=null, modifyDate=null]  (RoleServiceImplTest.java:29) 
DEBUG 01-04 16:16:16,174 -------3-------  (RoleServiceImplTest.java:31) 
DEBUG 01-04 16:16:16,174 Creating new transaction with name [com.smbms.service.RoleServiceImpl.addNewRole]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT  (AbstractPlatformTransactionManager.java:367) 
DEBUG 01-04 16:16:16,175 Acquired Connection [jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8, UserName=Administrator@localhost, MySQL Connector Java] for JDBC transaction  (DataSourceTransactionManager.java:206) 
DEBUG 01-04 16:16:16,175 Switching JDBC Connection [jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8, UserName=Administrator@localhost, MySQL Connector Java] to manual commit  (DataSourceTransactionManager.java:223) 
DEBUG 01-04 16:16:16,176 Bound value [org.springframework.jdbc.datasource.ConnectionHolder@1838ccb8] for key [org.apache.commons.dbcp.BasicDataSource@6cb6decd] to thread [main]  (TransactionSynchronizationManager.java:193) 
DEBUG 01-04 16:16:16,176 Initializing transaction synchronization  (TransactionSynchronizationManager.java:272) 
DEBUG 01-04 16:16:16,176 Getting transaction for [com.smbms.service.RoleServiceImpl.addNewRole]  (TransactionAspectSupport.java:466) 
DEBUG 01-04 16:16:16,176 Creating a new SqlSession  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,176 Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6c2ed0cd]  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,177 Bound value [org.mybatis.spring.SqlSessionHolder@7d9e8ef7] for key [org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@5b7a8434] to thread [main]  (TransactionSynchronizationManager.java:193) 
DEBUG 01-04 16:16:16,177 Retrieved value [org.springframework.jdbc.datasource.ConnectionHolder@1838ccb8] for key [org.apache.commons.dbcp.BasicDataSource@6cb6decd] bound to thread [main]  (TransactionSynchronizationManager.java:140) 
DEBUG 01-04 16:16:16,177 Retrieved value [org.springframework.jdbc.datasource.ConnectionHolder@1838ccb8] for key [org.apache.commons.dbcp.BasicDataSource@6cb6decd] bound to thread [main]  (TransactionSynchronizationManager.java:140) 
DEBUG 01-04 16:16:16,178 JDBC Connection [jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8, UserName=Administrator@localhost, MySQL Connector Java] will be managed by Spring  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,178 Retrieved value [org.springframework.jdbc.datasource.ConnectionHolder@1838ccb8] for key [org.apache.commons.dbcp.BasicDataSource@6cb6decd] bound to thread [main]  (TransactionSynchronizationManager.java:140) 
DEBUG 01-04 16:16:16,178 ==>  Preparing: insert into smbms_role (id,roleCode,roleName,createBy,creationDate) values (?,?,?,?,?)   (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,180 ==> Parameters: 100(Integer), null, tour(String), null, null  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,207 <==    Updates: 1  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,208 Retrieved value [org.mybatis.spring.SqlSessionHolder@7d9e8ef7] for key [org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@5b7a8434] bound to thread [main]  (TransactionSynchronizationManager.java:140) 
DEBUG 01-04 16:16:16,208 Retrieved value [org.mybatis.spring.SqlSessionHolder@7d9e8ef7] for key [org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@5b7a8434] bound to thread [main]  (TransactionSynchronizationManager.java:140) 
DEBUG 01-04 16:16:16,208 Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6c2ed0cd]  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,208 Completing transaction for [com.smbms.service.RoleServiceImpl.addNewRole]  (TransactionAspectSupport.java:495) 
DEBUG 01-04 16:16:16,208 Triggering beforeCommit synchronization  (AbstractPlatformTransactionManager.java:926) 
DEBUG 01-04 16:16:16,208 Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6c2ed0cd]  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,209 Triggering beforeCompletion synchronization  (AbstractPlatformTransactionManager.java:939) 
DEBUG 01-04 16:16:16,209 Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6c2ed0cd]  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,209 Removed value [org.mybatis.spring.SqlSessionHolder@7d9e8ef7] for key [org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@5b7a8434] from thread [main]  (TransactionSynchronizationManager.java:243) 
DEBUG 01-04 16:16:16,209 Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6c2ed0cd]  (JakartaCommonsLoggingImpl.java:54) 
DEBUG 01-04 16:16:16,209 Retrieved value [org.springframework.jdbc.datasource.ConnectionHolder@1838ccb8] for key [org.apache.commons.dbcp.BasicDataSource@6cb6decd] bound to thread [main]  (TransactionSynchronizationManager.java:140) 
DEBUG 01-04 16:16:16,209 Initiating transaction commit  (AbstractPlatformTransactionManager.java:755) 
DEBUG 01-04 16:16:16,210 Committing JDBC transaction on Connection [jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8, UserName=Administrator@localhost, MySQL Connector Java]  (DataSourceTransactionManager.java:269) 
DEBUG 01-04 16:16:16,258 Triggering afterCommit synchronization  (AbstractPlatformTransactionManager.java:952) 
DEBUG 01-04 16:16:16,259 Triggering afterCompletion synchronization  (AbstractPlatformTransactionManager.java:968) 
DEBUG 01-04 16:16:16,259 Clearing transaction synchronization  (TransactionSynchronizationManager.java:331) 
DEBUG 01-04 16:16:16,260 Removed value [org.springframework.jdbc.datasource.ConnectionHolder@1838ccb8] for key [org.apache.commons.dbcp.BasicDataSource@6cb6decd] from thread [main]  (TransactionSynchronizationManager.java:243) 
DEBUG 01-04 16:16:16,264 Releasing JDBC Connection [jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8, UserName=Administrator@localhost, MySQL Connector Java] after transaction  (DataSourceTransactionManager.java:327) 
DEBUG 01-04 16:16:16,265 Returning JDBC Connection to DataSource  (DataSourceUtils.java:327) 
DEBUG 01-04 16:16:16,265 testAddRole result :true  (RoleServiceImplTest.java:36) 
--------*****------------



【11】说明文档:

(1)这是Mybatis和Spring整合练习的工程;
(2)实际使用有3个包:dao、entities、service;
(3)Mybatis配置文件内容很简洁,Spring完成大部分配置管理;
(4)通过SQLSessionTemplate的实现类对数据库进行操作;
(5)配置DAO组件并进入SqlSessionTemplate实例;
(6)配置业务Bean并注入DAO实例 ;

(7)完成的功能是:查询provider的列表,模糊查询供应商信息;
(8)与smbms05MybatisSpring的区别:去掉了实现类ProviderMapperImpl;仅仅保留ProviderMapper
接口和相关SQL映射文件,通过MapperFactoryBean注入给业务组件。

(9)此外,也新增了一个User查询,照壶画瓢;
(10)smbms06是使用MapperFactoryBean注入映射器,
         而smbms07是更加方便的使用MapperScannerConfigurer注入映射器。
         
(11)smbms08增加新功能,实现按条件查询订单表Bill;使用resultMap做显示列表字段的自定义映射,
	使用Map传参,
             采用MapperFactoryBean注册映射器实现。
     [bill 和 provider 表]
(12) smbms09 在 smbms08 的基础上,进行拓展,用MapperScannerConfigurer注入映射器。
(13) smbms10,声明式事务,提高在XML配置文件注册org.springframework.jdbc.datasource.DataSourceTransactionManager,
          然后利用AOP切面对事务进行注入时。

(14) smbms11,使用注解去实现声明式事务,@Transaction。

(15) smbms12,新增功能:1.实现对角色表smbms_role 的查询和添加操作。
	要求:1.角色名称模糊查询 角色信息列表;2.实现角色信息添加,使用事务切面实现声明式事务管理。
		3.使用属性文件配置数据源(database.properties)
		4.使用xml-aop标签配置事务切面。

	


【12】还有一些提高空间:使用注解在业务类中配置事务切面增强,那样的话需要使用@Transaction;同时在Spring配置文件添加以下内容:

    <!-- 事务管理器组件,以提供对事务处理的全面支持和统一管理,在切面中相当于增强处理的角色 ,需要注入数据源组件-->
    <bean id="txManager"
           class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    	<property name="dataSource" ref="dataSource"></property>
    </bean>
    
    <!-- 事务管理器注解配置 -->
    <tx:annotation-driven transaction-manager="txManager"/>


以上是博客的全部内容。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值