Hibernate框架
1 hibernate核心配置文件
(0)orm思想
-對象關系映射
(1)數據庫信息
(2)hibernate信息
(3)映射配置
(4)hibernate核心配置文件
-如果單純使用hibernate框架,核心配置文件名稱hibernate.cfg.xml和位置src下面固定的。
-hibernate和spring整合的時候,Hibernate核心配置文件名稱和位置沒有固定要求的。
?
2 hibernate映射配置文件
(1)實體類和數據庫表映射關系-使用orm思想
?
3 hibernate操作的步驟
(1)在spring框架對Hibernate框架進行封裝,使用hibernateTemplate
Struts2框架
1 Action操作
(1)action創建三種方式
-繼承類ActionSupport
(2)配置action訪問路徑
-創建struts.xml配置文件,這個文件名和位置固定在src下面的
(3)配置訪問action的多個方法
-使用通配符方式配置
(4)在action獲取表單提交數據
-獲取request對象
**使用ServletActionContext類獲取
-屬性封裝
-模型驅動(重點掌握)
-表達式封裝
(5)在action操作域對象
-使用ServletActionContext獲取域對象
(6)配置struts2的過濾器
過濾器名字叫StrutsPreparedAndExecuteFilter.
2 值棧
(1)向值棧放數據
-set方法
-push方法
-定義變量,生成get方法
?
(2)從值棧獲取數據
-在jsp中使用struts2標簽+ognl獲取
-<s:propetry>
-<s:iterator>
3 攔截器
(1)aop和責任鏈模式
(2)自定義攔截器
-繼承MethodFilterInterceptor
-重寫類里面的方法
-配置攔截器和action關聯
Spring框架
1 spring核心配置文件
(1)名稱和位置沒有固定要求
(2)在spring核心配置文件中引入schema約束
2 創建對象
(1)xml配置方法:<bean id="" class="" scope=""/>
(2)注解方法:四個注解
3 注入屬性(對象類型屬性)
(1)xml配置方式:
(2)注解方式:兩個注解
-autowired
-resource
4 使用ServletContext對象和監聽器實現
(1)在服務器啟動的時候,加載spring配置文件,創建對象
(2)配置spring的監聽器
(3)指定spring配置文件位置
5 jdbcTemplate
6 spring事務配置
(1)xml方式
(2)注解方式
SSH整合思想
整合struts2和spring框架
1 把struts2的action交給spring管理
2 實現過程
第一步 導入struts2的jar包
(1)導入用于整合的jar包
第二步? 創建action
第三步 創建struts2核心配置文件,配置action
(1)位置在src下面,名稱是struts.xml
第四步 配置struts2過濾器
第五步 導入spring的jar包
第六步 創建spring配置文件
(1)引入約束
(2)配置spring監聽器
(3)指定spring配置文件位置
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class> </listener>
<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:bean1.xml</param-value> </context-param>
第七步 把action交給spring進行配置(*****)
<!-- 配置action對象 --><bean id="userAction" class="cn.itcast.action.UserAction" scope="prototype"><!-- 注入service --><property name="userService" ref="userService"></property></bean>
(1)在spring配置action對象,在struts.xml中也配置action對象
(2)解決:
只需要在spring里面配置action對象,不要再struts.xml中配置
<struts><package name="demo1" extends="struts-default" namespace="/"><!-- class屬性里面不寫action全路徑了,因為寫了,
action對象創建兩次 寫spring配置的action的bean的id值 --><action name="userAction" class="userAction"></action></package> </struts>
<!-- 配置action對象 --><bean id="userAction" class="cn.itcast.action.UserAction" scope="prototype"><!-- 注入service --><property name="userService" ref="userService"></property></bean>
class屬性值寫在spring配置的action對象的bean標簽的id值
Spring框架整合hibernate框架
1 把hibernate核心配置文件中配置數據庫信息,把數據庫信息在spring進行配置
2 把Hibernate里面的sessionFactory創建交給spring管理
具體實現
第一步 導入hibernate的jar包
(1)導入struts2和hibernate的jar包時候有jar沖突問題
(2)在struts2里面有jar包
在hibernate里面有jar包
刪除低版本的jar包
(2)導入spring整合持久化層框架需要導入jar包
第二步 搭建hibernate環境
1 創建實體
2 配置實體類映射關系
3 創建核心配置文件
第三步 把Hibernate核心配置文件數據庫配置,在spring進行配置
(1)把hibernate核心文件中數據庫配置去掉了,在spring中配置
<!-- 配置c3p0連接池 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!-- 注入屬性值 --><property name="driverClass" value="com.mysql.jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql:///spring_day04"></property><property name="user" value="root"></property><property name="password" value=""></property></bean>
第四步 把hibernate的sessionFactory交給spring配置
(1)服務器啟動時候,加載spring配置文件,把配置文件中對象創建
(2)把sessionFactory對象創建在spring配置
(3)因為創建sessionFactory代碼不是new出來的,而是多行代碼實現的。
static {// 加載核心配置文件cfg = new Configuration();cfg.configure();sessionFactory = cfg.buildSessionFactory();}
(4)spring里面針對上面情況,封裝類,配置類對象可以創建sessionFactory
<!-- sessionFactory的創建交給spring管理 --><bean id="sessionFactory"class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><!-- 指定使用hibernate核心配置文件中,沒有數據庫配置,數據庫配置在spring里面配置,注入dataSource --><property name="dataSource" ref="dataSource"></property><!-- 指定使用hibernate核心配置文件 --><property name="configLocations" value="classpath:hibernate.cfg.xml"></property></bean>
第五步 在dao里面使用hibernateTemplate
(1)在dao得到hibernateTemplate的對象
//得到hibernateTemplate對象private HibernateTemplate hibernateTemplate;public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {this.hibernateTemplate = hibernateTemplate;}
bean中dao的配置
<!-- 創建實現類對象 --><bean id="userDaoImpl" class="cn.itcast.dao.UserDaoImpl"><property name="hibernateTemplate" ref="hibernateTemplate"></property></bean><!-- 創建hibernateTemplate對象 --><bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate"><!-- 注入sessionFactory --><property name="sessionFactory" ref="sessionFactory"></property></bean>
(2)調用Hibernate模板里面save方法添加
User user = new User();user.setUsername("rose");user.setAddress("japan");System.out.println("userDao...........");//調用save方法實現hibernateTemplate.save(user);
運行過程中可能會出現這樣的異常
這有可能是hibernateTemplate屬性值在bean中沒有配置,用debug找出錯誤所在。
我碰到的一個錯誤,配置沒有問題,而且也在bean中進行了事務管理,但是hibernateTemplate還是為null,問題出現在這里
UserAction如下所示:
@Overridepublic String execute() throws Exception {System.out.println("action.............");userService.add();return NONE;}
UserService中如下所示:
public void add(){UserDao dao = new UserDaoImpl();System.out.println("service.............");dao.add();}
?這里新創建一個dao,但是UserService已經在bean中進行配置了,并且userDao屬性也給了值,這里這樣新創建dao,那么UserDao中的hibernateTemplate,所以hibernateTemplate為null,解決辦法,把代碼修改成下面的樣子
public void add(){//UserDao dao = new UserDaoImpl();System.out.println("service.............");userDao.add();}
就可以了。
?如果沒有進行事務配置,就會出現如下異常
在bean中的事務配置如下所示:
<!-- 第一步 配置事務管理器 --><bean id="transactionManager"class="org.springframework.orm.hibernate5.HibernateTransactionManager"><!-- 注入sessionFactory --><property name="sessionFactory" ref="sessionFactory"></property></bean><!-- 第二步 開啟事務注解 --><tx:annotation-driven transaction-manager="transactionManager"/>
HibernateTemplate介紹
1 HibernateTemplate對hibernate框架進行封裝
直接調用HibernateTemplate里面的方法實現功能
?
2 HibernateTemplate常用的方法
·Serializable save(Object entity):添加操作
//1 get方法:根據id查詢User user = hibernateTemplate.get(User.class, 2);System.out.println(user.getUsername()+" "+user.getAddress());
?·List find(String queryString,Object... values):查詢操作的方法
find(String queryString, Object... values):List<?>-
(1)第一個參數是hql語句
(2)語句參數值
//2 find方法查詢所有記錄List<User> list = (List<User>) hibernateTemplate.find("from User");for(User user : list){System.out.println(user.getUsername()+" "+user.getAddress());}
條件查詢
//3 find方法條件查詢// 查詢username值lucyList<User> list = (List<User>) hibernateTemplate.find("from User where username=?", "lucy");//如果有多個問號,就多加參數//不管返回值有多少數據,返回值都是list集合for(User user : list){System.out.println(user.getUsername()+" "+user.getAddress());}
SSH框架整合過程
第一步 導入jar包
第二步 搭建struts2環境
(1)創建action,創建struts.xml,配置action
(2)配置struts2的過濾器
第三步 搭建hibernate環境
(1)創建實體類
(2)配置實體類和數據庫表映射關系
(3)創建hibernate核心配置文件
-引入映射配置文件
第四步 搭建spring環境
(1)創建spring核心配置文件
(2)讓spring配置文件在服務器啟動時候加載
-配置監聽器
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
-指定spring配置文件位置
<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:bean1.xml</param-value> </context-param>
第五步 struts2和spring整合
(1)把action在spring配置(action多實例的)
<!-- 配置action對象 --><bean id="userAction" class="cn.itcast.action.UserAction" scope="prototype"><!-- 注入service --><property name="userService" ref="userService"></property></bean>
(2)在struts.xml中action標簽class屬性里面寫bean的id值
<package name="demo1" extends="struts-default" namespace="/"><!-- class屬性里面不寫action全路徑了,因為寫了,action對象創建兩次 寫spring配置的action的bean的id值 --><action name="userAction" class="userAction"></action> </package>
第六步 spring和Hibernate整合
(1)把hibernate核心配置文件中的數據庫配置,在spring里面配置
<!-- 配置c3p0連接池 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!-- 注入屬性值 --><property name="driverClass" value="com.mysql.jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql:///spring_day04"></property><property name="user" value="root"></property><property name="password" value=""></property></bean>
(2)把hibernate的sessionFactory在spring中配置
<!-- sessionFactory的創建交給spring管理 --><bean id="sessionFactory"class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><!-- 指定使用hibernate核心配置文件中,沒有數據庫配置,數據庫配置在spring里面配置,注入dataSource --><property name="dataSource" ref="dataSource"></property><!-- 指定使用hibernate核心配置文件 --><property name="configLocations" value="classpath:hibernate.cfg.xml"></property></bean>
第七步 在dao里面使用hibernateTemplate
(1)在dao注入hibernateTemplate對象
(2)在hibernateTemplate對象中注入sessionFactory
//得到hibernateTemplate對象private HibernateTemplate hibernateTemplate;public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {this.hibernateTemplate = hibernateTemplate;}
<!-- 創建實現類對象 --><bean id="userDaoImpl" class="cn.itcast.dao.UserDaoImpl"><property name="hibernateTemplate" ref="hibernateTemplate"></property></bean><!-- 創建hibernateTemplate對象 --><bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate"><!-- 注入sessionFactory --><property name="sessionFactory" ref="sessionFactory"></property></bean>
第八步 配置事務
<!-- 第一步 配置事務管理器 --><bean id="transactionManager"class="org.springframework.orm.hibernate5.HibernateTransactionManager"><!-- 注入sessionFactory --><property name="sessionFactory" ref="sessionFactory"></property></bean><!-- 第二步 開啟事務注解 --><tx:annotation-driven transaction-manager="transactionManager"/>
在類中寫注解
@Transactional public class UserService {
?
其他整合方式
1 spring整合hibernate的時候,可以不寫Hibernate核心配置文件
(1)把hibernate核心配置文件中,基本信息配置和映射引入都放到spring中進行配置。
spring中指定核心配置文件,去掉下面
<!-- 指定使用hibernate核心配置文件 --> <property name="configLocations" value="classpath:hibernate.cfg.xml"></property>
然后spring中配置如下所示:
<!-- 配置hibernate基本信息 --><property name="hibernateProperties"><props><prop key="hibernate.show_sql">true</prop><prop key="hibernate.format_sql">true</prop><prop key="hibernate.hbm2ddl.auto">update</prop><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop></props></property><!-- 配置映射文件引入 --><property name="mappingResources"><list><value>cn/itcast/entity/User.hbm.xml</value></list></property>
Spring分模塊開發
1 在spring里面配置多個內容,造成配置混亂,不利于維護。
2 把spring核心配置文件中,一部分配置放到單獨的配置文件中,在spring核心配置文件中引入單獨配置文件。
<!-- 引入其他spring配置文件 --> <import resource="classpath:user.xml"/>
SSH聯系功能
1 客戶管理
(1)crud操作
2 聯系人管理
(1)配置一對多操作
(2)添加聯系人
-選擇聯系人所屬客戶
-struts2實現文件上傳
(3)聯系人列表
(4)修改聯系人
?
3 客戶拜訪管理
(1)多對多配置拆分成一對多來實現
4 綜合查詢
(1)多條件組合查詢
5 統計分析
(1)hibernateTemplate調用底層sql實現功能
6 其他知識
(1)SVN版本控制工具使用
(2)代碼重構(代碼優化)
-baseDao的抽取
(3)插件:jquery easyui
-jquery ajax操作
-json數據格式
完成任務
1 搭建ssh整合環境
2 復習知識
(1)jquery ajax操作
(2)json數據格式
?