Spring就是一个大工厂,专门负责生成Bean。
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。
1.Spring快速入门
在官网下载Spring 开发包
导入Spring的jar包4+1例如
spring-core-3.2.RELEASE.jar
spring-beans-3.2.RELEASE.jar
spring-context-3.2.RELEASE.jar
spring-expression-3.2.RELEASE.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
配置Spring的核心xml文件
在程序中读取Spring的配置文件来获取Bean。
2.加载spring容器(类路径获得配置文件)
ApplicationContext context =
new ClassPathXmlApplicationContext(“com/hgs/spring/demo/beans.xml”);
------------------------------------------------------注解
@Repository(“名称”):dao层
@Service(“名称”):service层
@Controller(“名称”):web层
@Autowired:自动根据类型注入
@Qualifier(“名称”):指定自动注入的id名称
@Resource(“名称”)
@ PostConstruct 自定义初始化
@ PreDestroy 自定义销毁
AOP联盟
•前置通知 org.springframework.aop.MethodBeforeAdvice
•后置通知 org.springframework.aop.AfterReturningAdvice
•在目标方法执行后实施增强
•环绕通知 org.aopalliance.intercept.MethodInterceptor
•在目标方法执行前后实施增强
•异常抛出通知 org.springframework.aop.ThrowsAdvice
•在方法抛出异常后实施增强**
4.配置DBCP
<?xml version="1.0" encoding="UTF-8"?>
5.配置c3p0
6.配置proerties
driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql:///spring01
user=root
password=root
6.1知识点---------事务四大特性
原子性:整体 原子性是指事务包含的所有操作要么全部成功,要么全部失败
一致性:数据 一个事务执行之前和执行之后都必须处于一致性状态。
隔离性:并发 对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
持久性:结果 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的。
隔离问题
脏读:一个事务读到另一个事务未提交的内容
在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。
不可重复读:一个事务读到另一个事务已提交的内容
这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。
虚读(幻读):一个事务读到另一个事务已提交的内容
一个事务读到另一个事务已提交的内容(update)
这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。
Serializable(可串行化)
这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。
事务代码
Connection conn = null;
try{
//1 获得连接
conn = …;
//2 开启事务
conn.setAutoCommit(false);
H
G
C
//3 提交事务
conn.commit();
} catche(){
//4 回滚事务
conn.rollback();
}
SSH实现增删改查的部分代码
package entity;
public class Cuser {
private int id;
private String name;
private String email;
private String companyname;
private String subject;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getCompanyname() {
return companyname;
}
public void setCompanyname(String companyname) {
this.companyname = companyname;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
@Override
public String toString() {
return “Cuser [id=” + id + “, name=” + name + “, email=” + email
+ “, companyname=” + companyname + “, subject=” + subject + “]”;
}
}
package dao;
import java.util.List;
import entity.Cuser;
public interface CuserDao {
//保存用户信息
public void saveUser(Cuser cuser);//传对象
//删除用户信息
public void removeUser(Cuser cuser);
//查询指定用户信息
public void findUserById(int id);
//查询所有用户信息
public List findAllUserList();
//更新用户信息
public void updateUser(Cuser cuser);
}
package dao.impl;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import dao.CuserDao;
import entity.Cuser;
public class CuserDaoImpl extends HibernateDaoSupport implements CuserDao {
@Override
public void saveUser(Cuser cuser) {
// TODO Auto-generated method stub
this.getHibernateTemplate().save(cuser);
}
@Override
public void removeUser(Cuser cuser) {
// TODO Auto-generated method stub
this.getHibernateTemplate().delete(cuser);
}
@Override
public void findUserById(int id) {
// TODO Auto-generated method stub
this.getHibernateTemplate().get(Cuser.class, id);
//return user;
}
@SuppressWarnings("unchecked")
@Override
public List<Cuser> findAllUserList() {
// TODO Auto-generated method stub
String hql="from Cuser cuser order by cuser.id desc";
return (List<Cuser>)this.getHibernateTemplate().find(hql);
}
@Override
public void updateUser(Cuser cuser) {
// TODO Auto-generated method stub
this.getHibernateTemplate().update(cuser);
}
}
package action;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import service.CuserService;
import com.opensymphony.xwork2.ActionSupport;
import entity.Cuser;
@SuppressWarnings(“serial”)
public class CuserAction extends ActionSupport{
private CuserService cuserService;
private Cuser cuser;
//保存用户信息
public String save() throws Exception {
this.cuserService.save(cuser);
return "save";
}
//删除用户信息
public String delete() throws Exception{
this.cuserService.remove(cuser);
return "delete";
}
//查询指定用户信息
public String find() throws Exception{
HttpServletRequest request = ServletActionContext.getRequest();
Integer id = Integer.parseInt(request.getParameter("user.id"));
this.cuserService.findById(id);
/*Map map = (Map) ServletActionContext.getContext().get("request");
map.put("user", user);*/
request.setAttribute("cuser", cuser);
return "query";
}
//查询所有用户信息
public String queryAll() throws Exception {
// TODO Auto-generated method stub
List<Cuser> list = cuserService.findAllList();
//ActionContext actionContext = ServletActionContext.getContext();
//Map map = (Map) ActionContext.getContext().get("request");
Map map = (Map) ServletActionContext.getContext().get("request");
map.put("list", list);
/*List<User> list = userService.findAllList();
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("list", list);*/
return "success";
}
//更新用户信息
public String update() throws Exception{
this.cuserService.update(cuser);
return "update";
}
public CuserService getCuserService() {
return cuserService;
}
public void setCuserService(CuserService cuserService) {
this.cuserService = cuserService;
}
public Cuser getCuser() {
return cuser;
}
public void setCuser(Cuser cuser) {
this.cuser = cuser;
}