# Tomcat-Database **Repository Path**: hxl495/Tomcat-Database ## Basic Information - **Project Name**: Tomcat-Database - **Description**: 扩展Tomcat源码,实现一键增删改查功能 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2020-06-22 - **Last Updated**: 2021-11-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Tomcat-Database #### 介绍 根据Tomcat9源码二次开发,增加数据库功能,可一行代码实现CURD #### 安装教程 需要先配置Ant,然后在根目录下执行ant命令,即可编译,编译后的目录在Tomcat-Database/output/build下,其中在bin下可直接执行./startup.sh启动 #### 使用说明 其实这也不算扩展吧,只是改了小小小的一部分,先来展示下怎么使用。 #### eclipse 如果要在Eclipse中使用,务必添加二次开发后的Tomcat路径(文章后有链接)。 ![在这里插入图片描述](https://images.gitee.com/uploads/images/2020/0622/094802_8d9ee826_4819156.png) 此处也要换成二次开发后的,不然后续用到的类会找不到。 ![在这里插入图片描述](https://images.gitee.com/uploads/images/2020/0622/094802_dd066ae1_4819156.png) 好,看看怎么一行代码获取表中所有记录。 首先要在init(ServletConfig config)方法中拿到HTomcatPal对象,这是唯一的写法,你不可能通过new创建。 ```java @WebServlet("/BookServlet") public class BookServlet extends HttpServlet { private static final long serialVersionUID = 1L; private HTomcatPal hTomcatPal; @Override public void init(ServletConfig config) throws ServletException { /** * 获取BookDao,只能通过此方式 */ hTomcatPal = (HTomcatPal)config.getServletContext().getAttribute("AZY"); } public BookServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List result = hTomcatPal.findAll(BookEntity.class); request.setAttribute("data", result); request.getRequestDispatcher("bookList.jsp").forward(request, response); } ``` 在看看jsp中通过jstl简单渲染一下。 ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 图书列表
ID 书名 作者 价格 描述
``` 效果就出来了,是不是非常简单? ![在这里插入图片描述](https://images.gitee.com/uploads/images/2020/0622/094802_a5bb09f7_4819156.png) 当然,这里最重要的是在实体上加入注解@TabName,并指明表名,如果是主键,则要加上@PrimaryKey注解。如果遵守字段命名规范,则可以不用加@FieldName标明对应数据库字段是什么。这里的规范就是如果Java字段是bookName,则数据库字段是book_name,在比如bookAuthor,对应数据库字段就是book_author,如果不是这样的规范,则需要加入@FieldName注解标明。 另外,一定要留一个空构造方法。 ```java @TabName("tb_books") public class BookEntity { @PrimaryKey private int id; private String bookName; private String bookAuthor; private BigDecimal bookPrice; @FieldName("book_describ") private String bookDesc; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public String getBookAuthor() { return bookAuthor; } public void setBookAuthor(String bookAuthor) { this.bookAuthor = bookAuthor; } public BigDecimal getBookMoney() { return bookPrice; } public void setBookMoney(BigDecimal bookMoney) { this.bookPrice = bookMoney; } public String getBookDesc() { return bookDesc; } public void setBookDesc(String bookDesc) { this.bookDesc = bookDesc; } public BookEntity(int id, String bookName, String bookAuthor, BigDecimal bookPrice, String bookDesc) { this.id = id; this.bookName = bookName; this.bookAuthor = bookAuthor; this.bookPrice = bookPrice; this.bookDesc = bookDesc; } public BookEntity() { } @Override public String toString() { return "BookEntity{" + "id=" + id + ", bookName='" + bookName + '\'' + ", bookAuthor='" + bookAuthor + '\'' + ", bookPrice=" + bookPrice + ", bookDesc='" + bookDesc + '\'' + '}'; } } ``` 但是,是不是需要告诉Tomcat要连接的数据库信息呢?当然,这是必须的,我们可以直接在web.xml中进行配置,无需创建额外文件,如下的几个标签,其中core-connect是数据库连接池的大小。 当Tomcat启动后,会打印出这些配置。 ```xml DynamicWebDemo-Dababase index.html index.htm index.jsp default.html default.htm default.jsp 15 jdbc:mysql://localhost:3306/test root xxxxx ``` 另外,源码中已经加入了mysql-connector-java-8.0.19,小伙伴无需在导入mysql驱动jar,这听起来是不是更方便了呢? #### IDEA 同样在idea中也要先配置二次开发后的Tomcat,如果在Idea下找不到HTomcatPal,则需要在这个界面添加database.jar。database则是所写的简易数据库框架,原路径在`org.apache.database`,配置ant后会生成database.jar。配置后使用方法同上。 ![在这里插入图片描述](https://images.gitee.com/uploads/images/2020/0622/094802_db930db7_4819156.png) ### 三、API 当然少不了API的使用,这里提供了简单的CRUD。 插入 ```java BookEntity entity =new BookEntity(); for (int i = 0; i < 100; i++) { entity.setBookAuthor("作者"+i); entity.setBookDesc("描述"+i); entity.setBookMoney(new BigDecimal(""+i)); entity.setBookName("书名"+i); tomcatPal.insert(entity); } ``` 删除 ```java /** * 删除ID为26580,26581,26583 */ tomcatPal.deleteIds(BookEntity.class,26580,26581,26583); /** * 删除作者为’作者35‘的记录 */ tomcatPal.deleteByCondition(BookEntity.class,new Condition.Builder() .whereEq("book_author","作者35") .builder()); ``` 更具条件查找 ```java /** *查找金额大于50的记录 */ List entities = tomcatPal.findAll(BookEntity.class, new Condition.Builder() .whereGt("book_price", 50) .builder()); System.out.println(entities); ``` 此时列举这么多,主要的类就是Condition(条件)、HTomcatPal。