-
DAO層:
執行sql語句
獲取結果并封裝結果信息
返回結果
查看全部 -
OGNL表達式
查看全部 -
OGNL表達式
查看全部 -
啊三妻四妾
查看全部 -
Mybatis常用標簽
查看全部 -
var content;
//content 為‘’????null?????undeifend????0時,if(content) 意為 if(false)
查看全部 -
mybatis的下載地址:https://github.com/mybatis/mybatis-3/releases如何分層,為什么要分層。一個servlet類包含了太多代碼,把數據庫相關表操作放到了dao層,把業務相關操作放到了service層,service層依賴dao層的對象,這里是直接new出來,如果采用spring框架,可以通過依賴注入dao的對象。servlet依賴service對象,一樣是new的,不過這樣分層不同功能的代碼就分出去了。servlet作為一個控制類,基本做這幾樣事情:一些配置,例如設置編碼,這部分重復工作可以通過過濾器統一處理。獲取請求參數,當然也可以通過過濾器處理,這也是其他一些mvc框架,例如struts,springmv要做的數據綁定功能,然后是調用業務類處理業務,一個項目主要就是在寫業務了。最后就是跳轉頁面。所以servlet應該只做控制的事情
查看全部 -
應該專門設置一個類,專門來獲取SqlSession對象. 如果是路徑的話就不能寫點,都用/代替. public SqlSession getSqlSession(){ ? ?//讀取配置文件 Reader reader=Resources.getResourceAsReader("配置文件所在路徑"); //構造SqlSessionFactory對象 ? ? SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader); ? ? //通過會話工廠打開會話 ? ? SqlSession sqlSession=sqlSessionFactory.openSession(); ? ? return sqlSession; } SqlSession用完也需要關閉. 異常中的finally子句: finally可以沒有,也可以只有一個.無論有沒有發生異常,它總會在這個異常處理結構的最后運行.即使你在try塊內用return返回了,在返回前finally總是要執行,這以便讓你有機會能夠在異常處理最后做一些清理工作.如關閉數據庫連接等等.
Mybatis之SqlSession(核心) SqlSession的作用: 1、向 SQL 語句傳入參數 2、執行SQL語句 3、獲取執行SQL語句的結果 4、事務的控制 如何得到SqlSession: 1、通過配置文件獲取數據庫連接相關信息 2、通過配置信息構建SqlSessionFactory 3、通過SqlSessionFactory打開數據庫會話 //通過配置文件獲取數據庫連接信息 Reader reader=Resources.getResourceAsReaser("config/Configuration.xml"); //通過配置信息構建一個sqlSessinfactory SqlSessionFactory sqlSessionFactory=new SqlSessionfactoryBuilder(reader); //通過sqlSessionFactory打開一個數據庫回話 SqlSession sqlsession=sqlSessionFactory.openSession();
查看全部 -
在Dao層中封裝了與數據庫有關的操作,在service層調用Dao層來處理業務邏輯,在servlet中調用service層中的對象來得到處理的結果,并且返回給頁面 * servlet的幾個功能<br> * 1.接受頁面的值<br> * 2.向頁面傳值<br> * 3.(根據業務需要,調用service)<br> * 4.跳轉頁面
各個層的功能 Model: 數據表對應的模型; DAO:每個表對應一個DAO,對該表的一些操作。 Service:或Logic層,跟Servlet對應,一些相關的業務功能。 Servlet: 設置編碼/過濾器;接受頁面的值;向頁面傳值;業務需要調用service;跳轉頁面。 ps: 1,jsp頁面傳值可以使用超鏈接形式為:地址?參數=要傳的值! 2,servlet總采用request.getParameter("參數”)接收; 3,jdbc中對占位符?的復制采用setInt(index,參數)的方式index代表第幾個?。
查看全部 -
Trim Trim() 功能刪除字符串首部和尾部的空格。 語法Trim ( string ) 參數string:string類型,指定要刪除首部和尾部空格的字符串返回值String。函數執行成功時返回刪除了string字符串首部和尾部空格的字符串,發生錯誤時返回空字符串("")。如果任何參數的值為NULL,Trim()函數返回NULL。
String 字符串常量 StringBuffer 字符串變量(線程安全) StringBuilder 字符串變量(非線程安全) 簡要的說, String 類型和 StringBuffer 類型的主要性能區別其實在于 String 是不可變的對象, 因此在每次對 String 類型進行改變的時候其實都等同于生成了一個新的 String 對象,然后將指針指向新的 String 對象,所以經常改變內容的字符串最好不要用 String ,因為每次生成對象都會對系統性能產生影響,特別當內存中無引用對象多了以后, JVM 的 GC 就會開始工作,那速度是一定會相當慢的。 在大部分情況下 StringBuilder > StringBuffer
查看全部 -
@關鍵代碼(技巧): StringBuilder sql=new StringBuilder(" select ID,COMMAND,DESCRIPTION,CONTENT from message where 1=1 "); List<String> paramList=new ArrayList<String>(); if(command!=null&&!"".equals(command.trim())){ sql.append(" and COMMAND=? "); paramList.add(command); } if(description!=null&&!"".equals(description.trim())){ sql.append(" and DESCRIPTION like '%' ? '%' ");//MySql語法:'%'空格?空格'%' paramList.add(description); } PreparedStatement pstmt=conn.prepareStatement(sql.toString()); for(int i=0;i<paramList.size();i++){ pstmt.setString(i+1,paramList.get(i)); } ResultSet rs=pstmt.executeQuery(); 注意1:PreparedStatement語句要在sql語句還沒準備好后面,但要在循環前面。 注意2:為何不直接在if語句后寫“?”的內容呢?因為不知道問號序號是多少,不好控制。 Ps1:Tomcat啟動一般用Debug,只要不要設置斷點,效果與Run是一樣的,這樣一來,如果想調試就設置斷點即可,不需要再切換到Debug模式(Ps:Debug模式下,修改Java代碼會自動上傳到服務器,無需重新啟動Tomcat) Ps2:sql+="";//這樣寫不好,因為原來的字符串占用內存還在,推薦使用StringBuffer、StringBuilder。
List<Message> messageList=new ArrayList<Message>(); while(rs.next()){ Message message=new Message(); messageList.add(message); message.setId(rs.getString("ID")); ... } 注意:先放數據,再添加到容器;或者先添加到容器,再放數據。都是一樣的,因為它放進去是引用類型,并不是對象本身。 select * from...//1 select id,name,...(所有列名) from...//2 注意:2的效率和安全性比1要高。 Ps1: Alt+Shift+J:自動添加類的文檔注釋。 Ctrl+Shift+Y:大寫轉小寫 Ctrl+Shift+X:小寫轉大寫 Ps2:varStatus=""中變量名支持自定義。
查看全部 -
1.載入JSTL中的c標簽:<%@ taglib prefix="c" uri="http://java.sum.com/jsp/jstl/core" %> 2.利用c標簽來進行foreach循環和if判斷 <c:forEach items="${messageList}" var="message" varStatus="status"><!-- varSatus屬性,可以通過其屬性值獲取到本次循環的狀態,如其中的index可以獲取循環的次數(從0開始),可配合if標簽做隔行換色的效果 --> <tr <c:if test="${status.index % 2 != 0}">style='background-color:#ECF6EE;'</c:if>> <td><input type="checkbox" name="id" value="${message.id}"/></td> <td>${status.index + 1}</td> <td>${message.command}</td> <td>${message.description}</td> <td> </c:forEach>
查看全部 -
//加載驅動,連數據庫 Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/message","root","123123"); ? //操作數據庫并聲明 String sql = "select ID ,COMMAND,DESCRIPTION,CONTENT from MESSAGE"; PreparedStatement statement = conn.prepareStatement(sql.toString()); //查詢數據庫 ResultSet rs = statement.executeQuery(); //查詢結果放在一個集合中 List<Message> messageList = new ArrayList<Message>(); while(rs.next()) { ? Message message = new Message(); messageList.add(message); message.setId(rs.getString("ID")); message.setCommand(rs.getString("COMMAND")); message.setDescription(rs.getString("DESCRIPTION")); message.setContent(rs.getString("CONTENT")); } //向頁面傳值 req.setAttribute("messageList", messageList); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { } //跳轉 req.getRequestDispatcher("/WEB-INF/jsp/back/list.jsp").forward(req, resp); }
alt+shift+j 自動加載類的注釋
查看全部 -
文件在WebRoot目錄下就相當于在工程項目下 1.凡是寫在WebRoot文件夾中的jsp文件,必須通過后臺的servlet才能訪問到, 如果只是在地址欄中輸入,是無法訪問到的 (也就是說我們可以直接不用加Web-Root就可以訪問到在此文件夾下的直接文件如:Index.jsp) (以MicroMessage這個項目為例:) 2.jsp中的basePath的值是:http://localhost:8080/MicroMessage/ 3.jsp中的path的值是:/MicroMessage 4.在servlet中: request.getRequestDispatcher("/WEB-INF/jsp/back/list.jsp").forward( request, response); 這里的/代表的是項目的根目錄,所以不用加上Web-Root,就像我們訪問index.jsp不用加上 Web-Root一樣
查看全部 -
案例分析 基本功能 接收發送指令 根據指令自動回復對應的內容 模塊劃分 回復內容列表--->回復維護內容-->對話功能---->回復內容刪除
查看全部
舉報