电力系统底层架构
1、建立web工程
创建数据库
导入向对应的jar包
2、 持久层:
(1)在cn.itcast.elec.domain中创建持久化类ElecText
@SuppressWarnings("serial")
public class ElecText implements
java.io.Serializable {
private String textID;
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.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping
PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class
name="cn.itcast.elec.domain.ElecText" table="Elec_Text">
<id
name="textID" type="string">
<column name="textID"
sql-type="VARCHAR(50)"></column>
<generator
class="uuid"></generator>
</id>
<property
name="textName" type="string">
<column name="textName"
sql-type="VARCHAR(50)"></column>
</property>
<property
name="textDate" type="date">
<column name="textDate"
length="50"></column>
</property>
<property
name="textRemark" type="string">
<column name="textRemark"
sql-type="VARCHAR(500)"></column>
</property>
</class>
</hibernate-mapping>
(3)在src的目录下,创建hibernate.cfg.xml(连接数据库信息)
<?xml version="1.0"
encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration
PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--
基本信息 -->
<property
name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property
name="hibernate.connection.url">jdbc:mysql://localhost:3306/itcast0906elec?useUnicode=true&characterEncoding=utf8</property>
<property
name="hibernate.connection.username">root</property>
<property
name="hibernate.connection.password">root</property>
<!--
使事务自动提交 -->
<!--<property
name="hibernate.connection.autocommit">true</property>-->
<!--
配置 -->
<property
name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property
name="hibernate.hbm2ddl.auto">update</property>
<property
name="hibernate.show_sql">true</property>
<!--
添加映射的hbm.xml -->
<mapping
resource="cn/itcast/elec/domain/ElecText.hbm.xml"/>
</session-factory>
</hibernate-configuration>
(4)测试在junit包下TestHibernate
public class TestHibernate {
@Test
public void
testSave(){
Configuration configuration = new
Configuration();
//加载类路径的hibernate.cfg.xml
configuration.configure();
//调用sessionFactory
SessionFactory
sf = configuration.buildSessionFactory();
//打开session
Session s =
sf.openSession();
//开启事务
Transaction tr =
s.beginTransaction();
//保存ElecText
ElecText elecText = new
ElecText();
elecText.setTextName("测试Hibernate名称");
elecText.setTextDate(new
Date());
elecText.setTextRemark("测试Hibernate备注");
s.save(elecText);
//事务提交
tr.commit();
//关闭session
s.close();
}
}
3、DAO层
(1)在cn.itcast.elec.dao中创建对应的业务接口 IElecTextDao
public interface
IElecTextDao extends ICommonDao<ElecText> {
public static final
String SERVICE_NAME = "cn.itcast.elec.dao.impl.ElecTextDaoImpl";
}
(2)在cn.itcast.elec.dao.impl中创建对应业务接口的实现类ElecTextDaoImpl
@Repository(IElecTextDao.SERVICE_NAME)
public class ElecTextDaoImpl extends
CommonDaoImpl<ElecText> implements IElecTextDao {
}
(3)在cn.itcast.elec.dao中创建对应的公用接口 ICommonDao
public interface
ICommonDao<T> {
void save(T entity);
}
(4)在cn.itcast.elec.dao.impl中创建对应公用接口的实现类CommonDaoImpl,并注入sessionFactory给hibernateTemplate
public class CommonDaoImpl<T> extends HibernateDaoSupport implements
ICommonDao<T> {
/**
* <bean id="hibernateTemplate"
class="org.springframework.orm.hibernate3.HibernateTemplate">
<property
name="sessionFactory"
ref="sessionFactory"></property>
</bean>
*/
@Resource(name="sessionFactory")
public final void
setSessionFactoryDi(SessionFactory sessionFactory)
{
super.setSessionFactory(sessionFactory);
}
public
void save(T entity)
{
this.getHibernateTemplate().save(entity);
}
}
(5)在src的目录下创建beans.xml(spring容器)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<!--
1、注解的自动扫描,表示组件(如:@controler,@Service,@Repository,@Resource等)的扫描 -->
<context:component-scan
base-package="cn.itcast.elec"></context:component-scan>
<!--
2、? -->
<!-- 3、创建由spring提供的sessionFactory,这是spring整合hibernate的核心
-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property
name="configLocation">
<value>
classpath:hibernate.cfg.xml
</value>
</property>
</bean>
<!--4、创建事务管理器,由spring负责创建
-->
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property
name="sessionFactory"
ref="sessionFactory"></property>
</bean>
<!--
5、使用注解的形式管理事务 -->
<tx:annotation-driven
transaction-manager="txManager"/>
</beans>
(6)测试在junit包下
public class TestDao {
@Test
public void
testSaveElecText(){
//加载类路径下的beans.xml
ApplicationContext ac = new
ClassPathXmlApplicationContext("beans.xml");
//获取spring容器中的bean的id节点
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);
}
}
4、业务层
(1)在cn.itcast.elec.service中创建接口 IElecTextService
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中创建实现类ElecTextServiceImpl,在业务层要写入事务控制
@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.REQUIRED,readOnly=false)
public
void saveElecText(ElecText elecText)
{
elecTextDao.save(elecText);
}
}
(3)测试,在junit包下TextService测试
public class TestService {
@Test
public void
testSaveElecText(){
//加载类路径下的beans.xml
ApplicationContext ac = new
ClassPathXmlApplicationContext("beans.xml");
//获取spring容器中的bean的id节点
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);
}
}
5、控制层
(1)在cn.itcast.elec.web.action中创建ElecTextAction,使用模型驱动
@Controller("elecTextAction")
@Scope(value="prototype")
@SuppressWarnings("serial")
public
class ElecTextAction extends BaseAction implements ModelDriven<ElecText>
{
private ElecText elecText = new
ElecText();
@Resource(name=IElecTextService.SERVICE_NAME)
private
IElecTextService elecTextService;
public ElecText getModel()
{
return elecText;
}
public String
save(){
elecTextService.saveElecText(elecText);
System.out.println(request.getParameter("textDate"));
return
"success";
}
}
(2)在cn.itcast.elec.web.action中创建BaseAction,用于获取request和response
@SuppressWarnings("serial")
public class BaseAction extends ActionSupport
implements ServletRequestAware,ServletResponseAware {
protected
HttpServletRequest request = null;
protected HttpServletResponse response
= null;
public void setServletRequest(HttpServletRequest req)
{
this.request = req;
}
public void
setServletResponse(HttpServletResponse res) {
this.response =
res;
}
}
(3)在src的目录下,创建struts.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts
PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration
2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!--
修改访问链接的后缀名 -->
<constant name="struts.action.extension"
value="do"></constant>
<!-- 设置开发模式,开发时输出更多的错误信息
-->
<constant name="struts.devMode"
value="true"></constant>
<!-- 修改ui主题为简单主题
-->
<constant name="struts.ui.theme"
value="simple"></constant>
<package name="system"
namespace="/system" extends="struts-default">
<action
name="elecTextAction_*" class="elecTextAction"
method="{1}">
<result
name="success">/system/textAdd.jsp</result>
</action>
</package>
</struts>
(4)在web.xml中配置:添加:
<!-- 使用struts整合spring,web服务器启动时,需要加载beans.xml
-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:beans.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(5)导入对应css,script,images,jsp页面
(6)整体测试