jdbc 지원 및 사물 관리
Spring 은 관련 jar 패 키 지 를 도입 하여 c3p 0 연결 풀 을 지원 합 니 다.
public class App {
//
ApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/h_jdbc/bean.xml");
@Test
public void testApp() throws Exception {
UserDao ud = (UserDao) ac.getBean("userDao");
// ud.save();
System.out.println(ud.findById(5));
System.out.println(ud.getAll());
}
}
class UserDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void save() {
String sql = "insert into t_dept(deptName) values('test');";
jdbcTemplate.update(sql);
}
public Dept findById(int id) {
String sql = "select * from t_dept where deptId=?";
List list = jdbcTemplate.query(sql,new MyResult(), id);
return (list!=null && list.size()>0) ? list.get(0) : null;
}
public List getAll() {
String sql = "select * from t_dept";
List list = jdbcTemplate.query(sql, new MyResult());
return list;
}
class MyResult implements RowMapper{
//
@Override
public Dept mapRow(ResultSet rs, int index) throws SQLException {
Dept dept = new Dept();
dept.setDeptId(rs.getInt("deptId"));
dept.setDeptName(rs.getString("deptName"));
return dept;
}
}
}
class Dept {
private int deptId;
private String deptName;
public int getDeptId() {
return deptId;
}
public void setDeptId(int deptId) {
this.deptId = deptId;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
}
2. Spring 사무 관리
Spring 은 사무 통제 의 실현 을 제공 했다.사용자 가 Spring 의 성명 식 사무 관 리 를 사용 하려 면 설정 파일 에 만 설정 하면 됩 니 다.사용 하고 싶 지 않 을 때 설정 을 직접 제거 합 니 다.이것 은 사무 제어 에 대한 최대한 의 결합 을 실현 했다.
Spring 성명 식 사무 관리자 클래스: Jdbc 기술: DataSourceTransactionManager Hibernate 기술: HibernateTransactionManager
메모: 한 업무 의 성공: 호출 된 서 비 스 는 성공 적 으로 실행 되 었 으 며, 서비스 에서 호출 된 모든 dao 가 성공 적 으로 실행 되 었 음 을 의미 합 니 다.사 무 는 반드시 서비스 층 에서 통일 적 으로 통제 해 야 한다.
2.1 XML 방식 의 실현
public class App {
@Test
public void testApp() throws Exception {
//
ApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/a_tx/bean.xml");
//
Dept dept = new Dept();
dept.setDeptName(" : ");
DeptService deptService = (DeptService) ac.getBean("deptService");
deptService.save(dept);
}
}
class DeptService {
// dao
private DeptDao deptDao;
public void setDeptDao(DeptDao deptDao) {
this.deptDao = deptDao;
}
/*
* ?
*/
public void save(Dept dept){
//
deptDao.save(dept);
int i = 1/0; // : Service.save()
//
deptDao.save(dept);
}
}
class DeptDao {
// JdbcTemplate
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void save(Dept dept){
String sql = "insert into t_dept (deptName) values(?)";
jdbcTemplate.update(sql,dept.getDeptName());
}
}
class Dept {
private int deptId;
private String deptName;
public int getDeptId() {
return deptId;
}
public void setDeptId(int deptId) {
this.deptId = deptId;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
}
2.2 주해 방식 의 실현
주 해 를 사용 하여 Spring 의 성명 식 사무 관 리 를 실현 하 는 것 이 더욱 간단 합 니 다!단계: 1) Aop 관련 jar 파일 2) bean. xml 에 설명 식 트 랜 잭 션 관리 및 응용 트 랜 잭 션 관리자 클래스 3) 트 랜 잭 션 제 어 를 추가 할 곳 에 주석 을 지정 해 야 합 니 다. @ Transactional
@ Transactional 주석: 1) 응용 업무 의 주석 2) 방법 에 정의: 현재 방법 은 spring 의 성명 식 사무 3) 를 클래스 에 정의 합 니 다. 현재 클래스 의 모든 방법 은 Spring 성명 식 사무 관 리 를 사용 합 니 다.4) 부모 클래스 에 정의: 부모 클래스 를 실행 할 때 사 무 를 적용 합 니 다.
public class App {
@Test
public void testApp() throws Exception {
//
ApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/b_anno/bean.xml");
//
Dept dept = new Dept();
dept.setDeptName(" : ");
DeptService deptService = (DeptService) ac.getBean("deptService");
deptService.save(dept);
}
//
@Test
public void testApp2() throws Exception {
//1. bean.xml ,
//ApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/b_anno/bean.xml");
//2. ,
//ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{});
//3.
ApplicationContext ac =
new ClassPathXmlApplicationContext("cn/itcast/b_anno/bean.xml");
//3.1 bean
//DeptDao deptDao = (DeptDao) ac.getBean("deptDao");
//3.2 【 IOC , 】
//DeptDao deptDao = ac.getBean(DeptDao.class);
//3.3 ,
//DeptDao deptDao = ac.getBean("deptDap", DeptDao.class);
//3.4 bean
//int count = ac.getBeanDefinitionCount();
String[] names = ac.getBeanDefinitionNames();
System.out.println(Arrays.toString(names));
}
}
@Service
public class DeptService {
// dao
@Resource
private DeptDao deptDao;
// dao
@Resource
private LogDao logDao;
/*
* ?
*/
@Transactional(
readOnly = false, //
timeout = -1, //
//noRollbackFor = ArithmeticException.class, //
isolation = Isolation.DEFAULT, // ,
propagation = Propagation.REQUIRED //
)
public void save(Dept dept){
logDao.insertLog(); // 【 】
int i = 1/0;
deptDao.save(dept); //
}
}
@Repository
public class DeptDao {
@Resource
private JdbcTemplate jdbcTemplate;
public void save(Dept dept){
String sql = "insert into t_dept (deptName) values(?)";
jdbcTemplate.update(sql,dept.getDeptName());
}
}
// :
@Repository
public class LogDao {
@Resource
private JdbcTemplate jdbcTemplate;
//
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void insertLog() {
jdbcTemplate.update("insert into log_ (content) values(' Dept11..')");
}
}
public class Dept {
private int deptId;
private String deptName;
public int getDeptId() {
return deptId;
}
public void setDeptId(int deptId) {
this.deptId = deptId;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
}
트 랜 잭 션 전파 행위: Propagation. REQUIRED 가 지정 한 현재 방법 은 트 랜 잭 션 환경 에서 실행 되 어야 합 니 다.현재 실행 중인 방법 이 이미 존재 한다 면 현재 업무 에 가입 할 것 입 니 다.Propagation.REQUIRED_NEW 에서 현재 방법 을 지정 하려 면 업무 환경 에서 실행 해 야 합 니 다.현재 실행 중인 방법 이 이미 존재 한다 면: 트 랜 잭 션 이 끊 깁 니 다.항상 새로운 사 무 를 시작 합 니 다. 실행 이 끝 난 후;방금 끊 은 일 은 계속 되 었 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.