个⼈博客⽹站编写(04)--接⼝的设计以及测试
个⼈博客⽹站编写(04)--接⼝的设计以及测试
前⾔:上⼀篇了我们将对应的实体类⽣成了,接下来今天我们要来将SSM跑⼀遍进⾏⼀次测试。嗯,顺带提⼀句我们l件包的依赖下的不是很全,到时我会在⽂末给出链接⼤家可以参考!去下依赖。
接⼝的设计
接⼝的设计,项⽬开发是团对合作的,⼤家需要按照⼀套规则来开发。接⼝就是规则,项⽬负责⼈(技术)设计好接⼝的名称、返回值,接⼝参数,然后由开发⼈员进⾏开发。由于接⼝是最上层的抽象层,因此⼀旦确⽴好,并进⾏编写就会很难修改。因此,在设计时就需要考虑到⼤部分情况。
我们第⼀个要进⾏的功能开发是⽤户注册功能的开发!
所以⾸先定义⽤户注册的接⼝。
开发接⼝的第⼀步,新建接⼝包路径:
在 com.liwei.blog 右键 -> package -> service
以⽤户 User 为例:
点击 service -> 右键 new -> Java Class
Name:UserService Kind:Interface(选择接⼝)
n号房主犯赵主彬刑期增加5年
接⼝⼀般主要包含增删改查⽅法。
1.⽤户注册。
int regist(User user);
2.⽤户登录。
User login(String email,String password);
3.根据⽤户邮箱查询⽤户。
User findByEmail(String email);
4.根据⽤户⼿机号查询⽤户。
User findByEmail(String phone);
5.根据 id 查询⽤户。
User findById(Long id);
6.根据邮箱账号删除⽤户。
void deleteByEmail(String email);
7.更新⽤户信息。
void update(User user);
其他接⼝设计类似。
完成后的⽬录结构,如下图。
好了,我们接⼝的设计就到此结束了。看上去是不是很简单了?
就是写⼏个⽅法名和参数、返回值⽽已。但是实际上你不知道有多⿇烦,开始我提到过了,你需要考虑周全。这可是⼀个需要时间经验的东西。
通⽤ Mapper
通⽤ Mapper 是基于 MyBatis 的⼀个插件,它实现了⼤部分常⽤的增删改查⽅法,只要继承它就能拥有所有的通⽤⽅法,省去⼿写 XML 的烦恼。但是对于复杂的查询语句还是需要⼿写 XML 的。
(PS:实际上在我们上节课的代码⽣成中就有了这些基础的SQL,不过是有⼈讲他写成了基础的⽅法。我发现我们开发者真好。)
关于 MyBatis 的配置,之前已经讲解过,这⾥将配置⽂件中的部分注释解开。
1.在 配置⽂件中,将⾃动扫描 l ⽂件下⾯的注释解开,如下
mapping ⽂件夹就是我们以后存放⼿写 XML 的地⽅。
解开注释后发现报红,主要是缺少路径。点击 main 下的 resources,右键新建⽂件夹,命名为 mapping,然后新建⼀个 l ⽂件即可。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-////DTD Mapper 3.0//EN"
"/dtd/mybatis-3-mapper.dtd">
<mapper namespace="wang.dreamland.www.dao.UserMapper">
</mapper>
其中 namespace 是名称空间,对应的是该实体类的 mapper 接⼝或者说 dao 接⼝,增删改查的 SQL 就写在 mapper 标签之间,我们暂时不写,以后⽤到了再写。(刚刚说过了,我们有基础的mapper的继承⽅法,所有单表的增删改查我们就不⽤⾃⼰写了。)
2.在 l ⽂件中,将⾃定义分页插件下⾯的注释解开,如下:
实际上⽹上有JAR包,不过我直接在后⾯给出。
然后在 com.liwei.blog右键新建包 common,作为通⽤包,包含常⽤⼯具类及分页插件等。然后将分页插件 PageHelper.java 复制到common 包下。PageHelper.java ⽂件我会放到百度⽹盘中(见⽂末链接),⼤家直接导⼊即可,当做⼯具类使⽤。
导⼊ PageHelper.java 以后,打开 UserContentService,在该接⼝中增加关于分页查询的⽅法:
/**
*
* @param content ⽂章内容
* @param pageNum 页数
* @param pageSize 每页的⼤⼩
* @return
*/
{新坦结衣
PageHelper.Page<UserContent> findAll(UserContent content, Integer pageNum, Integer pageSize);
PageHelper.Page<UserContent> findAll(UserContent content, Comment comment, Integer pageNum, Integer pageSize);
PageHelper.Page<UserContent> findAllByUpvote(UserContent content, Integer pageNum, Integer pageSize);
}
做到这⾥关于接⼝之类的已经完成了 。
3.根据接⼝创建实现类:
service -> 右键 new -> Package -> impl -> OK
同样以 User 为例创建 UserServiceImpl,然后实现 UserService 接⼝并在类上加⼊ @Service 注解,表⽰属于 Service 层,Alt+Enter 重写所有⽅法。
@Service
public class UserServiceImpl implements UserService {
//实现所有⽅法具体实现先不写
}
4.在com.liwe.blog上右键 -> new -> Package ->dao,依次新建 UserMapper、UserInfoMapper、UserContentMapper、CommentMapper、LoginLogMapper、RoleMapper、UpvoteMapper 等接⼝。
我国古代四大发明
并依次继承通⽤ Mapper 接⼝,⼀旦继承了 Mapper<T>,继承的 Mapper 就拥有了 Mapper<T> 所有的通⽤⽅法。例如 UserMapper:    public interface UserMapper extends Mapper<User>{
}
此时 userMapper 就拥有了通⽤ Mapper 的所有通⽤⽅法。然后回到实现类 UserServiceImpl 中,重写实现⽅法如下:
package com.liwei.blog.service.Impl;
import com.liwei.blog.dao.UserMapper;
import com.liwei.blog.pojo.User;
import com.liwei.blog.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;杨紫名誉权案胜诉
import ansaction.annotation.Transactional;
/**
* Created by HAND_WEILI on 2018/11/9.
*/
/*使⽤service注解标识为呗spring管理的bean*/
@Service
public class UserServiceImp implements UserService{
@Autowired
private UserMapper userMapper;
private User user = new User();
@Transactional
public int regist(User user) {
return userMapper.insert(user);
}
@Override
public User login(String email, String password) {
User user = new User();
user.setEmail(email);
user.setPassword(password);
/*userMapper.selectOne(user);*/
return null;
}
@Override
public User findUserByEmail(String email) {
移动网上营业user.setEmail(email);
return userMapper.selectOne(user);
}
@Override
public User findUserByMobile(String mobile) {
User user = new User();
user.setPhone(mobile);
return userMapper.selectOne(user);
}
@Override
public User findUserById(int id) {
return null;
}
@Override
@Transactional
public void deleteUserByEmail(String Email) {
user.setEmail(Email);
userMapper.delete(user);
徐佳宁个人资料
}
@Override
@Transactional
public void updateUser(User user) {
userMapper.updateByPrimaryKeySelective( user );
}
}
代码解读如下:
(1)通过 @Autowired 注解注⼊ UserMapper 对象,如果注⼊的 mapper 有报红,可能是 IDEA ⼯具的问题,可通过下⾯⽅式去除红⾊错误: