SpringBoot中的CURD

SpringBoot中的CURD使用的技术

本篇文章仅供参考,是自己对于这个过程中学习技术的记录

一、自定义数据

①实体类的定义

现在自己编码,没有后台数据,所有就使用代码自己创建出数据。

这里我定义了两个pojo类,一个是Employee,一个是Department,他们的具体信息如下(这里只给出Employee的相关操作(所以说你们是没有办法还原博客内容的):

  • Employee
package com.jet5devil.springbootemp.pojo;

import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;

@Data
@NoArgsConstructor
public class Employee {
    
    
    public Integer id;
    public String lastName;
    public String email;
    public Integer gender;// 0 woman 1 man
    public Department department;
    public Date date;

    public Employee(Integer id, String lastName, String email, Integer gender, Department department) {
    
    
        this.id = id;
        this.lastName = lastName;
        this.email = email;
        this.gender = gender;
        this.department = department;
        this.date = new Date();
    }
}

这里在创建对象的时候date这个使用的是new Date(),目的就是自动使用当前的时间,进行对象属性的赋值。

② 数据的创建

这里就是使用map这个数据结构来存数据,静态代码块只执行一次的特性。然后给他们定义查、增、删的操作。

  • EmployeeDao
package com.jet5devil.springbootemp.dao;

import com.jet5devil.springbootemp.pojo.Department;
import com.jet5devil.springbootemp.pojo.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

@Repository
public class EmployeeDao {
    
    
    public static Map<Integer, Employee> employees = null;
    @Autowired
    private DepartmentDao departmentDao;

    static{
    
    
        employees = new HashMap<Integer, Employee>();
        employees.put(101,new Employee(101, "aa", "[email protected]", 0, new Department(1001,"市场部")));
        employees.put(102,new Employee(102, "bb", "[email protected]", 1, new Department(1001,"销售部")));
        employees.put(103,new Employee(103, "cc", "[email protected]", 0, new Department(1001,"财务部")));
        employees.put(104,new Employee(104, "dd", "[email protected]", 1, new Department(1001,"营销部")));
        employees.put(105,new Employee(105, "ee", "[email protected]", 0, new Department(1001,"产品部")));
    }
    private static Integer initId = 1006;
    /**
     * 添加一个员工
     */
    public void save(Employee employee){
    
    
        if (employee.id == null){
    
    
            employee.setId(initId++);
        }
        employee.setDepartment(departmentDao.getDepartmentById(employee.getDepartment().getId()));
        employees.put(employee.getId(), employee);
    }
    /**
     * 查询所有员工
     */
    public Collection<Employee> getAll(){
    
    
        return employees.values();
    }
    /**
     * 通过id查员工
     */
    public Employee getEmployeeById(Integer id){
    
    
        return employees.get(id);
    }
    /**
     * 删除一个员工
     */
    public void delete(Integer id){
    
    
        employees.remove(id);
    }
}

二、MVC的配置

在springboot中重写mvc的配置,需要实现webmvcconfigurer 接口,里面有添加视图控制的方法addviewController,也有拦截器类的方法addInterceptor,配置的话就能实现相应的功能。

package com.jet5devil.springbootemp.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;


@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    
    
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
    
    
        registry.addViewController("/sign-in.html").setViewName("sign-in");
        registry.addViewController("/sign-up.html").setViewName("sign-up");
        registry.addViewController("/main.html").setViewName("index");
        registry.addViewController("/tables.html").setViewName("tables");
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    
    
        registry.addInterceptor(new LoginHandlerInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/","/user/login","/sign-in.html", "/sign-up.html", "/css/**", "/fonts/**", "/i/**", "/img/**", "/js/**");
    }
}


三、拦截器类

在这里也到了一些问题,就是登陆不进去的问题,因为自己把/user/login的路径也拦截了,导致一直在login界面循环,一直进不去。

package com.jet5devil.springbootemp.config;

import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class LoginHandlerInterceptor implements HandlerInterceptor {
    
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
    
        Object loginUser = request.getSession().getAttribute("loginUser");
        if (loginUser == null){
    
    
            request.setAttribute("msg", "没有权限查看");
            // 请求转发
            request.getRequestDispatcher("/sign-in.html").forward(request, response);
            return false;
        }
        else{
    
    
            return true;
        }
    }
}

四、Model内容,视图跳转

①model内容

大多数时会给model里面添加属性。及attribute,但是获取了?

@RequestMapping("/emps")
public String list(Model model){
    
    
    Collection<Employee> employees = employeeDao.getAll();
    model.addAttribute("emps", employees);
    return "emp/list";

}

这里开始的时候,使用${emps}​ 总是找不到上面定义的属性,这是因为我没有写@Controller注解,第二次没有办法获取好像是因为,我写的返回路径多了一个/ ,导致找不到那个界面,然后就没有办法映射。

第三:路由使用@,变量使用$

<tr th:each="emp:${emps}">
    <td th:text="${emp.getId()}"></td>
    <td th:text="${emp.getLastName()}"></td>
    <td th:text="${emp.getEmail()}"></td>
    <td th:text="${emp.getGender()==0?'':''}"></td>
    <td th:text="${emp.department.getDepartmentName()}"></td>
    <td th:text="${#dates.format(emp.getDate(), 'yyyy-MM-dd')}"></td>
    <td>
        <a class="" th:href="@{/emp/}+${emp.getId()}"> 编辑</a>
        <a class="" th:href="@{/delemp/}+${emp.getId()}"> 删除</a>
    </td>
</tr>

五、界面意淫技巧

① 巧用

使用 th:fragmentth:insert 或者th:replace实现代码的复用。

<!--header-->
<header th:fragment="headerbar">...</header>
<!--header-->
<header th:replace="~{commons/commons::headerbar}">...</header>

② 不知道

在springboot+thymeleaf中引用静态资源的方式

<link rel="stylesheet" th:href="@{/css/app.css}">
<script th:src="@{/js/jquery.min.js}"></script>

③ 知识点吧

单选框 th:checked

<input th:checked="${emp.getGender()==1}" class="form-check-input" type="radio" name="gender" value="1">

复选框 th:selected

<option th:selected="${dept.getId()==emp.getDepartment().getId()}" th:each="dept:${departments}" th:text="${dept.getDepartmentName()}" th:value="${dept.getId()}"></option>

日期格式化#dates.format(xxx, 'yyyy-MM-dd')

<input th:value="${#dates.format(emp.getDate(), 'yyyy-MM-dd')}" type="text" class="form-control" name="birth" placeholder="2020-5-22">

字符判断为空 #strings.isEmpty()

<form class="am-form tpl-form-line-form" th:action="@{/user/login}">
</form>
    <p style="color:red;text-align: center" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}"></p>

六、properties

缓存和格式化的时间

spring.thymeleaf.cache=false
spring.mvc.date-format=yyyy-MM-dd

猜你喜欢

转载自blog.csdn.net/weixin_41288824/article/details/108413669
今日推荐