You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从SQL数据库获取姓氏(nom)与名字(prenom)到前端(Java后端)

实现方案:从Java后端获取用户姓名并展示到前端

一、Java后端实现(以Spring Boot为例,可适配其他Java Web框架)

1. 实体类映射数据库表

确保实体类与用户表字段对应,包含nom(姓氏)和prenom(名字):

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;

@Entity
@Table(name = "users") // 替换为你的数据库表名
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nom;
    private String prenom;
    // 其他登录相关字段(如username、password)
    // 对应getter/setter
    public String getNom() { return nom; }
    public void setNom(String nom) { this.nom = nom; }
    public String getPrenom() { return prenom; }
    public void setPrenom(String prenom) { this.prenom = prenom; }
}

2. 数据访问层(Repository/DAO)

定义查询方法,按需获取用户数据:

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
    // 根据登录用户名查询用户(适配你的登录校验逻辑)
    User findByUsername(String username);
}

3. 接口控制器(Controller)

编写REST接口,返回封装后的姓名数据:

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;

import java.util.List;
import java.util.stream.Collectors;

@RestController
@RequestMapping("/api/users")
public class UserController {
    private final UserRepository userRepository;

    public UserController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // 获取当前登录用户的姓名
    @GetMapping("/current/name")
    public ResponseEntity<UserNameVO> getCurrentUserName() {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        String loginUsername = auth.getName(); // 从登录上下文获取当前用户标识
        User user = userRepository.findByUsername(loginUsername);
        UserNameVO vo = new UserNameVO(user.getPrenom(), user.getNom());
        return ResponseEntity.ok(vo);
    }

    // 获取所有用户姓名(按需使用)
    @GetMapping("/all/names")
    public ResponseEntity<List<UserNameVO>> getAllUserNames() {
        List<User> users = userRepository.findAll();
        List<UserNameVO> voList = users.stream()
                .map(user -> new UserNameVO(user.getPrenom(), user.getNom()))
                .collect(Collectors.toList());
        return ResponseEntity.ok(voList);
    }

    // 封装返回数据的VO类,避免暴露实体全部字段
    static class UserNameVO {
        private String prenom;
        private String nom;

        public UserNameVO(String prenom, String nom) {
            this.prenom = prenom;
            this.nom = nom;
        }

        public String getPrenom() { return prenom; }
        public String getNom() { return nom; }
    }
}

二、前端实现(基于原生JavaScript)

1. 添加HTML展示区域

在现有页面中插入姓名展示容器:

<!-- 展示当前登录用户姓名 -->
<div id="currentUserInfo"></div>

<!-- 展示所有用户姓名列表(按需添加) -->
<ul id="userNameList"></ul>

2. 发起请求并渲染数据

复用现有JS请求逻辑,调用后端接口并渲染:

// 获取当前登录用户姓名并渲染
async function loadCurrentUserName() {
    try {
        const response = await fetch('/api/users/current/name', {
            method: 'GET',
            credentials: 'include' // 携带登录会话,确保后端识别当前用户
        });
        if (!response.ok) throw new Error('请求失败');
        const data = await response.json();
        document.getElementById('currentUserInfo').textContent = `当前用户:${data.prenom} ${data.nom}`;
    } catch (err) {
        console.error('加载姓名失败:', err);
    }
}

// 获取所有用户姓名并渲染列表(按需调用)
async function loadAllUserNames() {
    try {
        const response = await fetch('/api/users/all/names');
        if (!response.ok) throw new Error('请求失败');
        const dataList = await response.json();
        const listEl = document.getElementById('userNameList');
        dataList.forEach(item => {
            const li = document.createElement('li');
            li.textContent = `${item.prenom} ${item.nom}`;
            listEl.appendChild(li);
        });
    } catch (err) {
        console.error('加载用户列表失败:', err);
    }
}

// 页面加载时执行(按需选择调用方法)
window.addEventListener('load', () => {
    loadCurrentUserName();
    // loadAllUserNames(); // 需要展示所有用户时取消注释
});

关键注意事项

  • 跨域处理:若前后端分离部署,后端需配置CORS(如Spring Boot添加@CrossOrigin注解)
  • 会话校验:确保接口能通过登录上下文正确识别当前用户,避免数据泄露
  • 异常兼容:前后端都要添加异常捕获逻辑,提升页面容错性

内容的提问来源于stack exchange,提问作者soso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 12:32:41