SSM整合快速入门案例(二)(2)

简介: SSM整合快速入门案例(二)

五、前后台协议联调实现CRUD

1. 导入前端页面

具体代码可以在我主页上传的的资源里找到

2. 在config包下编辑创建springmvc路径支持类SpringMvcSupport

@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
        registry.addResourceHandler("/css/**").addResourceLocations("/css/");
        registry.addResourceHandler("/js/**").addResourceLocations("/js/");
        registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
    }
}

3. 加载springmvc支持类(在springmvc配置中扫描config包)

@Configuration
@ComponentScan({"org.example.controller","org.example.config"})
@EnableWebMvc
public class SpringMvcConfig {
}

4. 运行tomcat,访问页面

- - 查询

5. 查询获取数据(渲染数据是前端双向绑定做的)

  • 注释及相关的查询js代码
  1. 发送ajax请求
  2. 请求类型是get
  3. 请求路径是rest风格“/books”
  4. 请求结果模型dataList
  5. 从res.data中取数据
  6. 进一步从自定义的data字段中取数据
getAll() {         
     axios.get("/books").then((res)=>{
          this.dataList = res.data.data;
     });
}
  • 重启tomcat再次访问books.html

- - 添加

6. 添加功能

  • 为了实现判断是否添加失败的功能,BookDao中的方法的返回值由void改为int,代表行计数(即该操作改变了多少行)
public interface BookDao {
//    @Insert("insert into tbl_book values(null,#{type},#{name},#{description})")
    @Insert("insert into tbl_book (type,name,description) values(#{type},#{name},#{description})")
    public int save(Book book);
    @Update("update tbl_book set type = #{type}, name = #{name}, description = #{description} where id = #{id}")
    public int update(Book book);
    @Delete("delete from tbl_book where id = #{id}")
    public int delete(Integer id);
    @Select("select * from tbl_book where id = #{id}")
    public Book getById(Integer id);
    @Select("select * from tbl_book")
    public List<Book> getAll();
}
  • 修改业务层实现类,当操作成功则返回值大于1,为true;反之,为false
@Transactional
public class BookServiceImpl implements BookService {
    @Autowired
    private BookDao bookDao;
    public boolean save(Book book) {
        return bookDao.save(book) > 0;
    }
    public boolean update(Book book) {
        return bookDao.update(book) > 0;
    }
    public boolean delete(Integer id) {
        return bookDao.delete(id) > 0;
    }
    public Book getById(Integer id) {
        if(id == 1){
            throw new BusinessException(Code.BUSINESS_ERR,"请不要使用你的技术挑战我的耐性!");
        }
//        //将可能出现的异常进行包装,转换成自定义异常
//        try{
//            int i = 1/0;
//        }catch (Exception e){
//            throw new SystemException(Code.SYSTEM_TIMEOUT_ERR,"服务器访问超时,请重试!",e);
//        }
        return bookDao.getById(id);
    }
    public List<Book> getAll() {
        return bookDao.getAll();
    }
}
  • 注释及相关的添加操作js代码
  1. 发送ajax请求
  2. 添加的请求类型是post
  3. 请求的rest风格路径是“/books”
  4. 提交的内容是表单数据,经查询,本案例中添加表单自定义标识符叫formData
  5. $message.error() 在该前端框架中代表切换失败的样式
  6. 获得的数据res.data,自定义状态码code,获取的数据中的状态码res.data.code
  7. 添加操作完后重新获取所有数据this.getAll()
handleAdd () {
    axios.post("/books",this.formData).then((res)=>{
        console.log(res.data);
        //如果操作成功,关闭弹层,显示数据
        if(res.data.code == 20011){
            this.dialogFormVisible = false;
            this.$message.success("添加成功");
        }else if(res.data.code == 20010){
            this.$message.error("添加失败");
        }else{
            this.$message.error(res.data.msg);
        }
     }).finally(()=>{
        this.getAll();
    });
},
  • 运行结果示例

添加成功示例

添加失败示例

- - 修改

7. 修改功能

  • 注释及相关的查询js代码
  1. 修改分两步,弹出编辑窗口根据id查询数据 + 编辑后保存加载数据
  2. 根据上文的设计可知从row获取行数据
  3. 根据上文的设计可知弹窗的标签名为dialogFormVisible4Edit,值为true代表展示弹层
//弹出编辑窗口
handleUpdate(row) {
    // console.log(row);   //row.id 查询条件
    //查询数据,根据id查询
    axios.get("/books/"+row.id).then((res)=>{
        // console.log(res.data.data);
        if(res.data.code == 20041){
            //展示弹层,加载数据
            this.formData = res.data.data;
            this.dialogFormVisible4Edit = true;
        }else{
            this.$message.error(res.data.msg);
        }
    });
},
//编辑
handleEdit() {
    //发送ajax请求
    axios.put("/books",this.formData).then((res)=>{
    //如果操作成功,关闭弹层,显示数据
    if(res.data.code == 20031){
            this.dialogFormVisible4Edit = false;
            this.$message.success("修改成功");
        }else if(res.data.code == 20030){
            this.$message.error("修改失败");
        }else{
            this.$message.error(res.data.msg);
        }
    }).finally(()=>{
       this.getAll();
    });
},
  • 运行示例

- - 删除

8. 删除功能

  1. 删除应该出现一个提示框,提示用户是否删除
  2. 删除的提交类型为delete
  • 相关注释及js代码
handleDelete(row) {
    //1.弹出提示框
    this.$confirm("此操作永久删除当前数据,是否继续?","提示",{
        type:'info'
    }).then(()=>{
        //2.做删除业务
        axios.delete("/books/"+row.id).then((res)=>{
            if(res.data.code == 20021){
                this.$message.success("删除成功");
            }else{
                this.$message.error("删除失败");
            }
        }).finally(()=>{
            this.getAll();
        });
    }).catch(()=>{
        //3.取消删除
        this.$message.info("取消删除操作");
    });
}
  • 运行示例

`博客内容借鉴了bilibili黑马程序员SSM课程资料,如有侵权,请联系作者删除`

总结

欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。

相关文章
|
6月前
ssm使用全注解实现增删改查案例——showEmp.jsp
ssm使用全注解实现增删改查案例——showEmp.jsp
|
6月前
ssm使用全注解实现增删改查案例——showDept.jsp
ssm使用全注解实现增删改查案例——showDept.jsp
|
6月前
ssm使用全注解实现增删改查案例——web.xml
ssm使用全注解实现增删改查案例——web.xml
|
6月前
ssm使用全注解实现增删改查案例——applicationContext.xml
ssm使用全注解实现增删改查案例——applicationContext.xml
|
6月前
ssm使用全注解实现增删改查案例——EmpServiceImpl
ssm使用全注解实现增删改查案例——EmpServiceImpl
|
6月前
ssm使用全注解实现增删改查案例——DeptServiceImpl
ssm使用全注解实现增删改查案例——DeptServiceImpl
|
6月前
ssm使用全注解实现增删改查案例——IEmpService
ssm使用全注解实现增删改查案例——IEmpService
|
6月前
ssm使用全注解实现增删改查案例——IDeptService
ssm使用全注解实现增删改查案例——IDeptService
|
6月前
ssm使用全注解实现增删改查案例——Emp
ssm使用全注解实现增删改查案例——Emp
|
6月前
ssm使用全注解实现增删改查案例——Dept
ssm使用全注解实现增删改查案例——Dept