帮我用springboot生成学生宿舍管理系统老师,舍管,管理员三个角色登录的业务逻辑代码
时间: 2023-09-19 15:13:26 浏览: 35
好的,首先我们需要定义这三个角色的实体类,可以在项目中创建一个名为entity的包,并在其中创建Teacher、DormitoryManager和Admin三个类。
Teacher类:
```java
@Entity
@Table(name = "teacher")
public class Teacher implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true)
private String username;
@Column(nullable = false)
private String password;
@Column(nullable = false)
private String name;
// 省略 getter 和 setter 方法
}
```
DormitoryManager类:
```java
@Entity
@Table(name = "dormitory_manager")
public class DormitoryManager implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true)
private String username;
@Column(nullable = false)
private String password;
@Column(nullable = false)
private String name;
// 省略 getter 和 setter 方法
}
```
Admin类:
```java
@Entity
@Table(name = "admin")
public class Admin implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true)
private String username;
@Column(nullable = false)
private String password;
@Column(nullable = false)
private String name;
// 省略 getter 和 setter 方法
}
```
接下来,我们需要为每个角色创建对应的Repository,可以在项目中创建一个名为repository的包,并在其中创建TeacherRepository、DormitoryManagerRepository和AdminRepository三个接口。
TeacherRepository接口:
```java
@Repository
public interface TeacherRepository extends JpaRepository<Teacher, Long> {
Teacher findByUsername(String username);
}
```
DormitoryManagerRepository接口:
```java
@Repository
public interface DormitoryManagerRepository extends JpaRepository<DormitoryManager, Long> {
DormitoryManager findByUsername(String username);
}
```
AdminRepository接口:
```java
@Repository
public interface AdminRepository extends JpaRepository<Admin, Long> {
Admin findByUsername(String username);
}
```
然后,我们需要为每个角色创建对应的Service和ServiceImpl,可以在项目中创建一个名为service的包,并在其中创建TeacherService、DormitoryManagerService和AdminService三个接口以及对应的实现类。
TeacherService接口:
```java
public interface TeacherService {
Teacher findByUsername(String username);
}
```
TeacherServiceImpl类:
```java
@Service
public class TeacherServiceImpl implements TeacherService {
@Autowired
private TeacherRepository teacherRepository;
@Override
public Teacher findByUsername(String username) {
return teacherRepository.findByUsername(username);
}
}
```
DormitoryManagerService接口:
```java
public interface DormitoryManagerService {
DormitoryManager findByUsername(String username);
}
```
DormitoryManagerServiceImpl类:
```java
@Service
public class DormitoryManagerServiceImpl implements DormitoryManagerService {
@Autowired
private DormitoryManagerRepository dormitoryManagerRepository;
@Override
public DormitoryManager findByUsername(String username) {
return dormitoryManagerRepository.findByUsername(username);
}
}
```
AdminService接口:
```java
public interface AdminService {
Admin findByUsername(String username);
}
```
AdminServiceImpl类:
```java
@Service
public class AdminServiceImpl implements AdminService {
@Autowired
private AdminRepository adminRepository;
@Override
public Admin findByUsername(String username) {
return adminRepository.findByUsername(username);
}
}
```
最后,我们需要编写登录Controller,可以在项目中创建一个名为controller的包,并在其中创建LoginController类。
LoginController类:
```java
@Controller
public class LoginController {
@Autowired
private TeacherService teacherService;
@Autowired
private DormitoryManagerService dormitoryManagerService;
@Autowired
private AdminService adminService;
@GetMapping("/login")
public String login() {
return "login";
}
@PostMapping("/login")
public String login(String username, String password, String role, HttpSession session) {
if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password) || StringUtils.isEmpty(role)) {
return "login";
}
switch (role) {
case "teacher":
Teacher teacher = teacherService.findByUsername(username);
if (teacher == null || !teacher.getPassword().equals(password)) {
return "login";
}
session.setAttribute("user", teacher);
break;
case "dormitory_manager":
DormitoryManager dormitoryManager = dormitoryManagerService.findByUsername(username);
if (dormitoryManager == null || !dormitoryManager.getPassword().equals(password)) {
return "login";
}
session.setAttribute("user", dormitoryManager);
break;
case "admin":
Admin admin = adminService.findByUsername(username);
if (admin == null || !admin.getPassword().equals(password)) {
return "login";
}
session.setAttribute("user", admin);
break;
default:
return "login";
}
return "redirect:/index";
}
@GetMapping("/index")
public String index() {
return "index";
}
@GetMapping("/logout")
public String logout(HttpSession session) {
session.removeAttribute("user");
return "redirect:/login";
}
}
```
在这个Controller中,我们使用了Spring的依赖注入,注入了三个Service(TeacherService、DormitoryManagerService和AdminService)。在登录方法中,我们首先判断传入的参数是否为空,如果有一个为空,则直接返回登录页面;否则,根据传入的角色(role)判断登录用户的身份,并根据相应的Service查询数据库中是否存在该用户,如果存在,则将用户信息存入session中,跳转到主页面(index);否则,继续返回登录页面。在登出方法中,我们只需要从session中移除用户信息即可。
最后,在项目中创建一个名为templates的目录,在其中创建login.html和index.html两个文件,这两个文件就是登录页面和主页面的模板文件了。这里不再赘述,可以根据自己的需要进行编写。
以上就是一个简单的学生宿舍管理系统的登录业务逻辑代码。