#
摘要: JSP 標準標記庫( Standard Tag Library , JSTL) 是一組以標準化格式實現許多通用的 Web 站點功能的定制標記。 JSP 技術的優勢之一在于其定制標記庫工具。除了核心 JSP 標記,如 jsp:include 之外,定制標記庫工具使您能夠創建唯一的標記來描述以站點或應用程序為導向的操作。一旦您創建了定制標記庫 ( 簡稱 taglib) ,當您擴展項目或轉向另...
閱讀全文
發表時間:2012-06-08 13:10:03 | | 樓主 引用 |
|
Hibernate工作原理及為什么要用? 原理: 1.讀取并解析配置文件 2.讀取并解析映射信息,創建SessionFactory 3.打開Sesssion 4.創建事務Transation 5.持久化操作 6.提交事務 7.關閉Session 8.關閉SesstionFactory
為什么要用: 1. 對JDBC訪問數據庫的代碼做了封裝,大大簡化了數據訪問層繁瑣的重復性代碼。
2. Hibernate是一個基于JDBC的主流持久化框架,是一個優秀的ORM實現。他很大程度的簡化DAO層的編碼工作
3. hibernate使用Java反射機制,而不是字節碼增強程序來實現透明性。
4. hibernate的性能非常好,因為它是個輕量級框架。映射的靈活性很出色。它支持各種關系數據庫,從一對一到多對多的各種復雜關系。
2. Hibernate是如何延遲加載? 1. Hibernate2延遲加載實現:a)實體對象 b)集合(Collection)
2. Hibernate3 提供了屬性的延遲加載功能
當Hibernate在查詢數據的時候,數據并沒有存在與內存中,當程序真正對數據的操作時,對象才存在與內存中,就實現了延遲加載,他節省了服務器的內存開銷,從而提高了服務器的性能。
3.Hibernate中怎樣實現類之間的關系?(如:一對多、多對多的關系)
類與類之間的關系主要體現在表與表之間的關系進行操作,它們都市對對象進行操作,我們程序中把所有的表與類都映射在一起,它們通過配置文件中的many-to-one、one-to-many、many-to-many、
4. 說下Hibernate的緩存機制
1. 內部緩存存在Hibernate中又叫一級緩存,屬于應用事物級緩存
2. 二級緩存: a) 應用及緩存 b) 分布式緩存 條件:數據不會被第三方修改、數據大小在可接受范圍、數據更新頻率低、同一數據被系統頻繁使用、非 關鍵數據 c) 第三方緩存的實現
5. Hibernate的查詢方式 Sql、Criteria,object comptosition Hql: 1、 屬性查詢 2、 參數查詢、命名參數查詢 3、 關聯查詢 4、 分頁查詢 5、 統計函數
6. 如何優化Hibernate? 1.使用雙向一對多關聯,不使用單向一對多 2.靈活使用單向一對多關聯 3.不用一對一,用多對一取代 4.配置對象緩存,不使用集合緩存 5.一對多集合使用Bag,多對多集合使用Set 6. 繼承類使用顯式多態 7. 表字段要少,表關聯不要怕多,有二級緩存撐腰
7. Struts工作機制?為什么要使用Struts? 工作機制: Struts的工作流程: 在web應用啟動時就會加載初始化ActionServlet,ActionServlet從 struts-config.xml文件中讀取配置信息,把它們存放到各種配置對象 當ActionServlet接收到一個客戶請求時,將執行如下流程. -(1)檢索和用戶請求匹配的ActionMapping實例,如果不存在,就返回請求路徑無效信息; -(2)如果ActionForm實例不存在,就創建一個ActionForm對象,把客戶提交的表單數據保存到ActionForm對象中; -(3)根據配置信息決定是否需要表單驗證.如果需要驗證,就調用ActionForm的validate()方法; -(4)如果ActionForm的validate()方法返回null或返回一個不包含ActionMessage的ActuibErrors對象, 就表示表單驗證成功; -(5)ActionServlet根據ActionMapping所包含的映射信息決定將請求轉發給哪個Action,如果相應的 Action實例不存在,就先創建這個實例,然后調用Action的execute()方法; -(6)Action的execute()方法返回一個ActionForward對象,ActionServlet在把客戶請求轉發給 ActionForward對象指向的JSP組件; -(7)ActionForward對象指向JSP組件生成動態網頁,返回給客戶;
為什么要用: JSP、Servlet、JavaBean技術的出現給我們構建強大的企業應用系統提供了可能。但用這些技術構建的系統非常的繁亂,所以在此之上,我們需要一個規則、一個把這些技術組織起來的規則,這就是框架,Struts便應運而生。
基于Struts開發的應用由3類組件構成:控制器組件、模型組件、視圖組件
8. Struts的validate框架是如何驗證的? 在struts配置文件中配置具體的錯誤提示,再在FormBean中的validate()方法具體調用。
9. 說下Struts的設計模式 MVC 模式: web應用程序啟動時就會加載并初始化ActionServler。用戶提交表單時,一個配置好的ActionForm對象被創建,并被填入表單相應的數 據,ActionServler根據Struts-config.xml文件配置好的設置決定是否需要表單驗證,如果需要就調用ActionForm的 Validate()驗證后選擇將請求發送到哪個Action,如果Action不存在,ActionServlet會先創建這個對象,然后調用 Action的execute()方法。Execute()從ActionForm對象中獲取數據,完成業務邏輯,返回一個ActionForward對 象,ActionServlet再把客戶請求轉發給ActionForward對象指定的jsp組件,ActionForward對象指定的jsp生成動 態的網頁,返回給客戶。
10. spring工作機制及為什么要用? 1.spring mvc請所有的請求都提交給DispatcherServlet,它會委托應用系統的其他模塊負責負責對請求進行真正的處理工作。 2.DispatcherServlet查詢一個或多個HandlerMapping,找到處理請求的Controller. 3.DispatcherServlet請請求提交到目標Controller 4.Controller進行業務邏輯處理后,會返回一個ModelAndView 5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象 6.視圖對象負責渲染返回給客戶端。
為什么用: {AOP 讓開發人員可以創建非行為性的關注點,稱為橫切關注點,并將它們插入到應用程序代碼中。使用 AOP 后,公共服務 (比 如日志、持久性、事務等)就可以分解成方面并應用到域對象上,同時不會增加域對象的對象模型的復雜性。 IOC 允許創建一個可以構造對象的應用環境,然后向這些對象傳遞它們的協作對象。正如單詞 倒置 所表明的,IOC 就像反 過來的 JNDI。沒有使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構造(straight construction),每一個對象都是用其協作對象構造的。因此是由容器管理協作對象(collaborator)。 Spring即使一個AOP框架,也是一IOC容器。 Spring 最好的地方是它有助于您替換對象。有了 Spring,只要用 JavaBean 屬性和配置文件加入依賴性(協作對象)。然后可以很容易地在需要時替換具有類似接口的協作對象。} |
當我們插入一條數據的時候,我們很多時候都想立刻獲取當前插入的主鍵值返回以做它用。我們通常的做法有如下幾種: 1、先 select max(id) +1 ,然后將+1后的值作為主鍵插入數據庫; 2、使用特定數據庫的 auto_increment 特性,在插入數據完成后,使用 select max(id) 獲取主鍵值; 3、對于Oracle,使用 sequence 獲取值。 對于以上3種方法都無法絕對保證在高并發情況下的操作的原子性。 現記錄以下幾種獲取數據庫主鍵值方法: 1、數據庫原生支持的sql方法: SQLServer: INSERT INTO table_name (.....) VALUES(......) SELECT @@IDENTITY AS aliasname; 上面的語句相當于查詢語句,從結果集中使用 getXXX(aliasname) 方法獲取主鍵值。 Oracle: INSERT INTO table_name(......) VALUES(......) RETURNING[primaryKey INTO]:aliasname; 也是相當于查詢語句,從結果集中使用 getXXX(aliasname) 方法獲取主鍵值。 2、java.sql.Statement 返回鍵獲取: a: 使用JDBC 3.0提供的 getGeneratedKeys(推薦使用) Statement stmt = ... ; stmt.executeUpdate("INSERT INTO table_name(......) VALUES(......)", Statement.RETURN_GENERATED_KEYS); ResultSet rs = stmt.getGeneratedKeys(); int keyValue = -1; if (rs.next()) { keyValue = rs.getInt(1); } b:使用特定數據庫特有的SQL Statement stmt = ... ; stmt.executeUpdate("INSERT INTO table_name(......) VALUES(......)", Statement.RETURN_GENERATED_KEYS); ResultSet rs = stmt.executeQuery("SELECT LAST_INSERT_ID()"); int keyValue = -1; if (rs.next()) { keyValue = rs.getInt(1); } 那么現在我就一個例子來看一下原生的sql怎么能得到執行的返回結果 項目背景:數據庫是oracle數據庫,id生成規則是通過觸發器插入數據的時候自動增長,所以在插入數據的時候在sql中就不需要指明id值。但是另外一張表需要引用這個id值作為外鍵,那么就必須獲得被引用的這個表的ID,為了避免并發問題,我們只能在插入前面那張表的時候就獲得他的ID,所以我使用了下面的方法來處理。 Connection con = DBConnector.getconecttion(); // 取得一個數據庫連接 CallableStatement cst = null; con.setAutoCommit(false); String insertSql = "begin insert into TABLE (field_0,field_1) values (value_0,value_1) returning id into ?;end; "; try { cst = con.prepareCall(insertSql); //執行存儲過程 cst.registerOutParameter(1, Types.INTEGER); //為存儲過程設定返回值 int count = cst.executeUpdate(); //得到預編譯語句更新記錄或刪除操作的結果 int id = cst.getInt(1); //得到返回值 System.out.println("成功執行了:" + count + "條數據,其ID值:" + id); } catch (SQLException e1) { con.rollback(); con.setAutoCommit(true); }finally{ con.commit(); con.close(); }
摘要: 一、 JAVA語言 1、 面向對象的三個基本特征 答:繼承、封裝、多態 2、 方法重載和方法重寫的概念和區別 答:方法重載:方法名稱相同但方法內的參數個數和參數類型不一樣。 方法重寫:在類的繼承中,當子類的成員變量與父類的成員變量同名時,子類的成員變量會隱藏父類的成員變量;當子類的方法與父類的方法同名,參數列表、反回值類型相同時,子類的方法將覆蓋父...
閱讀全文
開發dao模型: 接口是用來定義操作的,在這里應該定義:添、刪、改、查(ID查、查詢全部、模糊查詢)等操作。 import java.util.* ; // 規定出了操作person表在此項目里的全部方法 public interface PersonDAO { // 增加操作 public void insert(Person person) throws Exception; // 修改操作 public void update(Person person) throws Exception; // 刪除操作 public void delete(String id) throws Exception; // 按ID查詢操作 public Person queryById(String id) throws Exception; // 查詢全部 public List queryAll() throws Exception; // 模糊查詢 public List queryByLike(String cond) throws Exception; } 另創建一個類 import java.util.*; public class PersonDAOImpl implements PersonDAO { // 增加操作 public void insert(Person person) throws Exception { } // 修改操作 public void update(Person person) throws Exception { } // 刪除操作 public void delete(String id) throws Exception { } // 按ID查詢操作 public Person queryById(String id) throws Exception { } // 查詢全部 public List queryAll() throws Exception { } // 模糊查詢 public List queryByLike(String cond) throws Exception { } } 接下來我們按方法一個一個的實現功能: (1)添加操作,傳入參數是Person person,同學們要理解為什么傳入Person,因為Person是數據bean,是用來存放數據的不管從前臺到后臺數據庫還是從后臺數據庫到前臺,Person的角色都是用來傳送數據的。 sql = "INSERT INTO person (id,name,password,age,email) VALUES (?,?,?,?,?)" ; (2)修改操作與添加操作類似傳入參數也為person對象,只是SQL的執行語句不同,當然修改要有條件,即修改誰,這里是以id作為修改條件的。 sql = "UPDATE person SET name=?,password=?,age=?,email=? WHERE id=?" ; (3)刪除操作,為什么這里沒有以Person做參數呢,原因是使用的過程中刪除操作都是通過id來標志一行記錄的,為了使用方便所以傳一個id就可以實現刪除操作。 sql = "DELETE FROM person WHERE id=?" ; (4)查詢操作一般分為三種:按ID查詢、查詢全部、模糊查詢。 第一種:按ID查詢操作,傳入一個id號返回一條記錄,也就是一個person對象,person對應著數據庫里的一行記錄,所以返回值應該為Person類型。 sql = "SELECT id,name,password,age,email FROM person WHERE id=?" ; 第二種:查詢全部,也就是查詢整張表的全部數據,因為整張表有多條記錄,所以對應就應該有多個person對象,查詢的時候我們可以用list存放多個person對象,查詢之后將該list返回。 sql = "SELECT id,name,password,age,email FROM person" ; 第三種:模糊查詢,所謂模糊查詢是指在數據表中查找與指定字符串部分相匹配的字段的行,如我們可以在一個用戶的數據庫中查找姓名中含有“靜”字的所有記錄,可以用like語句來實現。由于結果可能有多條記錄,所以返回值好是存放Person對象的List。 sql = "SELECT id,name,password,age,email FROM person "+"WHERE name LIKE ? or email LIKE ?" ;
打印出Ibatis最終的SQL語句 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n log4j.logger.com.ibatis=debug log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug log4j.logger.java.sql.Connection=debug log4j.logger.java.sql.Statement=debug log4j.logger.java.sql.PreparedStatement=debug,stdout
摘要: 全注解SSH 一,hibernate annotation Class注解: 1. @Entity:表明當前類是一個持久化類 2. @Table(name="team",catalog="NBA"):映射一個表team,所對應的數據庫是NBA,可以省略 字段屬性注解: 1. @GenericGenerator(name = "genera...
閱讀全文
摘要: 在常見用法中,集合(collection)和數學上直觀的集(set)的概念是相同的。 集是一個唯一項組,也就是說組中沒有重復項。實際上,“集合框架”包含了一個 Set 接口和許多具體的 Set 類。但正式的集概念卻比 Java 技術提前了一個世紀,那時英國數學家 George Boole 按邏輯正式的定義了集的概念。大部分人在小學時通過我們熟悉的維恩圖引入的“集...
閱讀全文
如何進入dos操作界面 開始鍵+R輸入cmd回車 如何切換盤符 例:F:+enter這樣就切換到F盤了,(C盤D盤E盤)同理。 1.進出文件夾 進入目錄 cd 文件夾名 例:F:\>cd空格(文件夾名) F:\>cd (aa) F:\aa>cd (bb) F:\aa\bb>cd(cc) 2.錄 cd .. 例:F:\aa\bb\cc>cd.. F:\aa\bb>cd.. F:\aa>cd.. F:> 3.清屏命令 cls 4.查看目錄命令: 查看當前文件夾目錄 dir 查看當前目錄以及子目錄中的所有文件 dir/s 分頁查看當前目錄以及子目錄中的所有文件 dir/s/p 5. 創建文件夾 md空格(文件夾名字) 6.刪除文件夾 rd 空格(文件夾名字) 7.建立一個 打不開 刪不掉的文件夾 md\文件夾名字..\ 只能通過dos命令刪除 rd\文件夾名字..\ 8.關機命令 shutdown空格-s空格-t(時間) 取消關機:shutdown空格-a 注銷:shutdown空格-l 9.定時關機 At 12:00 shutdown –s 10:Copy 文件名1(帶后綴) 文件名2(帶后綴)
摘要: 1命名規范 1.1 package (*) 包名全部由小寫的ASCII字母組成,用“.”分隔。 在此項目中,所有的包均以“com.prosten.ticket”開頭。 1.2 class (*) 類名應當是名詞,每個內部單詞的頭一個字母大寫。應當使你的類名簡單和具有說明性。用完整的英語單詞或約定俗成的...
閱讀全文