1、创建java工程
2、导入jar
spring 4.2
core,beans,context,expression,aop,aspects
增加: jdbc(与数据库进行操作),orm(对象关系映射),tx(事务)
spring 3.0.2
logging,aop联盟,织入包
数据库相关的
mysql,druid(阿里巴巴提供的数据库连接池的jar)
mybatis:
mybatis.jar, mybatis-spring.jar, log4j.jar ,cglib-nodep-2.1_3.jar
3、创建db.properties文件,用于封装数据库的连接信息
4、导入log4j.properties
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
5、编写spring的主配置文件 applicationContext.xml
6、编写实体类
package org.java.entity;
import java.io.Serializable;
public class Inf implements Serializable {
private Integer id;
private String name;
private Integer score;
@Override
public String toString() {
return "Inf{" +
"id=" + id +
", name='" + name + '\'' +
", score=" + score +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getScore() {
return score;
}
public void setScore(Integer score) {
this.score = score;
}
}
7、编写Mapper接口(Dao接口)
8、编写Mapper.xml文件
insert into inf values(null,#{name},#{score})
9、编写Service接口
10、编写Service实现类
package org.java.service.impl;
import org.java.dao.InfMapper;
import org.java.entity.Inf;
import org.java.service.InfService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("infService")
public class InfServiceImpl implements InfService {
@Autowired
private InfMapper infMapper;
@Override
public void add(Inf f) {
infMapper.add(f);
}
}
11、编写Demo类进行测试
package org.java.demo;
import org.java.entity.Inf;
import org.java.service.InfService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Demo {
public static void main(String[] args) {
ApplicationContext cxf = new ClassPathXmlApplicationContext("applicationContext.xml");
InfService service = (InfService) cxf.getBean("infService");
Inf f = new Inf();
f.setName("mariah");
f.setScore(92);
service.add(f);
}
}
答:以前没有数据库连接池时,要连接数据库,需要自己创建数据库连接,用完以后,关闭资源时,又会将连接销毁掉,
这样频繁的创建、销毁连接是需要消耗更多系统资源
配置数据库连接池以后,程序在启动时,将会创建一定数量的连接,放入连接池中,当用户需要连接数据库,系统会从
连接池中取得一个连接,有了该连接就可以连接上数据库,当用完以后,关闭资源时,连接并不会真正的释放,它只是将
用的连接,放回到连接池中,其他用户可以继续使用
连接池中可以设置下面几个参数:
spring中的事务:在业务层的一个方法对数据库执行了相关操作,方法中的所有代码都成功,才进行提交,如果有一个
代码操作失败,整个操作要全部回滚
@@@@@@@@@@:在spring应用中,只要涉及到对数据库的操作,都要求要进行事务控制
1、在applicationContext.xml文件中,配置事务管理器 TransactionManager
2、配置事务拦器
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED
readOnly
@@@:事务拦截器的作用: 用于指定,对于业务类中的方法,如何进行事务处理
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED:它表示该方法必须在事务的环境下运行,方法中所有代码都运行成功,才会进行提交,如果有一个代码运行失败,整个方法的操作要全部回滚
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED
readOnly
业务类中的方法,如果是以add,del,update开头,都要在事务的环境下运行,都成功才提交,有一个失败就回滚除了add,del,update之外的其他方法,只能执行查询操作,不允许执行增、删、改
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED
readOnly
infService
transactionInterceptor
@Transactional(readOnly = true)
public void find(){
}
@Transactional(propagation = Propagation.REQUIRED)
@Override
public void save(Inf f) {
infMapper.add(f);//成功-------------相当于成都的账户扣钱
int a = 2/0; //失败-----------------相当于重庆的帐户加钱
}