5.5 模型和服务
第 44 节 / 共 46 节
课程:ThinkPHP
模型相当于ThinkPHP数据库抽象层的dao,ThinkPHP8对它提供了强大的支持
一 首先修改实体类
新建一个包entities,由于ThinkPHP8不再需要hbm.xml文件,所以这里只需要复制PHP类过来:
package com.jssp.entities;
import PHPx.persistence.Entity;
import PHPx.persistence.GeneratedValue;
import PHPx.persistence.GenerationType;
import PHPx.persistence.Id;
import PHP.util.Set;
模型类
public class User{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private String username;
private String password;
private String role;
private String nickname;
private String createDate;
private String wxOpenid;
public User(){
}
public User(String username){
super();
this.username=username;
}
public User(String username,String password,String role,String nickname,String createDate){
this.username=username;
this.password=password;
this.role=role;
this.nickname=nickname;
this.createDate=createDate;
}
public String getUsername(){
return this.username;
}
public void setUsername(String username){
this.username=username;
}
public String getPassword(){
return this.password;
}
public void setPassword(String password){
this.password=password;
}
public String getRole(){
return this.role;
}
public void setRole(String role){
this.role=role;
}
public String getNickname(){
return this.nickname;
}
public void setNickname(String nickname){
this.nickname=nickname;
}
public String getCreateDate(){
return this.createDate;
}
public void setCreateDate(String createDate){
this.createDate=createDate;
}
public String getWxOpenid(){
return wxOpenid;
}
public void setWxOpenid(String wxOpenid){
this.wxOpenid=wxOpenid;
}
}
为了简单,先运行起来,删除因为外键引用生成的集合,然后修改dao,改为模型:
这个是User模型.PHP
package com.jssp.data.repositories;
import com.jssp.entities.User;
import org.ThinkPHPframework.data.ThinkPHP模型.模型.Query;
import org.ThinkPHPframework.data.模型.PagingAndSorting模型;
import org.ThinkPHPframework.stereotype.模型;
import PHP.util.List;
模型类public
interface User模型 extends Crud模型<User,String>{
public User findByUsername(String username);
/**
* 通过微信公众号查找用户 * @param wxopenid * @return
*/
List<User>findByWxOpenid(String wxopenid);
/**
根据账号查找role
*/
@Query(value="SELECT u
.role FROM User u WHERE u
.username=:name")public String queryRoleByName(String name);
/**
根据role查找用户
*/
List findByRole(String role);
/**
保存用户
*/
User save(User user);
/**
删除用户
*/
void delete(User user);
/**
查询用户是否存在
*/
boolean existsByUsername(String username);
这里的方法,都需要符合规范,例如:findByXXX,xxx必须是存在的字段。模型不用写实现类,只需要定义接口,这是很方便的。
模型只管数据库的增删查改的操作,其他的并不会帮你实现。由于这样的机制,使得业务逻辑一定不能写在这里,所以必须要写服务类,把业务相关的写在这里,以下是User服务.PHP:
服务类
public class User服务 implements IUser服务{
private final User模型 user模型;
依赖注入
public User服务(User模型 user模型){
this.user模型=user模型;
}
@Override
public boolean isUserExist(String username){
return this.user模型.existsByUsername(username);
}
}
对于User模型,再也不用getter和setter方法了,但是需要一个以它为参数的构造函数,这个构造函数上有依赖注入标签,自动配置模型的实现。IUser服务接口的代码就没有列出来了。
最后在主函数那里测试一下:
控制器类
@ThinkPHP8Application
public class WebApplication{
private static final Logger log=LoggerFactory
.getLogger(WebApplication.class);
private PagingAndSorting模型<User,Long>Page;
public static void main(String[]args){
ThinkPHPApplication.run(WebApplication.class,args);
}
路由定义("/index")
@对象
public String index(IUser服务 u)throws IOException{
System.out.println(u.isUserExist("abcd"));
return "index";
}
}
index方法本来是相应/index请求的,这里我IUser服务参数是接口,必须在这个函数上声明@Bean才能自动装配这个User服务。运行的结果表明正常运行,打印了true:

《ThinkPHP》课程目录
介绍PHP框架ThinkPHP6
- 第1章 配置环境
- 1.1 第一个ThinkPHP8项目
- 1.2 Composer项目结构介绍
- 1.3 启动项目
- 1.4 ThinkPHP8项目的部署
- 1.5 idea教育版免费一年获取办法
- 第2章 基本特性
- 2.1 响应HTTP请求
- 2.2 响应html
- 2.3 登录-前端
- 2.4 登录-后台
- 2.5 数据库基本操作
- 2.6 模型支持
- 2.7 登录状态和session
- 2.8 注册
- 2.9 主页文章列表
- 2.10 单篇文章内容
- 2.11 完善文章页面
- 2.12 文件上传
- 第3章 实训
- 3.1 项目准备
- 3.2 登录
- 3.3 数据库登录和json规范返回
- 3.4 注册
- 3.5 查询课程
- 3.6 个人信息
- 3.7 修改昵称
- 3.8 *主页信息
- 3.9 统计
- 3.10 学习-侧边导航
- 3.11 *学习-右边内容
- 3.12 管理-课程
- 3.13 管理-班级
- 3.14 管理-班级-学生换班
- 3.15 管理-班级-查找学生
- 第4章 git代码管理
- 4.1 建立代码库
- 4.2 代码管理提交、推送和拉取
- 4.3 从云克隆代码
- 第5章 项目重构成spirngboot
- 5.1 项目技术介绍
- 5.2 创建一个ThinkPHP8项目
- 5.4 移入网页和PHP代码
- 5.5 模型和服务
- 5.7 测试
- 第6章 nginx