电力系统总结笔记
一:项目第一天(项目框架)
1:项目介绍
参考:《项目分析笔记》和【文档】中的《国家电力系统技术点汇总(简历使用).doc》
2:项目框架(SSH)
第一步:创建数据库(格式:UTF-8)
创建表:
第二步:创建项目(格式:UTF-8)
导入 jar 包(SSH)
第三步:持久层
(1)在 cn.itcast.elec.domain 中创建 ElecText.java
public class ElecText implements java.io.Serializable {
private String textID;
//主键ID
private String textName;
//测试名称
private Date textDate;
//测试日期
private String textRemark; //测试备注
public String getTextID() {
return textID;
}
public void setTextID(String textID) {
this.textID = textID;
}
public String getTextName() {
return textName;
}
public void setTextName(String textName) {
this.textName = textName;
}
public Date getTextDate() {
return textDate;
}
public void setTextDate(Date textDate) {
this.textDate = textDate;
}
public String getTextRemark() {
return textRemark;
}
public void setTextRemark(String textRemark) {
this.textRemark = textRemark;
}
}
(2)在 cn.itcast.elec.domain 目录下,创建 ElecText.java 对应的映射文件(ElecText.hbm.xml)
(3)在 src 下创建 hibernate.cfg.xml 的配置文件
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/itcastElec?useUn
icode=true&characterEncoding=utf8
root
root
org.hibernate.dialect.MySQL5Dialect
update
true
(4)使用 junit 在 test 包中进行测试(并且导入 log4j 的配置文件)
public class TestHibernate {
/**测试保存*/
@Test
public void save(){
Configuration configuration = new Configuration();
configuration.configure();//加载类路径hibernate.cfg.xml和映射文件
SessionFactory sf = configuration.buildSessionFactory();
Session s = sf.openSession();
Transaction tr = s.beginTransaction();
//测试操作对象的过程,就是操作数据库表
ElecText elecText = new ElecText();
elecText.setTextName("测试Hibernate名称");
elecText.setTextDate(new Date());
elecText.setTextRemark("测试Hibernate备注");
s.save(elecText);
tr.commit();
s.close();
}
}
第四步:DAO 层
(1)在 cn.itcast.elec.dao 中创建 2 个接口(公用接口和业务接口)
公用接口:
public interface ICommonDao {
void save(T entity);
}
业务接口(需要继承公共接口,并且指定泛型 T 所对应的对象:
public interface IElecTextDao extends ICommonDao {
public static final String SERVICE_NAME =
"cn.itcast.elec.dao.impl.ElecTextDaoImpl";
}
(2)在 cn.itcast.elec.dao.impl 中创建 2 个接口的实现类
公用类(需要继承 HibernateDaoSupport,这样可以方便使用 HibernateTemplate 对象):
public class CommonDaoImpl extends HibernateDaoSupport implements
ICommonDao {
/**使用@Resource注入SessionFactory*/
@Resource(name="sessionFactory")
public final void setSessionFactoryDi(SessionFactory sessionFactory) {
this.setSessionFactory(sessionFactory);
}
/**保存*/
public void save(T entity) {
this.getHibernateTemplate().save(entity);
}
}
业务类(需要继承公用类,这样可以使用公用类中的定义的方法)
@Repository(IElecTextDao.SERVICE_NAME)
public class ElecTextDaoImpl extends CommonDaoImpl implements
IElecTextDao {
}
(3)在 src 创建 spring 的配置文件(beans.xml)
classpath:hibernate.cfg.xml
(4)使用 junit 完成测试
public class TestDao {
/**测试保存*/
@Test
public void save(){
//加载类路径下的spring容器
ApplicationContext ac = new
ClassPathXmlApplicationContext("beans.xml");
//调用接口
IElecTextDao elecTextDao = (IElecTextDao)
ac.getBean(IElecTextDao.SERVICE_NAME);
//操作对象
ElecText elecText = new ElecText();
elecText.setTextName("测试Dao名称");
elecText.setTextDate(new Date());
elecText.setTextRemark("测试Dao备注");
elecTextDao.save(elecText);
}
}
注意:如果数据没有保存,需要设置事务自动提交:在 hibernate.cfg.xml 中添加:
true
第五步:Service 层
(1) 在 cn.itcast.elec.service 中创建接口:
public interface IElecTextService {
public static final String SERVICE_NAME =
"cn.itcast.elec.service.impl.ElecTextServiceImpl";
void saveElecText(ElecText elecText);
}
(2) 在 cn.itcast.elec.service.impl 中创建接口的实现类:
@Service(IElecTextService.SERVICE_NAME)
@Transactional(readOnly=true)
public class ElecTextServiceImpl implements IElecTextService {
@Resource(name=IElecTextDao.SERVICE_NAME)
private IElecTextDao elecTextDao;
@Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIR
ED,readOnly=false)
public void saveElecText(ElecText elecText) {
elecTextDao.save(elecText);
}
}
(3) 使用 junit 测试
public class TestService {
/**测试保存*/
@Test
public void save(){
ApplicationContext ac = new
ClassPathXmlApplicationContext("beans.xml");
IElecTextService elecTextService = (IElecTextService)
ac.getBean(IElecTextService.SERVICE_NAME);
//操作对象
ElecText elecText = new ElecText();
elecText.setTextName("测试Service名称");
elecText.setTextDate(new Date());
elecText.setTextRemark("测试Service备注");
elecTextService.saveElecText(elecText);
}
}
由 于 spring 提 供 的 声 明 式 事 务 处 理 , 进 行 事 务 的 控 制 , 在 业 务 层 的 类 和 方 法 上 定 义
@Transactional(),同时去掉 hibernate.cfg.xml 中的配置,由 spring 统一控制。去掉的代
码是:
true
第六步:控制层(MVC)
(1)在 cn.itcast.elec.web.action 中创建 Action(业务 Action)类和 BaseAction(公用 Action)
Action 类:(注意:这里要设置成多例,即@Scope(value=prototype),因为 struts2 的
Action 是多实例,多线程)
@Controller("elecTextAction")
@Scope(value="prototype")
public class ElecTextAction extends BaseAction
{
ElecText elecText = this.getModel();
@Resource(name=IElecTextService.SERVICE_NAME)
private IElecTextService elecTextService;
/**执行保存*/
public String save(){
//保存
elecTextService.saveElecText(elecText);
return "save";
}
}
BaseAction 类(封装模型驱动对象,HttpServletRequest 和 HttpServletResponse 对象):
public class BaseAction extends ActionSupport implements
ModelDriven,ServletRequestAware,ServletResponseAware {
protected HttpServletRequest request;
protected HttpServletResponse response;
T entity;
public BaseAction(){
/**泛型转换成真实类型(范类转换)*/
Class entityClass = TUtils.getTClass(this.getClass());
try {
entity = (T) entityClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}