ssh是我们常用的轻量级框架。
1.使用ssh搭建项目.
2.配置数据源,seesionFactory,事务:一般在hibernate.cfg.xml文件中配置。
================DBconfig=================================
<?xml version="1.0" encoding="UTF-8"?>
<UNITEDDB>
<CURRENTDB>
<DBIP>127.0.0.1</DBIP>
<DBPORT>1433</DBPORT>
<USER>BCDIBANK</USER>
<PASSWORD>BEICHENDE</PASSWORD>
<DBMSNAME>SQLSERVER</DBMSNAME>
<VERSION>JTDS</VERSION>
</CURRENTDB>
<DBMS NAME="SQLSERVER" VERSION="JTDS">
<CONNECTIONURL>jdbc:jtds:sqlserver://${DBIP}:${DBPORT};DatabaseName=${DBNAME};SelectMethod=cursor</CONNECTIONURL>
<CONNECTIONDRIVER>net.sourceforge.jtds.jdbc.Driver</CONNECTIONDRIVER>
<DIALECT>org.hibernate.dialect.SQLServerDialect</DIALECT>
</DBMS>
<DBMS NAME="DB2" VERSION="LUW">
<CONNECTIONURL>jdbc:db2://${DBIP}:${DBPORT}/${DBNAME}</CONNECTIONURL>
<CONNECTIONDRIVER>com.ibm.db2.jcc.DB2Driver</CONNECTIONDRIVER>
<DIALECT>org.hibernate.dialect.DB2Dialect</DIALECT>
</DBMS>
<DBMS NAME="Oracle" VERSION="thin">
<CONNECTIONURL>jdbc:oracle:thin:@${DBIP}:${DBPORT}:${DBNAME}</CONNECTIONURL>
<CONNECTIONDRIVER>oracle.jdbc.driver.OracleDriver</CONNECTIONDRIVER>
<DIALECT>org.hibernate.dialect.Oracle9Dialect</DIALECT>
</DBMS>
<DBMS NAME="Sybase" VERSION="Sybase">
<CONNECTIONURL>jdbc:sybase:Tds:${DBIP}:${DBPORT}/${DBNAME}?Unicode=true&characterEncoding=utf8&noAccessToProcedureBodies=true</CONNECTIONURL>
<CONNECTIONDRIVER>com.sybase.jdbc3.jdbc.SybDriver</CONNECTIONDRIVER>
<DIALECT>org.hibernate.dialect.SybaseDialect</DIALECT>
</DBMS>
</UNITEDDB>
================hibernate.cfg.xml配置========================
<!-- 数据库连接池配置 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close" lazy-init="default" autowire="default">
<property name="driverClass">
<!-- <value>net.sourceforge.jtds.jdbc.Driver</value> -->
<bean
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"
lazy-init="default" autowire="default">
<property name="targetObject">
<ref bean="unitedDBConfig" />
</property>
<property name="targetMethod">
<value>getReplaceValue</value>
</property>
<property name="arguments">
<list>
<value>CONNECTIONDRIVER</value>
<array>
<value></value>
</array>
</list>
</property>
</bean>
</property>
<property name="jdbcUrl">
<bean
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"
lazy-init="default" autowire="default">
<property name="targetObject">
<ref bean="unitedDBConfig" />
</property>
<property name="targetMethod">
<value>getReplaceValue</value>
</property>
<property name="arguments">
<list>
<value>CONNECTIONURL</value>
<array>
<value>IBANK</value><!-- 数据库名 -->
</array>
</list>
</property>
</bean>
</property>
<property name="user">
<value>${USER}</value>
</property>
<property name="password">
<value>${PASSWORD}</value>
</property>
<property name="initialPoolSize">
<value>10</value>
</property>
<property name="minPoolSize">
<value>10</value>
</property>
<property name="maxPoolSize">
<value>100</value>
</property>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement">
<value>3</value>
</property>
<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
<property name="acquireRetryAttempts">
<value>30</value>
</property>
</bean>
<bean id="sessionFactory_ibank"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource_ibank" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${DIALECT}</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
</props>
</property>
<property name="mappingResources">
<!-- 列出本库中的所有映射文件 -->
<list>
<value>com/Entity.hbm.xml</value>
</list>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory_ibank" />
</property>
</bean>
<aop:aspectj-autoproxy proxy-target-class="true">
</aop:aspectj-autoproxy>
<tx:annotation-driven transaction-manager="transactionManager" order="2000" />
</beans>
=================web.xml===================================
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<listener>
<listener-class>com.beichende.ibank.pms.web.listener.OnLineCountListener</listener-class>
</listener>
<listener>
<display-name>OrderQueueThreadPool</display-name>
<listener-class></listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/xml-bean/entry.xml,/WEB-INF/hibernate.cfg.xml</param-value>//初始化各个spring的配置文件
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/config/log4j.xml</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>app.root</param-value>
</context-param>
<filter>
<filter-name>checkloginfilt</filter-name>
<filter-class>
</filter-class>
</filter>
<filter-mapping>
<filter-name>checkloginfilt</filter-name>
<url-pattern>/adm/*</url-pattern>
</filter-mapping>
<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>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>JasperReportImageServlet</servlet-name>
<servlet-class>
net.sf.jasperreports.j2ee.servlets.ImageServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JasperReportImageServlet</servlet-name>
<url-pattern>/servlets/image</url-pattern>
</servlet-mapping>
<error-page>
<error-code>404</error-code>
<location>/itm/common/error404.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/itm/common/error500.jsp</location>
</error-page>
</web-app>
3,写pojo类:
--User.java--
private Integer userId;
private String userNo;
private String userName;
private String userPwd;
private Set<Role> roles=new HashSet<Role>();
--role.java----
private Integer roleId;
private String roleName;
private Set<User> users=new HashSet<User>();
---User.hbm.xml--
<hibernate-mapping>
<class name="com.demo.User" table="UserList" dynamic-insert="true" dynamic-update="true">
<id name="userId" type="java.lang.Integer">
<column name="UserID" />
<generator class="native" />
</id>
<property name="userNo" type="java.lang.String">
<column name="UserNo" length="10" not-null="true" />
</property>
<property name="userName" type="java.lang.String">
<column name="UserName" length="20" not-null="true" />
</property>
<property name="userPwd" type="java.lang.String">
<column name="UserPwd" length="40" not-null="true" />
</property>
<set name="roles" cascade="save-update" inverse="false" lazy="true" fetch="select" table="User_Role">
<key column="UserID"></key>
<many-to-many class="com.demo.Role" column="RoleID"></many-to-many>
</set>
</class>
</hibernate-mapping>
----Role.hbm.xml----
<hibernate-mapping>
<class name="com.demo.Role" table="RoleList" dynamic-insert="true" dynamic-update="true">
<id name="roleId" type="java.lang.Integer">
<column name="RoleID" />
<generator class="native" />
</id>
<property name="roleName" type="java.lang.String">
<column name="RoleName" length="32" not-null="true" />
</property>
<set name="users" cascade="save-update" inverse="false" lazy="true" fetch="select" table="Usert_Role">
<key column="RoleID"></key>
<many-to-many class="com.demo.User" column="UserID"></many-to-many>
</set>
</class>
</hibernate-mapping>
4,写action
---Test.action----
private String userNo;
private List<RoleDto> roles = new ArrayList<RoleDto>();//说明这里的RoleDto与Role里的属性相同,为什么用dto?这是应为json会对Role进行级联查询,影响性能。
public String init(){
try {
……
return SUCCESS;
} catch (Exception e) {
e.printStackTrace();
return ERROR;
}
}
5,配置struts.xml
<struts>
<constant name="struts.devMode" value="true"></constant>
<package name="manage" namespace="/page" extends="json-default">
<action name="check_userlogin" class="checkloginaction">
<result type="json"></result>
</action>
</package>
</struts>
完成!