話很少說,小編下面就開始說小編寫的代碼。。。html
1 create table account( 2 id int(10), 3 user varchar(50), 4 paw varchar(50) 5 ); 6 insert into account values(1,'admin','admin');
1 #jdbc 2 jdbc.driver=com.mysql.jdbc.Driver 3 jdbc.url=jdbc:mysql://127.0.0.1:3306/test 4 jdbc.username=root 5 jdbc.password=
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:util="http://www.springframework.org/schema/util" xmlns:jee="http://www.springframework.org/schema/jee" 5 xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa" 6 xmlns:mvc="http://www.springframework.org/schema/mvc" 7 xsi:schemaLocation=" 8 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 9 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd 10 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd 11 http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd 12 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd 13 http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd 14 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> 15 <context:component-scan base-package="ssh.ft"></context:component-scan> 16 17 <context:property-placeholder location="classpath:configs/db.properties" /> 18 <!-- datasource --> 19 <bean id="dataSource" 20 class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 21 <property name="driverClassName" value="${jdbc.driver}" /> 22 <property name="url" value="${jdbc.url}" /> 23 <property name="username" value="${jdbc.username}" /> 24 <property name="password" value="${jdbc.password}" /> 25 </bean> 26 <!-- spring與hibernate整合 spring來管理session的建立、打開和關閉 --> 27 <bean id="sessionFactory" 28 class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 29 <!-- 經過配置文件的方式獲取數據源,出現異常,未解決 --> 30 <property name="hibernateProperties"> 31 <props> 32 <prop key="connection.useUnicode">true</prop> 33 <prop key="connection.characterEncoding">utf-8</prop> 34 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 35 <prop key="hibernate.show_sql">true</prop> 36 <prop key="hibernate.hbm2ddl.auto">update</prop> 37 </props> 38 </property> 39 <property name="dataSource" ref="dataSource" /> 40 <property name="mappingResources"> 41 <list> 42 <!-- 如下用來列出全部的PO映射文件 --> 43 <value>configs/account.hbm.xml</value> 44 </list> 45 </property> 46 </bean> 47 <!-- 定義事物管理器,並位事物管理器配置上述所定義的session --> 48 <!-- <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 49 <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> 50 </bean> <tx:annotation-driven transaction-manager="transactionManager"/> --> 51 52 <!-- 對事物管理器進行設置 表示對save、del、update開頭的方法應用事物 --> 53 <!-- <tx:advice id="txAdvice" transaction-manager="transactionManager"> 54 <tx:attributes> <tx:method name="save*" propagation="REQUIRED" /> <tx:method 55 name="del*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" 56 /> </tx:attributes> </tx:advice> --> 57 58 <!-- 注入dao --> 59 <bean class="ssh.ft.dao.impl.AccountDaoImpl" id="accountDao"> 60 <property name="sessionFactory" ref="sessionFactory"></property> 61 </bean> 62 63 <!--注入service --> 64 <bean class="ssh.ft.service.impl.AccountManagerImpl" id="accountManager"> 65 <property name="dao" ref="accountDao"></property> 66 </bean> 67 68 <!--寫action和業務邏輯層依賴注入 --> 69 <!--將scope設置成prototype,預防了線程安全問題 --> 70 <bean class="ssh.ft.action.LoginAction" id="loginAction" scope="prototype"> 71 <property name="accountManager" ref="accountManager"></property> 72 </bean> 73 </beans>
注:上述配置中註釋掉的事物部分,由於小編未使用到,因此也沒有認證,在配置時可去掉java
1 package ssh.ft.test; 2 3 import java.util.List; 4 5 import org.hibernate.SessionFactory; 6 import org.junit.Test; 7 import org.springframework.context.ApplicationContext; 8 import org.springframework.context.support.ClassPathXmlApplicationContext; 9 10 import ssh.ft.entity.Account; 11 12 public class DBTest { 13 @Test 14 public void test1() { 15 String config = "configs/applicationContext.xml"; 16 ApplicationContext ac = new ClassPathXmlApplicationContext(config); 17 SessionFactory sf = ac.getBean(SessionFactory.class); 18 String sql = "from Account"; 19 @SuppressWarnings("unchecked") 20 List<Account> list = sf.openSession().createQuery(sql).list(); 21 System.out.println(list.size()); 22 } 23 }
若配置正確則有以下結果:紅色框中的數字1表示數據庫中表account中有一條數據,若未出現正確結果,則須要檢查上述代碼哪裏出錯,或者是jar的問題mysql
由於小編也遇到過不少jar包不全之類的問題,務必正確以後再往下編寫,不然到後面錯誤或更多致使沒法查找web
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4 "http://struts.apache.org/dtds/struts-2.3.dtd"> 5 <struts> 6 <!-- 開發模式 --> 7 <constant name="struts.devMode" value="true" /> 8 <!-- 將Action的建立交給spring來管理 --> 9 <constant name="struts.objectFactory" value="spring" /> 10 11 <!-- 包含的配置文件 <include file="/configs/struts-user.xml"></include> --> 12 <package name="s2sh" extends="s2sh1"> 13 <!-- Action的配置在這裏 --> 14 <action name="login" class="loginAction" method="login"> 15 <result name="success">/WEB-INF/index.jsp</result> 16 <result name="error">/WEB-INF/login.jsp</result> 17 </action> 18 </package> 19 <package name="s2sh1" extends="struts-default"> 20 <action name="tologin" > 21 <result >/WEB-INF/login.jsp</result> 22 </action> 23 </package> 24 </struts>
1 <!DOCTYPE hibernate-configuration PUBLIC 2 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 3 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 4 <hibernate-configuration> 5 <session-factory> 6 7 <!-- 配置數據庫方言 --> 8 <property name="dialect"> org.hibernate.dialect.MySQLDialect</property> 9 <!-- 配置打印語句 --> 10 <property name="show_sql">true</property> 11 <property name="format_sql">true</property> 12 <!-- 配置線程安全的session --> 13 <property name="hibernate.current_session_context_class">thread</property> 14 <!--若是表不存在,則會幫你新建 --> 15 <property name="hbm2ddl.auto">create</property> 16 <!-- 映射文件 --> 17 <mapping resource="configs/account.hbm.xml" /> 18 </session-factory> 19 </hibernate-configuration>
1 <!DOCTYPE hibernate-mapping PUBLIC 2 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 4 <hibernate-mapping> 5 <class name="ssh.ft.entity.Account" table="account"> 6 <!-- 主鍵 --> 7 <id name="id"> 8 <!-- 固定值:主鍵生成策略 --> 9 <generator class="native"></generator> 10 </id> 11 <!-- 普通屬性 --> 12 <property name="user"></property> 13 <property name="paw"></property> 14 </class> 15 </hibernate-mapping>
在hibernate.cfg.xml中的spring
<mapping resource="configs/account.hbm.xml" />sql
這個語句裏面的account.hbm.xml就是指上述的account.hbm.xml配置文件數據庫
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 3 <display-name>ssh</display-name> 4 <!-- spring --> 5 <listener> 6 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 7 </listener> 8 <context-param> 9 <param-name>contextConfigLocation</param-name> 10 <param-value>classpath:configs/applicationContext.xml</param-value> 11 </context-param> 12 <filter> 13 <filter-name>struts2</filter-name> 14 <filter-class> 15 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 16 </filter-class> 17 <!-- 將struts.xml配置文件放置在src的其餘位置沒法訪問,未解決 18 <init-param> 19 <param-name>filterConfig</param-name> 20 <param-value>classpath:configs/struts.xml</param-value> 21 </init-param> 22 --> 23 </filter> 24 <filter-mapping> 25 <filter-name>struts2</filter-name> 26 <url-pattern>/*</url-pattern> 27 </filter-mapping> 28 </web-app>
注:上述小編注釋了一個未解決的問題,就是struts.xml文件必定要在src目錄下方,不然會報錯,若是想放在其餘地方的話,如有人解決但願必定要留言告訴小編apache
1 package ssh.ft.entity; 2 3 public class Account { 4 private Integer id; 5 private String user; 6 private String paw; 7 8 public Integer getId() { 9 return id; 10 } 11 12 public void setId(Integer id) { 13 this.id = id; 14 } 15 16 public String getUser() { 17 return user; 18 } 19 20 public void setUser(String user) { 21 this.user = user; 22 } 23 24 public String getPaw() { 25 return paw; 26 } 27 28 public void setPaw(String paw) { 29 this.paw = paw; 30 } 31 32 }
1 package ssh.ft.dao; 2 3 import ssh.ft.entity.Account; 4 5 public interface AccountDao { 6 public Account findByUser(String user); 7 }
1 package ssh.ft.dao.impl; 2 3 import java.util.List; 4 5 import org.springframework.orm.hibernate3.support.HibernateDaoSupport; 6 7 import ssh.ft.dao.AccountDao; 8 import ssh.ft.entity.Account; 9 10 public class AccountDaoImpl extends HibernateDaoSupport implements AccountDao { 11 12 @Override 13 public Account findByUser(String user) { 14 @SuppressWarnings("unchecked") 15 List<Account> list = this.getHibernateTemplate().find("from Account a where a.user=?", user); 16 if (list == null || list.isEmpty()) { 17 return null; 18 } 19 return list.get(0); 20 } 21 }
1 package ssh.ft.service; 2 3 public interface AccountManager { 4 public boolean login(String user, String paw); 5 }
1 package ssh.ft.service.impl; 2 3 import ssh.ft.dao.AccountDao; 4 import ssh.ft.entity.Account; 5 import ssh.ft.service.AccountManager; 6 7 public class AccountManagerImpl implements AccountManager { 8 private AccountDao dao; 9 10 public AccountDao getDao() { 11 return dao; 12 } 13 14 public void setDao(AccountDao dao) { 15 this.dao = dao; 16 } 17 18 @Override 19 public boolean login(String user, String paw) { 20 Account account = dao.findByUser(user); 21 if (account == null) { 22 return false; 23 } 24 if (account.getPaw().equals(paw)) { 25 return true; 26 } 27 return false; 28 } 29 30 }
1 package ssh.ft.action; 2 3 import com.opensymphony.xwork2.ActionSupport; 4 5 import ssh.ft.entity.Account; 6 import ssh.ft.service.AccountManager; 7 8 public class LoginAction extends ActionSupport { 9 private static final long serialVersionUID = 1L; 10 11 private Account account; 12 13 public Account getAccount() { 14 return account; 15 } 16 17 public void setAccount(Account account) { 18 this.account = account; 19 } 20 21 private AccountManager accountManager; 22 23 public AccountManager getAccountManager() { 24 return accountManager; 25 } 26 27 public void setAccountManager(AccountManager accountManager) { 28 this.accountManager = accountManager; 29 } 30 31 private String msg; 32 33 public String getMsg() { 34 return msg; 35 } 36 37 public void setMsg(String msg) { 38 this.msg = msg; 39 } 40 41 public String login() { 42 System.out.println("login........");44 if (accountManager.login(account.getUser(), account.getPaw())) { 45 return SUCCESS; 46 } 47 setMsg("用戶或密碼錯誤"); 48 return ERROR; 49 } 50 }
1 <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ taglib uri="/struts-tags" prefix="s"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta charset="UTF-8"> 7 <title>Login</title> 8 </head> 9 <body> 10 <s:form action="login.action"> 11 <s:textfield name="account.user" label="用戶" /> 12 <s:password name="account.paw" label="密碼" /> 13 <s:submit value="提交" /> 14 </s:form> 15 <s:property value="msg"/> 16 </body> 17 </html>
1 <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ taglib uri="/struts-tags" prefix="s"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta charset="UTF-8"> 7 <title>Login</title> 8 </head> 9 <body> 10 <span style="font-family: KaiTi_GB2312; font-size: 18px;">歡迎【<s:property value="account.user" />】登錄!</span> 11 </body> 12 </html>
成功頁面:瀏覽器
整合到此結束。。。spring-mvc