项目一,注册
导入项目,报错,因为缺少MyBatis的配置文件
spring.datasource.url=jdbc:mysql://localhost:3306/tedu_store?useUnicode=true&characeterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
mybatis.mapper-locations=classpath:mappers/*.xml
看测试类中的空方法是否正常执行
看是否获得数据库连接
此时需要创建数据库,否则会抛出异常
创建表
创建实体类
因为有些表的字段是每个表都会有的,所以可以创建实体类的基类储存这些字段
创建cn.tedu.store.entity.BaseEntity
这个类可以是抽象的,然后让相应的实体类继承这个基类,还要有对应的get/set方法,实现Serializable接口
创建cn.tedu.store.entity.User。。。实现基类。。。还有有对应的SET/GET/toString/equals和hashCode方法,实现Serializable接口
创建持久层
在启动类之前添加@MapperScan(“com.abc.Aotian.mapper”)以配置持久层接口所在的包
注册的SQL语句,应该先查询用户名是否存在,在判断是否新增
创建com.abc.Aotian.mapper.UserMapper接口
创建mapper.xml配置文件
创建com.abc.Aotian.UserMapperTests类测试持久层
创建业务层
规划异常
执行新增sql可能产生异常
com.abc.Aotian.service.ex.InsertException
用户名被占用可能产生异常
com.abc.Aotian.service.ex.UsernameDuplicateException
创建这两个异常类的基类
com.abc.Aotian.service.ex.ServiceException
他们都应该是
RuntimeException
的子孙类
创建业务层接口
com.abc.Aotian.service.IUserService
添加抽象方法
void reg(User user) throws UsernameDuplicateException, InsertException;
创建业务层实现类com.abc.Aotian.service.impl.UserServiceImpl
实现以上IUserService接口,添加@Service注解,并在类中声明@Autowired private UserMapper userMapper;持久层对象:
具体实现
创建com.abc.Aotian.service.UserServiceTests测试类,编写并执行单元测试:
创建控制器层
处理异常
创建响应结果的数据类型com.abc.Aotian.util.JsonResult:
public class JsonResult {
private Integer state;
private String message;
private T data;
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
在统一处理异常时,相关代码只能作用于当前控制器类,
为了使得整个项目都可以使用这个统一处理异常的机制,应该把相应代码添加在控制器类的基类
com.abc.Aotian.controller.BaseController中
public class BaseController {
@ExceptionHandler(ServiceException.class)
public JsonResult<Void> handleException(Throwable e) {
JsonResult<Void> jr = new JsonResult<Void>();
jr.setMessage(e.getMessage());
if (e instanceof UsernameDuplicateException) {
jr.setState(2);
} else if (e instanceof InsertException) {
jr.setState(3);
}
return jr;
}
}
创建com.abc.Aotian.controller.UserController控制器类,继承自BaseController,
添加@RestController和@RequestMapping(“users”)注解,并在类中添加@Autowired private IUserService userService;业务层对象,
@RequestMapping(“reg”)
public JsonResult reg(User user) {
// 执行注册
userService.reg(user);
// 返回成功
JsonResult jr = new JsonResult();
jr.setState(1);
return jr;
}