IntelliJ下使用Code/Live Template加快编码速度:程序员的工作不是写程序,而是写程序解决问题

本文介绍了如何利用IntelliJ中的Code/Live Template提高编码速度,通过实例展示了如何使用和自定义template,例如快速生成迭代代码和assertThat断言,强调了模板的便利性和自定义价值。

程序员的工作不是写程序,而是写程序解决问题。 --- 某不知名程序员


我们每天都在写代码,有些代码有结构性的相似,但不是所有的代码都可以被抽成方法。在这种情况下,我们应该考虑使用template的方式加快我们的开发速度。这篇博客会先介绍IntelliJ下已经有的一些code/live template,然后介绍如何自定义template。

1.IntelliJ下已有的template

在java中,我们时常会遇到遍历一个iterable的情况。如下所示:

       for (Integer item : items) {
            //...
        }

你可以选择一个字母,一个字母的敲,但是在IntelliJ下面,你只需要输入iter再按TAB键,就可以自动生成这个代码,和原来的代码比起来,你需要敲键盘的次数少了几倍。


这个时候,红色的框框部分就是当前你的编辑区域,因为我之前有一个items的变量,这里IntelliJ会建议Iterable是items。如果你觉得不对也可以修改,确认后敲Enter。


敲了回车以后,就进入下一个编辑的部分,而不需要你手动的去移动光标。确实很Intelligent啊。

IntelliJ中提供了很多现有的Code/Live Template,你可以在Settings中找到这些已有的template:

比如sout可以输出System.out.println(...), ifn可以输入if (xxx == null) 等等。学习这些template,并且灵活运用,可以缩短你敲键盘的速度。


2.自定义Live Template

IntelliJ提供了很多现成的template。但你也可以根据自己的需要创建新的template。举个例子,我们经常在测试代码中写出如下的代码:

        assertThat(person.getAge(), is(18));

我们会写很多次的assertThat(..., is(...))。每次这样去敲,让我觉得很烦,

我们来看如何在IntelliJ中配置这个模板来简化这个输入。



如上图所示,进入IntelliJ的Settings的Live Template,我们创建一个新的template:ati。

1)缩写名(Abbreviation):ati。ati就是assertThat(..., is(...))的缩写,在以后,你只需要输入ati,就有办法自动变成assertThat(..., is(...));了

2)模板文本(Template text):assertThat($result$, is($expect$))。这里被$括起来的部分就是敲了Enter以后,光标会停留的部分。

3)使用情况(Applicable):statement。这表示你创建一个statement的时候,可以用到这个template。

4)选项(options):Enter。这里我选择的使用Enter出发ati变成完整的assert语句。不过建议使用TAB,这样的话,和IntelliJ自己提供的template保持统一。

这样就配好了template。让我们来试验一下:


第二行就是提示template,这个时候轻盈的按下TAB键,就会看到:


光标就正在等待你输入了。


总结:

写程序不是程序员的目的,解决问题才是程序员的目的,写程序只是解决问题的一种手段而已。当我们采用写程序这种方式解决问题时,我们仍然需要专注于问题本身。

提高我们编码的速度,目的不是自嗨,只是为了减少敲键盘对我们思考问题、解决问题的干扰。

做到心中无码,才更容易专注于解决问题。


<think>嗯,用户要求不使用SpringBoot来设计超市销售系统,这其实是个挺有意思的技术挑战。之前我推荐的是SpringBoot全家桶方案,现在得完全切换到轻量级技术栈。从用户提到的工具来看,核心诉求是:IntelliJIDEA负责Java后端、VSCode处理前端和SQL、数据库直接用SQLQuery操作。用户应该是个熟悉Java生态但想尝试不同技术路线的开发者,可能是在学习轻量级框架或者维护旧系统。技术选型上,后端可以换成SparkJava+JDBI组合,SparkJava做路由比裸Servlet方便太多,JDBI处理数据库映射又比纯JDBC省力。前端继续用Vue.js没问题,但构建工具得从Vite开始配置,这点在VSCode里需要额外指引。特别要注意的是数据库版本控制,SpringBoot里Flyway是自动集成的,现在得手动在IDEA里配置Flyway的独立任务。还有事务管理这个坑,没有SpringTransactional注解后,得用JDBI的@Transaction或自己连接管理。用户可能没意识到的是测试复杂度——没有SpringTest支持下,API测试得用独立HTTP客户端,这点要在协作流程里强调。另外安全认证也得重新设计,考虑用JWT+Filter替代SpringSecurity。最关键的还是工具链协作:IDEA里跑Spark应用时,需要和VSCodeliveserver配合调试。这里可以推荐IDEA的HTTPClient功能,比Postman更贴近开发环境。数据库建模部分其实IDEA比VSCode更强大,ER图生成和逆向工程应该作为重点推荐功能。扩展性方面要提醒用户,未来加消息队列或缓存时需要手动集成,比如在SparkJava里嵌Redis客户端。不过对于超市系统初期,这些应该都不是问题。</think> 好的,我们可以完全不依赖Spring Boot,使用更轻量级的基础技术和您指定的工具来构建超市销售系统。核心思路是:**基于纯Java EE基础、直接JDBC/SQL操作、手动路由映射,并利用IntelliJ IDEA、VS Code和SQL工具进行高效协作**。 以下是详细方案: --- ### 一、技术栈替代方案 | 组件 | 替代 Spring Boot 的技术 | 说明 | | :------------- | :---------------------------------------------- | :------------------------------------------------------------------- | | **后端框架** | 纯 `Servlet` + `JSP` / **SparkJava** 微框架 | Servlet/JSP 是 Java EE 核心;SparkJava 极简路由框架[^4] | | **依赖管理** | Maven / Gradle (直接在 IDEA 中配置) | IDEA 原生支持,管理 jar 包 | | **数据访问** | **原生 JDBC** / **JDBI** (简化 JDBC) | 避免 Spring Data JPA 依赖 | | **数据库** | MySQL (通过 SQLQuery/IDEA DB 工具管理) | 直接使用 SQL 设计与操作 | | **前端** | Vue.js/React + HTML/CSS (VS Code 开发) | 前后端分离,通过 RESTful API 或 JSP 交互 | | **模板引擎** | JSP (内嵌) / **Apache FreeMarker** (独立) | 可选的视图层渲染 | --- ### 二、工具分工与核心实现步骤 #### **1. 数据库设计 (VS Code + SQLQuery 或 IDEA Database Tool)** * **在 VS Code (安装 SQLTools, MySQL 插件) 或 IDEA Database 控制台中设计表:** ```sql -- 产品表 (DDL 在 SQLQuery 中执行) CREATE TABLE product ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, price DECIMAL(10, 2) NOT NULL CHECK (price >= 0), stock INT NOT NULL CHECK (stock >= 0) DEFAULT 0, category VARCHAR(50) ); -- 销售记录表 CREATE TABLE sale_record ( id INT AUTO_INCREMENT PRIMARY KEY, product_id INT NOT NULL, quantity INT NOT NULL CHECK (quantity > 0), sale_time DATETIME DEFAULT CURRENT_TIMESTAMP, cashier_id INT, -- 关联用户表(需创建) FOREIGN KEY (product_id) REFERENCES product(id) ); -- 用户表(收银员) CREATE TABLE user ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, password VARCHAR(100) NOT NULL, -- 存储加盐哈希值 role ENUM('CASHIER', 'MANAGER') NOT NULL ); ``` * **在 IDEA 使用 Database 工具:** * 可视化管理表结构,执行 SQL,生成 ER 图。 * 正向/逆向工程:从 SQL 脚本生成表,或从数据库生成实体类雏形。 * **关键优势**:SQL 编、执行与版本控制一体化,强于 VS Code[^3]。 #### **2. 后端开发 (IntelliJ IDEA - Java 核心)** * **创建 Maven/Gradle 项目 (IDEA 模板)** * 依赖: `javax.servlet-api`, `mysql-connector-java`, `junit` (测试),可选 `jackson-databind` (JSON), `jdbicore`。 * **数据访问层 (使用 JDBI 或纯 JDBC 示例)** ```java // ProductDao.java (使用 JDBI - 简化 JDBC) public class ProductDao { private final Jdbi jdbi; // 初始化传入DataSource public Product getProductById(int id) { return jdbi.withHandle(handle -> handle.createQuery("SELECT * FROM product WHERE id = :id") .bind("id", id) .mapToBean(Product.class) .one() ); } public void updateProductStock(int id, int change) { jdbi.useHandle(handle -> handle.createUpdate("UPDATE product SET stock = stock + :change WHERE id = :id") .bind("change", change) .bind("id", id) .execute() ); } } ``` ```java // SaleService.java (核心业务逻辑 - 使用DAO) public class SaleService { private ProductDao productDao; public void recordSale(int productId, int quantity) throws InsufficientStockException { Product product = productDao.getProductById(productId); if (product.getStock() < quantity) { throw new InsufficientStockException("库存不足"); } productDao.updateProductStock(productId, -quantity); // 插入sale_record表逻辑(SaleRecordDao实现) } } ``` * **Web层 (SparkJava 替代 Spring MVC)** ```java // MainApp.java (SparkJava 入口) import static spark.Spark.*; public class MainApp { public static void main(String[] args) { port(8080); // 设置端口 // 初始化DataSource和DAO... // 创建销售记录 API post("/api/sales", (req, res) -> { SaleRequest saleReq = new Gson().fromJson(req.body(), SaleRequest.class); try { saleService.recordSale(saleReq.getProductId(), saleReq.getQuantity()); res.status(201); // Created return "Sale recorded"; } catch (InsufficientStockException e) { res.status(400); // Bad Request return e.getMessage(); } }); // 获取产品列表 API (GET /api/products) } } ``` #### **3. 前端开发 (Visual Studio Code)** * **创建 Vue.js/React 项目 (使用 Vite CLI)** ```bash npm create vite@latest supermarket-frontend -- --template vue # 或 react cd supermarket-frontend npm install ``` * **调用后端 API (使用 axios/fetch)** ```javascript // SaleComponent.vue (Vue3 示例) const recordSale = async () => { try { const response = await axios.post('http://localhost:8080/api/sales', { productId: selectedProductId.value, quantity: saleQuantity.value }); if (response.status === 201) { alert('销售成功!'); // 刷新列表或状态... } } catch (error) { alert(`错误: ${error.response.data}`); } }; ``` * **VS Code 插件推荐:** * **Volar (Vue) / ES7+ React Snippets (React)** * **ESLint**:代码规范检查 * **Live Server**:HTML 页面实时预览 * **REST Client**:测试后端 API (`*.http` 文件) #### **4. 配置与部署 (IDEA & Shell)** * **Web Server:** * 使用 **嵌入式 Jetty** 或 **Tomcat Maven Plugin** (配置在 `pom.xml` 中) ```xml <plugin> <!-- Tomcat Maven Plugin 配置 --> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8080</port> <path>/</path> </configuration> </plugin> ``` 运行:`mvn tomcat7:run` (在 IDEA Terminal 中) * **数据库连接配置:** * 在代码中手动创建 `DataSource` (如使用 `HikariCP`) 或通过 `ServletContext` 参数读取属性文件。 --- ### 三、高效协作与优化技巧 1. **API 调试**: * **VS Code**: 使用 `REST Client` 插件编 `.http` 文件测试接口[^1] ```http POST http://localhost:8080/api/sales Content-Type: application/json {"productId": 101, "quantity": 2} ``` * **IDEA**: 内置 **HTTP Client** (类似功能) 2. **数据库变更管理**: * **IDEA Database Tool** 记录执行的 SQL,结合 Flyway/Liquibase(独立库,非 Spring Boot 嵌入)进行版本控制[^3]。 3. **热部署**: * **IDEA**: 使用 **JRebel** 插件实现 Java 代码热更新(商业版)。 * **VS Code**: Vue/React 本身具备热模块替换 (HMR)。 4. **安全**: * **身份认证**:在 `Servlet Filter` 或 `SparkJava Before Filter` 中实现 JWT 验证。 * **授权**:在业务代码或 Filter 中检查角色 (`user.role`)。 5. **性能**: * **连接池**:配置 **HikariCP** DataSource。 * **SQL 优化**:使用 `EXPLAIN` 分析慢查询(在 SQLQuery 或 IDEA DB Console 中)[^1]。 * **缓存**:在 Service 层引入手动缓存机制(如 `Caffeine`)。 --- ### 四、工作流图示 ```mermaid graph TD A[VS Code 前端开发] -->|调用 API| B[IDEA: SparkJava/Jetty API] B --> C[IDEA: Service/业务逻辑] C --> D[IDEA: DAO/JDBC操作] D --> E[(IDEA/SQLQuery: MySQL DB)] F[SQLQuery/IDEA DB Tool] -->|执行 DDL/DML| E F --> G[数据库变更脚本] G -.-> H[Flyway 版本控制] ``` --- ### 五、核心优势 * **极简可控**:技术栈轻量,消除 Spring Boot 魔法,依赖清晰。 * **深度掌控**:程序员直接面对底层API(Servlet/JDBC),理解更透彻。 * **灵活自由**:可按需选择组件库,没有框架强约束。 * **资源占用低**:更小的内存占用,更适合资源有限或简单系统。 **总结**:通过核心Java Web技术(Servlet/JSP)、微框架(SparkJava)、原生JDBC结合现代前端(Vue/React),搭配IDEA、VS Code和SQL工具的强大功能,完全可以高效地构建和维护一个不依赖Spring Boot的超市销售系统。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值