从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)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值