Tomcat-Database
介绍
根据Tomcat9源码二次开发,增加数据库功能,可一行代码实现CURD
安装教程
需要先配置Ant,然后在根目录下执行ant命令,即可编译,编译后的目录在Tomcat-Database/output/build下,其中在bin下可直接执行./startup.sh启动
使用说明
其实这也不算扩展吧,只是改了小小小的一部分,先来展示下怎么使用。
eclipse
如果要在Eclipse中使用,务必添加二次开发后的Tomcat路径(文章后有链接)。
此处也要换成二次开发后的,不然后续用到的类会找不到。
好,看看怎么一行代码获取表中所有记录。
首先要在init(ServletConfig config)方法中拿到HTomcatPal对象,这是唯一的写法,你不可能通过new创建。
@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简单渲染一下。
pageEncoding="UTF-8"%>
图书列表书名
作者
搜索
ID 书名
作者 价格
class="row-item">描述
- ${item.getId()}
class="row-item flex-2">${item.getBookName() }
class="row-item">${item.getBookAuthor() }
class="row-item">${item.getBookMoney() }
class="row-item">${item.getBookDesc() }
效果就出来了,是不是非常简单?
当然,这里最重要的是在实体上加入注解@TabName,并指明表名,如果是主键,则要加上@PrimaryKey注解。如果遵守字段命名规范,则可以不用加@FieldName标明对应数据库字段是什么。这里的规范就是如果Java字段是bookName,则数据库字段是book_name,在比如bookAuthor,对应数据库字段就是book_author,如果不是这样的规范,则需要加入@FieldName注解标明。
另外,一定要留一个空构造方法。
@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启动后,会打印出这些配置。
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。配置后使用方法同上。
三、API
当然少不了API的使用,这里提供了简单的CRUD。
插入
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);
}
删除
/**
* 删除ID为26580,26581,26583
*/
tomcatPal.deleteIds(BookEntity.class,26580,26581,26583);
/**
* 删除作者为’作者35‘的记录
*/
tomcatPal.deleteByCondition(BookEntity.class,new Condition.Builder()
.whereEq("book_author","作者35")
.builder());
更具条件查找
/**
*查找金额大于50的记录
*/
List entities = tomcatPal.findAll(BookEntity.class, new Condition.Builder()
.whereGt("book_price", 50)
.builder());
System.out.println(entities);
此时列举这么多,主要的类就是Condition(条件)、HTomcatPal。