Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

这是来自《构架探险》作者黄勇老师写的仿照Spring写的Web框架,我正在看他的这本书进行学习,并在这里记下学习笔记

License

Notifications You must be signed in to change notification settings

Messaging24/smart-framework-learning

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

327 Commits

Repository files navigation

Smart Framework

简介

1. 它是一款轻量级 Java Web 框架

  • 内置 IOC、AOP、ORM、DAO、MVC 等特性
  • 基于 Servlet 3.0 规范
  • 使用 Java 注解取代 XML 配置

2. 它使应用充分做到"前后端分离"

  • 客户端可使用 HTML 或 JSP 作为视图模板
  • 服务端可发布 REST 服务(使用 REST 插件)
  • 客户端通过 AJAX 获取服务端数据并进行界面渲染

3. 它可提高应用程序的开发效率

  • 面向基于 Web 的中小规模的应用程序
  • 新手能在较短时间内入门
  • 核心具有良好的定制性且插件易于扩展

架构

入门

1. 创建一个 Maven Web 工程

整个工程的目录结构如下:

smart-sample/
 ┗ src/
  ┗ main/
   ┗ java/
   ┗ resources/
   ┗ webapp/
 ┗ pom.xml

java 目录下,创建以下包名目录结构:

org/
 ┗ smart4j/
  ┗ sample/
   ┗ action/
   ┗ entity/
   ┗ service/

可见,基础包名为:org.smart4j.sample,下面的配置中会用到它。

2. 配置 Maven 依赖

编辑 pom.xml 文件,添加 smart-framework 依赖:

<dependency>
 <groupId>org.smart4j</groupId>
 <artifactId>smart-framework</artifactId>
 <version>[版本号]</version>
</dependency>

提示:需要指定具体的版本号。若使用相关 Smart 插件,则需分别配置。

3. 编写 Smart 配置

resources 目录下,创建一个名为 smart.properties 的文件,内容如下:

smart.framework.app.base_package=org.smart4j.sample
smart.framework.app.home_page=/users
smart.framework.jdbc.driver=com.mysql.jdbc.Driver
smart.framework.jdbc.url=jdbc:mysql://localhost:3306/smart-sample
smart.framework.jdbc.username=root
smart.framework.jdbc.password=root

提示:需根据实际情况修改以上配置。

4. 编写 Entity 类

package org.smart4j.sample.entity;
import org.smart4j.framework.orm.annotation.Entity;
@Entity
public class User {
 private long id;
 private String username;
 private String password;
 // getter/setter
}

5. 编写 Service 接口及其实现

Service 接口

package org.smart4j.sample.service;
import java.util.List;
import java.util.Map;
import org.smart4j.sample.entity.User;
public interface UserService {
 List<User> findUserList();
 User findUser(long id);
 boolean saveUser(Map<String, Object> fieldMap);
 boolean updateUser(long id, Map<String, Object> fieldMap);
 boolean deleteUser(long id);
}

Service 实现

package org.smart4j.sample.service.impl;
import java.util.List;
import java.util.Map;
import org.smart4j.framework.orm.DataSet;
import org.smart4j.framework.tx.annotation.Service;
import org.smart4j.framework.tx.annotation.Transaction;
import org.smart4j.sample.entity.User;
import org.smart4j.sample.service.UserService;
@Service
public class UserServiceImpl implements UserService {
 @Override
 public List<User> findUserList() {
 return DataSet.selectList(User.class);
 }
 @Override
 public User findUser(long id) {
 return DataSet.select(User.class, "id = ?", id);
 }
 @Override
 @Transaction
 public boolean saveUser(Map<String, Object> fieldMap) {
 return DataSet.insert(User.class, fieldMap);
 }
 @Override
 @Transaction
 public boolean updateUser(long id, Map<String, Object> fieldMap) {
 return DataSet.update(User.class, fieldMap, "id = ?", id);
 }
 @Override
 @Transaction
 public boolean deleteUser(long id) {
 return DataSet.delete(User.class, "id = ?", id);
 }
}

5. 编写 Action 类

package org.smart4j.sample.action;
import java.util.List;
import java.util.Map;
import org.smart4j.framework.ioc.annotation.Inject;
import org.smart4j.framework.mvc.DataContext;
import org.smart4j.framework.mvc.annotation.Action;
import org.smart4j.framework.mvc.annotation.Request;
import org.smart4j.framework.mvc.bean.Params;
import org.smart4j.framework.mvc.bean.Result;
import org.smart4j.framework.mvc.bean.View;
import org.smart4j.sample.entity.User;
import org.smart4j.sample.service.UserService;
@Action
public class UserAction {
 @Inject
 private UserService userService;
 @Request.Get("/users")
 public View index() {
 List<User> userList = userService.findUserList();
 DataContext.Request.put("userList", userList);
 return new View("user.jsp");
 }
 @Request.Get("/user")
 public View create() {
 return new View("user_create.jsp");
 }
 @Request.Post("/user")
 public Result save(Params params) {
 Map<String, Object> fieldMap = params.getFieldMap();
 boolean result = userService.saveUser(fieldMap);
 return new Result(result);
 }
 @Request.Get("/user/{id}")
 public View edit(long id) {
 User user = userService.findUser(id);
 DataContext.Request.put("user", user);
 return new View("user_edit.jsp");
 }
 @Request.Put("/user/{id}")
 public Result update(long id, Params params) {
 Map<String, Object> fieldMap = params.getFieldMap();
 boolean result = userService.updateUser(id, fieldMap);
 return new Result(result);
 }
 @Request.Delete("/user/{id}")
 public Result delete(long id) {
 boolean result = userService.deleteUser(id);
 return new Result(result);
 }
}

6. 编写视图

在 Action 中使用了 JSP 作为视图展现技术,需要编写以下 JSP 文件:

  • user.jsp
  • user_list.jsp
  • user_create.jsp
  • user_edit.jsp

提示:更多相关细节,请参考 Smart Sample 示例。

提高

TODO

示例

附录

相关插件

注意:插件依赖于框架,不能独立使用。

相关模块

注意:模块不依赖于框架,可以独立使用。

参考资料

About

这是来自《构架探险》作者黄勇老师写的仿照Spring写的Web框架,我正在看他的这本书进行学习,并在这里记下学习笔记

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%

AltStyle によって変換されたページ (->オリジナル) /