從IO 到框架(6-2)-Struts2 學生管理系統實戰覆盤

步驟覆盤:

1)建數據庫和表。

2)建實體類,注意用包裝類代替基本數據類,如Integer 代替int.

3)建Action類,繼承ActionSupport;

    在此類中調用Service 層,利用IDE 的提示創建Service 接口和實現類,5個基本方法:增、刪、改、查多個、查單個,後期加一個getPage() 用於分頁。

    在Service 實現類調用Dao 層,利用IDE 的提示創建Dao 接口和實現類,除Service 層6個方法以外,還有一個getCount() 用於獲取數據總條數。

4)建數據庫連接類:

public class DBManager {
	private final static String DRIVER_CLASS = "com.mysql.jdbc.Driver";
	private final static String USERNAME = "root";
	private final static String PASSWORD = "root";
	private final static String URL = "jdbc:mysql://localhost:3306/1801_struts2";

	public static Connection getConnection() {
		try {
			Class.forName(DRIVER_CLASS);
			return DriverManager.getConnection(URL, USERNAME, PASSWORD);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	public static void close(Connection connection, PreparedStatement prst, ResultSet resultSet) {
		if (resultSet != null) {
			try {
				resultSet.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (prst != null) {
			try {
				prst.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (prst != null) {
			try {
				prst.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (connection != null) {
			try {
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

5)建數據庫工具類

public class DBUtils<T> {
	
	public static int commonUpdate(String sql, Object... args) {

		Connection connection = DBManager.getConnection();

		PreparedStatement prst = null;
		try {
			prst = connection.prepareStatement(sql);

			for (int i = 0; i < args.length; i++) {
				prst.setObject(i + 1, args[i]);
			}

			return prst.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBManager.close(connection, prst, null);
		}
		return 0;
	}

	public List<T> commonQuery(String sql, Class<T> cls, Object... args) {

		List<T> list = new ArrayList<>();
		
		Connection connection = DBManager.getConnection();

		PreparedStatement prst = null;
		ResultSet resultSet = null;
		try {
			prst = connection.prepareStatement(sql);

			if (args != null) {
				for (int i = 0; i < args.length; i++) {
					prst.setObject(i+1, args[i]);
				}
			}
			
			resultSet = prst.executeQuery();
			while(resultSet.next()){
				T ins = cls.newInstance(); 
				Field[] declaredFields = cls.getDeclaredFields(); 
				for (Field field : declaredFields) {
					field.setAccessible(true); 
					Object value = resultSet.getObject(field.getName()); 
					field.set(ins, value); 
				}
				list.add(ins);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}finally{
			DBManager.close(connection, prst,resultSet);
		}
		return list;
	}

	public int commonCount(String sql) {

		Connection connection = DBManager.getConnection();

		PreparedStatement prst = null;
		ResultSet resultSet = null;
		try {
			prst = connection.prepareStatement(sql);

			resultSet = prst.executeQuery();
			if(resultSet.next()){
				return resultSet.getInt(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DBManager.close(connection, prst,resultSet);
		}
		return 0;
	}

}

6)用數據庫工具類完成Dao 的實現類方法,並用JUnit 測試:在要創建測試用例的類中按 Ctrl + Shift + T,選擇需測試的方法即可;寫一個方法測一個方法;順便在add 方法循環添加數據,用於測試分頁。

    第一步至此大概用時50分鐘。


7)Action 類方法 findUserList(), 注意實體類需要setter getter.

8)userlist.jsp, 標籤;後加分頁。

    JSTL & EL: 

                <c:forEach items="${page.list}" var="user">
			<tr>
				<td>${user.id}</td>
				<td>${user.username}</td>
				<td>${user.password}</td>
				<td>${user.age}</td>
				<td><a href="findUserById?user.id=${user.id}">編輯</a> <a
					href="deleteUser?user.id=${user.id}">刪除</a></td>
			</tr>
		</c:forEach>
...
                <jsp:include page="common/page.jsp"></jsp:include>

    Struts2 labels & OGNL: 

        <!--添加分頁後 value 改爲"page.list" -->
	<s:iterator value="#request.list" var="user">
		<tr>
			<td><s:property value="#user.id"/> </td>
			<td><s:property value="#user.username"/> </td>
			<td><s:property value="#user.password"/> </td>
			<td><s:property value="#user.age"/> </td>
			<td>
				<s:a href="findUserById?user.id=%{#user.id}">編輯</s:a>
				<s:a href="deleteUser?user.id=%{#user.id}">刪除</s:a>
			</td>
		</tr>
	</s:iterator>...        
	<s:include value="common/page.jsp"></s:include>

9)




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章