技术栈:
前端:获取到的源码
后端:Java,Springboot,Mybatis,Mybatis-puls,Spring-MVC,Maven
主要功能:用户登录和管理员登录,进行图书管理的增删改查,批量删除等,读者管理,借阅记录管理,统计分析,类别管理,库存管理,修改密码的;
包的建立
MyBatis-Plus的 ServiceImpl
类是一个实现了 IService
接口的抽象类,它提供了对数据库操作的通用实现,从而减少了重复代码的编写。在使用 ServiceImpl
时,你通常会创建自己的服务实现类,继承自 ServiceImpl
,并指定相应的 Mapper 接口和实体类。这样,服务类就继承了一系列 CRUD(创建、读取、更新、删除)操作。
1. 定义实体类
首先,定义实体类 T
,一个简单的 user
类:
@Data //lombok提供类的get、set、equals、hashCode、toString等方法
@TableName("user") //实体类与数据库中名为 user 的表进行映射。
public class User {
private Integer id;
private String email;
private String password;
private String username;
private String phone;
private String image;
}
//定义的字段以数据库的字段为参考
2. 创建 Mapper 接口
创建一个继承 BaseMapper
的 Mapper 接口,该接口类型参数为你的实体类:
@Repository //修饰哪个类表明这个类具有对数据库CRUD的功能,用在持久层的接口上
public interface UserMapper extends BaseMapper<User> {
}
3. 创建 Service 接口
创建一个服务接口,该接口继承 IService<T>
,其中 T
是你的实体类:
public interface UserService extends IService<User> {
boolean login(String userName, String userPwd); //界面进去的判断方法
}
4. 实现 ServiceImpl 类
创建一个服务实现类,继承 ServiceImpl<M, T>
,其中 M
是 Mapper 接口,T
是实体类:
@Service //一个类声明为业务逻辑组件,将其对象存入 Spring 容器。在控制器类中,通过注入该组件的实例,即可调用其中的方法。
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Override
public boolean login(String userName, String userPwd) {
QueryWrapper<User>qw=new QueryWrapper<>(); //一个条件构造器,用于构建数据库查询的条件
qw.eq("username",userName);
User user = this.baseMapper.selectOne(qw);
System.out.println(user);
if (user==null){
return false;
}
String s = DigestUtil.md5Hex(userPwd);
System.out.println(user.getPassword());
if (s.equals(user.getPassword())){
return true;
}else {
return false;
}
}
}
5. 使用服务类
登录界面控制层
在你的应用程序中,现在可以通过注入的方式使用 UserServiceImpl
来进行[数据库操作]
@Controller //可以处理来自客户端的请求,并返回相应的响应结果。
public class AccountController { //登录界面控制层
@Autowired //标记需要注入的成员变量、构造函数或者方法
private UserService userService;
@Autowired // 自动注入 ReaderService 实例
private ReaderService readerService;
@RequestMapping("toRegister") //类的父路径下追加方法上注解中的地址会访问该方法
public String toRegister(){
return "register";
}
@RequestMapping("toLogin")
public String toLogin(){
return "index";
}
@RequestMapping("login")
public String login(String userName, String userPwd, Model model, HttpSession session){
//Model接口用于封装数据,这些数据会被传递到视图中。
System.out.println("接收到的 userName: " + userName);
if ("admin".equals(userName)){
boolean i=userService.login(userName,userPwd);
if (i){
QueryWrapper<User> qw=new QueryWrapper<>(); //创建查询包装器
qw.eq("username",userName);
User user = userService.getOne(qw);
//session.setAttribute()通过将这些用户相关的信息存储在会话中,可在同一个会话的不同请求和处理过程中共享和使用这些数据
session.setAttribute("image",user.getImage());
session.setAttribute("currentUser",userName); //Session中存储用户名
session.setAttribute("password",user.getPassword());
session.setAttribute("email",user.getEmail());
return "waterMainMenu";
}else {
model.addAttribute("msg","用户名或密码错误!"); //封装了查询数据
return "index";
}
}else {
boolean i=readerService.login(userName,userPwd);
if (i){
session.setAttribute("currentUser",userName);
return "waterMainMenu1";
}else {
//模型(Model)中添加一个属性(Attribute),这个属性的名称是"msg",
其对应的值是"用户名或密码错误!"
model.addAttribute("msg","用户名或密码错误!");
return "index";
}
}
}
示例图
以上仅是小白简单学习