ActFramework 轻量级java web框架 (2、项目实战)

写在前面

先按照 第一章 中的 “1、快速开始一个act项目” 创建act项目。

1、搭建项目基础组成

首先我们建几个包: controller、dao、entity、service、service.impl。

下面是接下来我们要编辑、新建的内容
在这里插入图片描述

接下来我们要做一个简单的登录、注册功能。

添加pom依赖:

<!-- ActFramework Hibernate插件,必加 -->
<dependency>
    <groupId>org.actframework</groupId>
    <artifactId>act-hibernate</artifactId>
</dependency>
<!-- 数据库连接池,HikariCP,Druid选加其一 -->
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
</dependency>
<!-- MySql 数据库驱动包 根据你所使用的的数据库选加 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

在mysql里面新建库test、新建表user

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `password` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
  `email` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
  `phone` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 ;

1.1、新建实体类User.java

import act.Act;
import act.util.SimpleBean;

import javax.persistence.*;

@Entity
@Table(name = "user")
public class User implements SimpleBean {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Integer id;
    @Column
    public String password;
    @Column
    public String email;
    @Column
    public String phone;

    public static String getPasswordHash(String password) {
        return Act.crypto().passwordHash(password);
    }
}
1.1.1、SimpleBean接口

实现SimpleBean接口, Act会自动生成Getter/Setter方法,但权限一定要是public

这里的get、set方法使用和Lombok的有点不一样,如下:

// get
xxx = user.name;
// set
user.name = xxx;
1.1.2、passwordHash()方法

Act.crypto().passwordHash(password);加密密码

1.2、UserDao.java

import act.db.jpa.JPADao;
import com.demo.entity.User;

public class UserDao extends JPADao<Integer, User> {
}
1.2.1、JPADao类

JPADao 里面封装了基础的 增删改查。 具体更复杂的,我们就需要用到 EntityManager 。

1.3、UserService.java

import act.inject.AutoBind;
import com.demo.entity.User;

@AutoBind
public interface UserService {

    int register(User user);

    User login(Integer id,String password);

}
1.3.1、@AutoBind 注解

@AutoBind 注解用于依赖注入。它扫描service的实现类,进行自动关联。

1.4、UserServiceImpl.java

import act.Act;
import act.db.sql.tx.Transactional;
import com.demo.dao.UserDao;
import com.demo.entity.User;
import com.demo.service.UserService;

import javax.inject.Inject;

public class UserServiceImpl implements UserService {

    @Inject
    private UserDao dao;

    @Override
    @Transactional
    public int register(User user) {
        dao.save(user);
        return 0;
    }

    @Override
    @Transactional
    public User login(Integer id, String password) {
        User user=dao.findById(id);
        if (Act.crypto().verifyPassword(password, user.password)) return user;
        else return null;
    }
}
1.4.1、@Inject注解

@Inject 为依赖注入注解。注入dao、service接口都用它。

类似spring里面的@Autowire

1.5、UserController.java

import act.controller.Controller;
import com.demo.entity.User;
import com.demo.service.UserService;

import org.osgl.mvc.annotation.GetAction;
import org.osgl.mvc.annotation.PostAction;
import org.osgl.mvc.result.Result;

import javax.inject.Inject;

public class UserController extends Controller.Util {

    @Inject
    private UserService service;

    @GetAction("register")
    public void register() {

    }

    @GetAction("login")
    public void login() {

    }

    @PostAction("doRegister")
    public Result doRegister(User user) {
        try{
            user.password=User.getPasswordHash(user.password);
            service.register(user);
        }catch (Exception e){
            e.printStackTrace();
            return renderHtml("<script>alert('\\u6CE8\\u518C\\u5931\\u8D25\\uFF01');window.history.back();</script>");
        }
        return renderHtml("<script>alert('\\u6CE8\\u518C\\u6210\\u529F\\uFF01uid:"+user.id+"');location.href='login';</script>");
    }

    @PostAction("doLogin")
    public Result doLogin(Integer uid,String pwd) {
        try{
            User user=service.login(uid,pwd);
            if (user!=null)return renderHtml("<script>alert('\\u767B\\u5F55\\u6210\\u529F\\uFF01');location.href='register';</script>");
            return renderHtml("<script>alert('\\u767B\\u5F55\\u5931\\u8D25\\uFF01');window.history.back();</script>");
        }catch (Exception e){
            e.printStackTrace();
            return renderHtml("<script>alert('\\u767B\\u5F55\\u5931\\u8D25\\uFF01');window.history.back();</script>");
        }
    }
}

1.5.1、Controller.Util类

Controller.Util类可以非常简单的写出提示信息。

1.6、register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
<form action="doRegister" method="post">
    密码:<input name="password" type="password"/><br />
    电话:<input name="phone" /><br />
    邮箱:<input name="email" /><br />
    <button>注册</button>
</form>
</body>
</html>

1.7、login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
<form action="doLogin" method="post">
    用户ID:<input name="uid" /><br />
    密码:<input name="pwd" type="password"/><br />
    <button>登录</button>
</form>
</body>
</html>

1.8、配置文件

/resource/conf/db.properties

db.impl = act.db.hibernate.HibernatePlugin
db.driver = com.mysql.jdbc.Driver
db.url = jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
db.username = root
db.password = root

/resource/hibernate.properties

hibernate.show_sql = true

2、运行

重启项目(添加依赖后需要重启),测试:
http://127.0.0.1:5460/register
在这里插入图片描述

如果项目报这个错误:InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMIT
请在mysql里先执行下面三条语句,然后重启项目:

SET GLOBAL binlog_format = 'STATEMENT';
SET GLOBAL binlog_format = 'ROW';
SET GLOBAL binlog_format = 'MIXED';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值