Spring声明式事物DataSourceTransactionManager的使用与jdbcTemplate的使用

1.配置事物 applicationContext-tran.xml



	
	
	
		
		
	

	
	
	
	
		
		
			
			

			
			
			
			
			
			
			
			
			
		
	

	
	
		
		
		
		
	
	

2.jdbc配置applicationContext-jdbc




	
	

	
	

	
	
	
		
		
		
		
		
	
	
	
	
		
		
	
	
	
	

db.properties配置:

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/igeekspring
jdbc.username=root
jdbc.password=root
jdbc.maxActive=20

 

Dao类:

package com.igeek.crm.dao;

import java.util.List;

import com.igeek.crm.entity.Book;

/**
 * 
 * TODO
 *
 * 2018年10月13日上午9:12:40
 */
public interface BookDAO {
	public int save(Book book);
	public int delete(int id);
	public int update(Book book);
	public Book queryById(int id);
	public List queryAll();
}
package com.igeek.crm.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;

import com.igeek.crm.dao.BookDAO;
import com.igeek.crm.entity.Book;

/**
 * 
 *         TODO
 *
 *         2018年10月13日上午9:14:05
 */
@Repository
public class BookDAOImpl extends JdbcDaoSupport implements BookDAO {

	@Autowired
	public void setDataSource1(DataSource dataSource){
		super.setDataSource(dataSource);
	}

	@Override
	public int save(Book book) {
		String sql = "INSERT INTO book(name,price) VALUES(?,?)";
		return getJdbcTemplate().update(sql, book.getName(), book.getPrice());
	}

	@Override
	public int delete(int id) {
		return getJdbcTemplate().update("DELETE FROM book WHERE id=?", id);
	}

	@Override
	public int update(Book book) {
		String sql = "UPDATE book SET name=?,price=? WHERE id=?";
		return getJdbcTemplate().update(sql, book.getName(), book.getPrice(), book.getId());

	}

	@Override
	public Book queryById(int id) {
		return getJdbcTemplate().queryForObject("SELECT * FROM book WHERE id = ?", new BookRowMapper(), id);
	}

	@Override
	public List queryAll() {
		return getJdbcTemplate().query("SELECT * FROM book", new BookRowMapper());
	}

	// 自定义的手动装配的类
	class BookRowMapper implements RowMapper {
		// 参数1:自动将查询出来的结果集传进来
		// 返回是:封装好的数据对象
		public Book mapRow(ResultSet rs, int rowNum) throws SQLException {
			Book book = new Book();
			// 取当前指针的结果集
			book.setId(rs.getInt(1));
			book.setName(rs.getString(2));
			book.setPrice(rs.getDouble(3));
			return book;
		}
	}

}

 expression切面配置: 

任意公共方法的执行:
execution(public * *(..))
任何一个以“set”开始的方法的执行:
execution(* set*(..))
AccountService 接口的任意方法的执行:
execution(* com.xyz.service.AccountService.*(..))
定义在service包里的任意方法的执行:
execution(* com.xyz.service.*.*(..))
定义在service包和所有子包里的任意类的任意方法的执行:
execution(* com.xyz.service..*.*(..))
定义在pointcutexp包和所有子包里的JoinPointObjP2类的任意方法的执行:
execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))")
***> 最靠近(..)的为方法名,靠近.*(..))的为类名或者接口名,如上例的JoinPointObjP2.*(..))
 
pointcutexp包里的任意类.
within(com.test.spring.aop.pointcutexp.*)
pointcutexp包和所有子包里的任意类.
within(com.test.spring.aop.pointcutexp..*)
实现了MyInterface接口的所有类,如果MyInterface不是接口,限定MyInterface单个类.
this(com.test.spring.aop.pointcutexp.MyInterface)
***> 当一个实现了接口的类被AOP的时候,用getBean方法必须cast为接口类型,不能为该类的类型.
 
带有@MyTypeAnnotation标注的所有类的任意方法.
@within(com.elong.annotation.MyTypeAnnotation)
@target(com.elong.annotation.MyTypeAnnotation)
带有@MyTypeAnnotation标注的任意方法.
@annotation(com.elong.annotation.MyTypeAnnotation)
***> @within和@target针对类的注解,@annotation是针对方法的注解
 
参数带有@MyMethodAnnotation标注的方法.
@args(com.elong.annotation.MyMethodAnnotation)
参数为String类型(运行是决定)的方法.
args(String)
 

 

你可能感兴趣的:(java)