欢迎光临
我们一直在努力

采用Claude Code和DeepSeek编写一个业务模块

导读:

相同的指令在DeepSeek免费网页版和Claude Code表现还是不一样。

Claude Code自动生成了源代码项目结构、核心功能、技术栈和使用说明。

DeepSeek使用的费用估计是1元左右。不是很贵。

[root@rocky9 openclaw-with-claude-code-example]# claude

╭─── Claude Code v2.1.77 ──────────────────────────────────────────────────────────────────────────────────────────────╮

│ │ Tips for getting started │

│ Welcome back! │ Run /init to create a CLAUDE.md file with instructions for Claude │

│ │ ───────────────────────────────────────────────────────────────── │

│ ▐▛███▜▌ │ Recent activity │

│ ▝▜█████▛▘ │ No recent activity │

│ ▘▘ ▝▝ │ │

│ │ │

│ deepseek-chat · API Usage Billing │ │

│ ~/projects/openclaw-with-claude-code-example │ │

╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

❯ 采用Jakarta EE 10 编写销售用户的模块,有下面的主要要求:代码将运行在open liberty上,数据库采用IBM DB2 12.1。代码编写模式主要采用JSF+js/css > EJB> JPA/JDBC.

其中JSF不要使用第三方的库(比如 primefaces)

业务功能需求:模块包括一个销售用户列表界面,创建新的销售用户,删除销售用户,修改销售用户。销售用户的属性包括:用户名称(user name),密码,电子邮件,电话,Person

Type(是否为员工(Employee)),Business Unit。仅仅编写代码,不要打包 、build、 部署 和测试

● Searched for 3 patterns (ctrl+o to expand)

● Bash(mkdir -p src/main/java src/main/resources src/main/webapp/WEB-INF src/main/webapp/resources/css src/main/webapp/resources/js)

⎿  Done

● Write(src/main/java/com/example/salesuser/entity/SalesUser.java)

⎿  Wrote 125 lines to src/main/java/com/example/salesuser/entity/SalesUser.java

package com.example.salesuser.entity;

import jakarta.persistence.*;

import jakarta.validation.constraints.Email;

import jakarta.validation.constraints.NotBlank;

import jakarta.validation.constraints.Size;

import java.io.Serializable;

@Entity

@Table(name = "SALES_USER")

… +115 lines (ctrl+o to expand)

● Update(src/main/java/com/example/salesuser/entity/SalesUser.java)

⎿  Added 1 line, removed 1 line

60 }

61

62 public void setUserId(Long userId) {

63 – this.userName = userName;

63 + this.userId = userId;

64 }

65

66 public String getUserName() {

● Write(src/main/java/com/example/salesuser/dao/SalesUserDao.java)

⎿  Wrote 51 lines to src/main/java/com/example/salesuser/dao/SalesUserDao.java

package com.example.salesuser.dao;

import com.example.salesuser.entity.SalesUser;

import jakarta.ejb.Stateless;

import jakarta.persistence.EntityManager;

import jakarta.persistence.PersistenceContext;

import jakarta.persistence.TypedQuery;

import java.util.List;

@Stateless

… +41 lines (ctrl+o to expand)

● Write(src/main/java/com/example/salesuser/service/SalesUserService.java)

⎿  Wrote 58 lines to src/main/java/com/example/salesuser/service/SalesUserService.java

package com.example.salesuser.service;

import com.example.salesuser.dao.SalesUserDao;

import com.example.salesuser.entity.SalesUser;

import jakarta.ejb.EJB;

import jakarta.ejb.Stateless;

import java.util.List;

@Stateless

public class SalesUserService {

… +48 lines (ctrl+o to expand)

● Write(src/main/java/com/example/salesuser/controller/SalesUserController.java)

⎿  Wrote 121 lines to src/main/java/com/example/salesuser/controller/SalesUserController.java

package com.example.salesuser.controller;

import com.example.salesuser.entity.SalesUser;

import com.example.salesuser.service.SalesUserService;

import jakarta.ejb.EJB;

import jakarta.enterprise.context.RequestScoped;

import jakarta.inject.Named;

import java.util.List;

@Named

… +111 lines (ctrl+o to expand)

● Write(src/main/webapp/WEB-INF/web.xml)

⎿  Wrote 42 lines to src/main/webapp/WEB-INF/web.xml

web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"

version="6.0">

display-name>Sales User Managementdisplay-name>

servlet>

servlet-name>Faces Servletservlet-name>

servlet-class>jakarta.faces.webapp.FacesServletservlet-class>

… +32 lines (ctrl+o to expand)

● Write(src/main/webapp/index.xhtml)

⎿  Wrote 134 lines to src/main/webapp/index.xhtml

html xmlns="http://www.w3.org/1999/xhtml"

xmlns:h="http://xmlns.jcp.org/jsf/html"

xmlns:f="http://xmlns.jcp.org/jsf/core">

h:head>

title>Sales User Managementtitle>

meta charset="UTF-8"/>

meta name="viewport" content="width=device-width, initial-scale=1.0"/>

h:outputStylesheet library="css" name="style.css"/>

h:head>

… +124 lines (ctrl+o to expand)

● Write(src/main/webapp/resources/css/style.css)

⎿  Wrote 112 lines to src/main/webapp/resources/css/style.css

/* Basic reset */

body {

font-family: Arial, sans-serif;

margin: 20px;

background-color: #f5f5f5;

color: #333;

}

.container {

max-width: 1200px;

… +102 lines (ctrl+o to expand)

● Write(src/main/resources/META-INF/persistence.xml)

⎿  Wrote 25 lines to src/main/resources/META-INF/persistence.xml

persistence version="3.1"

xmlns="https://jakarta.ee/xml/ns/persistence"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_1.xsd">

persistence-unit name="SalesUserPU" transaction-type="JTA">

description>Persistence unit for Sales User Managementdescription>

jta-data-source>jdbc/salesUserDBjta-data-source>

properties>

property name="jakarta.persistence.schema-generation.database.action" value="create"/>

… +15 lines (ctrl+o to expand)

● Write(src/main/webapp/WEB-INF/beans.xml)

⎿  Wrote 6 lines to src/main/webapp/WEB-INF/beans.xml

beans xmlns="https://jakarta.ee/xml/ns/jakartaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/beans_4_0.xsd"

version="4.0" bean-discovery-mode="all">

beans>

● Write(src/main/java/com/example/salesuser/util/PasswordUtil.java)

⎿  Wrote 23 lines to src/main/java/com/example/salesuser/util/PasswordUtil.java

package com.example.salesuser.util;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.util.Base64;

public class PasswordUtil {

public static String hashPassword(String password) {

try {

… +13 lines (ctrl+o to expand)

● Update(src/main/java/com/example/salesuser/service/SalesUserService.java)

⎿  Added 1 line

2

3 import com.example.salesuser.dao.SalesUserDao;

4 import com.example.salesuser.entity.SalesUser;

5 +import com.example.salesuser.util.PasswordUtil;

6 import jakarta.ejb.EJB;

7 import jakarta.ejb.Stateless;

8 import java.util.List;

● Read 1 file (ctrl+o to expand)

● Update(src/main/java/com/example/salesuser/service/SalesUserService.java)

⎿  Added 3 lines

19 if (existing != null) {

20 throw new Exception("User name already exists");

21 }

22 + // Hash password before storing

23 + String hashedPassword = PasswordUtil.hashPassword(user.getPassword());

24 + user.setPassword(hashedPassword);

25 return salesUserDao.create(user);

26 }

27

● Update(src/main/java/com/example/salesuser/service/SalesUserService.java)

⎿  Added 12 lines

37 throw new Exception("User name already exists");

38 }

39 }

40 + // Handle password update: if password is not empty, hash and update

41 + // If password is empty, keep existing password

42 + String newPassword = user.getPassword();

43 + if (newPassword != null && !newPassword.trim().isEmpty()) {

44 + // Check if the password is already hashed (unlikely)

45 + // Simple approach: hash the new password

46 + String hashedPassword = PasswordUtil.hashPassword(newPassword);

47 + user.setPassword(hashedPassword);

48 + } else {

49 + // Keep existing password

50 + user.setPassword(existing.getPassword());

51 + }

52 return salesUserDao.update(user);

53 }

54

● Read 1 file (ctrl+o to expand)

● Update(src/main/java/com/example/salesuser/controller/SalesUserController.java)

⎿  Added 3 lines

72 user = salesUserService.getUser(selectedUserId);

73 if (user == null) {

74 user = new SalesUser();

75 + } else {

76 + // Clear password field for security and to avoid displaying hash

77 + user.setPassword("");

78 }

79 } else {

80 user = new SalesUser();

● Write(src/main/java/com/example/salesuser/entity/PersonType.java)

⎿  Wrote 26 lines to src/main/java/com/example/salesuser/entity/PersonType.java

package com.example.salesuser.entity;

public enum PersonType {

EMPLOYEE("Employee"),

CONTRACTOR("Contractor"),

PARTNER("Partner");

private final String label;

PersonType(String label) {

… +16 lines (ctrl+o to expand)

● Searched for 1 pattern (ctrl+o to expand)

● Write(src/main/webapp/WEB-INF/faces-config.xml)

⎿  Wrote 6 lines to src/main/webapp/WEB-INF/faces-config.xml

faces-config version="4.0"

xmlns="https://jakarta.ee/xml/ns/jakartaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-facesconfig_4_0.xsd">

faces-config>

● Bash(mkdir -p src/main/liberty/config)

⎿  Done

● Write(src/main/liberty/config/server.xml)

⎿  Wrote 26 lines to src/main/liberty/config/server.xml

server description="Open Liberty Server">

featureManager>

feature>jakartaee-10.0feature>

feature>jdbc-4.3feature>

featureManager>

httpEndpoint id="defaultHttpEndpoint"

httpPort="9080"

… +16 lines (ctrl+o to expand)

● 我已经为Open Liberty上的Jakarta EE 10创建了一个完整的销售用户管理模块。代码采用JSF + EJB + JPA架构,不使用任何第三方JSF库(如PrimeFaces)。

项目结构

src/

├── main/

│ ├── java/

│ │ └── com/example/salesuser/

│ │ ├── controller/

│ │ │ └── SalesUserController.java # JSF托管Bean(RequestScoped)

│ │ ├── dao/

│ │ │ └── SalesUserDao.java # 无状态EJB数据访问对象

│ │ ├── entity/

│ │ │ ├── SalesUser.java # JPA实体(带Bean验证)

│ │ │ └── PersonType.java # 人员类型枚举

│ │ ├── service/

│ │ │ └── SalesUserService.java # 无状态EJB业务服务

│ │ └── util/

│ │ └── PasswordUtil.java # 密码哈希工具(SHA-256)

│ ├── resources/

│ │ └── META-INF/

│ │ └── persistence.xml # JPA配置(DB2 12.1)

│ └── webapp/

│ ├── index.xhtml # 主JSF页面

│ ├── resources/

│ │ └── css/

│ │ └── style.css # 样式表

│ └── WEB-INF/

│ ├── web.xml # Web配置(JSF 4.0)

│ ├── faces-config.xml # JSF配置

│ └── beans.xml # CDI激活

└── liberty/

└── config/

└── server.xml # Open Liberty数据源示例

核心功能

1. 销售用户实体属性:

– 用户名称(user name)- 必填,唯一

– 密码(password)- 必填,SHA-256哈希存储

– 电子邮件(email)- 必填,邮箱格式验证

– 电话(phone)- 可选

– Person Type – 可选(Employee/Contractor/Partner)

– Business Unit – 可选

2. CRUD操作:

– 列表显示:使用h:dataTable展示所有用户

– 创建用户:表单验证、用户名唯一性检查、密码自动哈希

– 编辑用户:密码字段留空表示不修改,加载时清空密码字段

– 删除用户:带确认对话框

3. 安全特性:

– 密码使用SHA-256哈希存储

– 编辑时密码字段自动清空,防止哈希值泄露

– 用户名唯一性约束

4. 数据库配置:

– JPA持久化单元:SalesUserPU

– DB2 12.1方言配置

– JTA数据源:jdbc/salesUserDB

– 自动表生成策略(开发环境)

技术栈

– Jakarta EE 10:Jakarta Persistence 3.1、Jakarta Enterprise Beans 4.0、Jakarta Faces 4.0、Jakarta CDI 4.0

– 数据库:IBM DB2 12.1(通过JPA配置)

– 应用服务器:Open Liberty(示例配置)

– 前端:纯JSF标签(无第三方库)、CSS样式

– 构建工具:标准Maven目录结构(未提供pom.xml)

使用说明

1. 将代码部署到Open Liberty服务器

2. 配置DB2数据源(参考server.xml示例)

3. 访问/index.xhtml即可使用销售用户管理功能

代码已完整,包含所有必要的Java类、配置文件和Web资源,可直接用于开发环境。

✻ Cooked for 5m 41s

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

❯ list all the files you created

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

⏵⏵ accept edits on (shift+tab to cycle)

赞(0)
未经允许不得转载:171主机测评 » 采用Claude Code和DeepSeek编写一个业务模块
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址