今日目标:初始化工程,跑通一个接口
这是别人斥50块巨资托我开发的项目,成果是一个简单的后台管理图书系统。
1.搭建数据库
数据库采用最简单的设计,3个独立的实体,管理员,用户,和书籍,每本书的所有属性我想过都没必要分离出去,都是1对1的,虽然用户和书籍可以是1对多的关系(1本书只能被一个人借用,一个人可以借多本书),甚至说在预约排队的时候会有多对多的可能(1本书会被多个人排队等待借阅,1个人可以同时排队多本书),但是为了偷懒,不想做中间表,那就不做预约排队功能了。
2.把通用的功能模板做出来
重点说一下common文件夹和config文件夹。
1.问题:我们表现层增删改方法返回true或者false表示是否成功,getById()方法返回一个json对象,getAll()方法返回一个json对象数组,这里就出现了三种格式的响应结果,极其不利于前端解析。
解决:我们需要统一响应结果的格式,就是那个Result类,因为分页查询的会多一些字段,所以需要PageResult类继承Result就好了。
另外也可以加一些状态码常量,但我觉得麻烦,不加了。
2.异常处理也是非常必要的,开发的时候你可以看到404,500等界面,但是用户看到这个就太不应该了,总不能让用户分析报错原因吧。所以搞个异常拦截,对所有的异常拦截之后友好的返回给前端,让前端友好的告诉用户:加载失败,请重试。
3.config文件夹下面的东西就是ssm的配置类,这些东西可以通过xml配置,当然我这里是用的配置类,更方便些。
注意:有个巨坑的点,就是两个mapper的路径必须一样,这样编译出来他们才会在同一个文件夹下面。千万看好不是名字是com.zhouhao.mapper,而是层级的体现,我刚开始就搞错了,结果一直访问不到xml里的东西。
3.连上数据库写通一个接口
/**
* 查询管理员列表
*/
@GetMapping ("/list")
public Result list(Admin admin) {
List<Admin> list = adminService.selectAdminList(admin);
if (list != null) {
return Result.success(list);
} else {
return Result.error();
}
}
mapper可以用注解,也可以用mapper.xml。这里用的xml:明天就不再用xml了,麻烦。
仅展示部分代码
<sql id="selectAdminVo">
select id, name, username, password, phone, sex, id_number from admin
</sql>
<select id="selectAdminList" parameterType="Admin" resultMap="AdminResult">
<include refid="selectAdminVo"/>
<where>
<if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if>
<if test="username != null and username != ''"> and username like concat('%', #{username}, '%')</if>
<if test="password != null and password != ''"> and password = #{password}</if>
<if test="phone != null and phone != ''"> and phone = #{phone}</if>
<if test="sex != null and sex != ''"> and sex = #{sex}</if>
<if test="idNumber != null and idNumber != ''"> and id_number = #{idNumber}</if>
</where>
</select>
用postman测一下,通了:
收工,明天把所有的模块的增删改查写了。