Skip to content

Web 应用示例

使用 LCGYL Framework 构建一个完整的 Web 应用。

项目结构

web-app/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/example/
│   │   │       ├── Application.java
│   │   │       ├── controller/
│   │   │       ├── service/
│   │   │       ├── repository/
│   │   │       └── model/
│   │   └── resources/
│   │       ├── application.properties
│   │       └── static/
│   └── test/
└── build.gradle

主应用类

java
import com.lcgyl.core.Application;
import com.lcgyl.core.annotation.ComponentScan;

@ComponentScan("com.example")
public class WebApplication {
    
    public static void main(String[] args) {
        Application app = Application.run(WebApplication.class, args);
        
        // 启动 Web 服务器
        app.startWebServer(8080);
    }
}

Controller 层

java
import com.lcgyl.web.annotation.RestController;
import com.lcgyl.web.annotation.GetMapping;
import com.lcgyl.web.annotation.PostMapping;

@RestController("/api/users")
public class UserController {
    
    private final UserService userService;
    
    @Inject
    public UserController(UserService userService) {
        this.userService = userService;
    }
    
    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.findById(id);
    }
    
    @GetMapping
    public List<User> listUsers() {
        return userService.findAll();
    }
    
    @PostMapping
    public User createUser(@RequestBody User user) {
        return userService.save(user);
    }
}

Service 层

java
import com.lcgyl.core.annotation.Component;
import com.lcgyl.data.annotation.Transactional;

@Component
public class UserService {
    
    private final UserRepository userRepository;
    
    @Inject
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    
    public User findById(Long id) {
        return userRepository.findById(id)
            .orElseThrow(() -> new NotFoundException("用户不存在"));
    }
    
    public List<User> findAll() {
        return userRepository.findAll();
    }
    
    @Transactional
    public User save(User user) {
        return userRepository.save(user);
    }
}

Repository 层

java
import com.lcgyl.data.JdbcTemplate;

@Component
public class UserRepository {
    
    private final JdbcTemplate jdbcTemplate;
    
    @Inject
    public UserRepository(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }
    
    public Optional<User> findById(Long id) {
        String sql = "SELECT * FROM users WHERE id = ?";
        return jdbcTemplate.queryForOptional(sql, User.class, id);
    }
    
    public List<User> findAll() {
        String sql = "SELECT * FROM users";
        return jdbcTemplate.queryForList(sql, User.class);
    }
    
    public User save(User user) {
        if (user.getId() == null) {
            String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
            Long id = jdbcTemplate.insert(sql, user.getName(), user.getEmail());
            user.setId(id);
        } else {
            String sql = "UPDATE users SET name = ?, email = ? WHERE id = ?";
            jdbcTemplate.update(sql, user.getName(), user.getEmail(), user.getId());
        }
        return user;
    }
}

配置文件

properties
# application.properties

# 服务器配置
server.port=8080
server.contextPath=/api

# 数据源配置
datasource.url=jdbc:mysql://localhost:3306/web_app
datasource.username=root
datasource.password=123456

# 日志配置
logging.level=INFO

运行应用

bash
# 编译
./gradlew build

# 运行
java -jar build/libs/web-app.jar

# 访问
curl http://localhost:8080/api/users

下一步

Released under the Apache License 2.0