上一篇
场景引入:
"小王最近接了个私活,客户要个能管理商品库存的系统,要求能增删改查数据还得带网页界面,他盯着电脑发愁:从零写SQL太麻烦,用现成工具又怕不够灵活…" 如果你也遇到过类似情况,今天这个方案能让你两杯咖啡的时间搭出可用系统!
// 示例:H2内存数据库连接 String url = "jdbc:h2:mem:inventory;DB_CLOSE_DELAY=-1"; Connection conn = DriverManager.getConnection(url, "sa", "");
# application.properties配置示例 spring.datasource.url=jdbc:mysql://localhost:3306/inventory_db spring.datasource.username=root spring.datasource.password=yourpassword
用Java实体类反向生成表结构(Hibernate/JPA示例):
@Entity @Table(name = "products") public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private String name; @Column(name = "stock_count") private Integer stock; // 省略getter/setter }
文件结构:
/src
├─main
│ ├─java/com/example/dao/ProductDao.java # 数据库操作
│ ├─java/com/example/web/ProductServlet.java # 控制器
│ └─webapp/WEB-INF/views/products.jsp # 展示页面
核心代码片段:
// ProductServlet.java @WebServlet("/products") public class ProductServlet extends HttpServlet { private ProductDao dao = new ProductDao(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("productList", dao.getAll()); request.getRequestDispatcher("/WEB-INF/views/products.jsp").forward(request, response); } }
<%-- products.jsp 简易列表页 --%> <table class="table"> <c:forEach items="${productList}" var="product"> <tr> <td>${product.name}</td> <td>${product.stock}</td> <td> <a href="/edit?id=${product.id}" class="btn btn-sm btn-warning">修改</a> </td> </tr> </c:forEach> </table>
response.setContentType("text/html;charset=UTF-8");
-- MySQL分页查询 SELECT * FROM products LIMIT 10 OFFSET 20;
用MyBatis Generator自动生成DAO层代码:
<!-- generatorConfig.xml配置片段 --> <table tableName="products" domainObjectName="Product" enableCountByExample="false"/>
直接套用Bootstrap模板:
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
打印SQL日志(log4j配置示例):
log4j.logger.java.sql.PreparedStatement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG
连接池泄漏:
记得在finally块关闭Connection:
try (Connection conn = dataSource.getConnection()) { // 操作数据库 } // 自动关闭
SQL注入防护:
永远用PreparedStatement:
String sql = "SELECT * FROM users WHERE username = ?"; PreparedStatement stmt = conn.prepareStatement(sql); stmt.setString(1, userInput);
最后建议:
先做个最小可行版本(比如只实现列表和添加功能),再逐步迭代,遇到复杂查询需求时,可以考虑用Spring Data JPA等框架简化开发。
(本文示例环境:JDK 17 + Tomcat 10 + MySQL 8,2025年7月验证通过)
本文由 松采南 于2025-07-30发表在【云服务器提供商】,文中图片由(松采南)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/481719.html
发表评论