测试2
@Test void testMapper(){ //getDepartments // Collection<Department> departments = departmentMapper.getDepartments(); // for (Department d:departments) { // System.out.println(d); // } //departmentById Department departmentById = departmentMapper.getDepartmentById(101); // System.out.println(departmentById); //save // Employee employee=new Employee("FF","F123456@qq.com",0,101,new Date()); // employeeMapper.save(employee); //updateEmp // Employee employee=new Employee("FF","F123456@qq.com",1,101,new Date()); // employee.setId(6); // employeeMapper.updateEmp(employee); //delete // employeeMapper.delete(6); //getAll List<Employee> all = employeeMapper.getAll(); for (Employee e:all) { System.out.println(e); } }
controller
- EmployeeController
package com.kuang.controller; import com.kuang.mapper.DepartmentMapper; import com.kuang.mapper.EmployeeMapper; import com.kuang.pojo.Department; import com.kuang.pojo.Employee; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import java.util.Collection; @Controller public class EmployeeController { // @Autowired EmployeeMapper employeeDao; @Autowired DepartmentMapper departmentDao; @GetMapping("/emps") public String list(Model model){ model.addAttribute("departmentDao",departmentDao); Collection<Employee> employees = employeeDao.getAll(); model.addAttribute("emps",employees); return "emp/list"; } @GetMapping("/emp") public String toAddpage(Model model) { //查出所有部门信息 Collection<Department> departments = departmentDao.getDepartments(); model.addAttribute("departments",departments); return "emp/add"; } @PostMapping("/emp") public String addpage(Employee employee) { employeeDao.save(employee);//调用底层 保存 //添加的操作 return "redirect:/emps"; } @GetMapping("/emp/{id}") public String toUpdatePage(@PathVariable("id") Integer id, Model model) { //查出原来的数据 Employee employee = employeeDao.getEmployeeById(id); model.addAttribute("employee", employee); //查出所有部门信息 Collection<Department> departments = departmentDao.getDepartments(); model.addAttribute("departments",departments); return "emp/update"; } @PostMapping("/updateEmp") public String updateEmp(Employee employee) { employeeDao.updateEmp(employee); return "redirect:/emps"; } @GetMapping("/delEmp/{id}") public String delEmp(@PathVariable("id") Integer id) { employeeDao.delete(id); return "redirect:/emps"; } }
- IndexController
package com.kuang.controller; import com.kuang.mapper.DepartmentMapper; import com.kuang.mapper.EmployeeMapper; import com.kuang.pojo.Department; import com.kuang.pojo.Employee; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import java.util.Collection; @Controller public class EmployeeController { // @Autowired EmployeeMapper employeeDao; @Autowired DepartmentMapper departmentDao; @GetMapping("/emps") public String list(Model model){ model.addAttribute("departmentDao",departmentDao); Collection<Employee> employees = employeeDao.getAll(); model.addAttribute("emps",employees); return "emp/list"; } @GetMapping("/emp") public String toAddpage(Model model) { //查出所有部门信息 Collection<Department> departments = departmentDao.getDepartments(); model.addAttribute("departments",departments); return "emp/add"; } @PostMapping("/emp") public String addpage(Employee employee) { employeeDao.save(employee);//调用底层 保存 //添加的操作 return "redirect:/emps"; } @GetMapping("/emp/{id}") public String toUpdatePage(@PathVariable("id") Integer id, Model model) { //查出原来的数据 Employee employee = employeeDao.getEmployeeById(id); model.addAttribute("employee", employee); //查出所有部门信息 Collection<Department> departments = departmentDao.getDepartments(); model.addAttribute("departments",departments); return "emp/update"; } @PostMapping("/updateEmp") public String updateEmp(Employee employee) { employeeDao.updateEmp(employee); return "redirect:/emps"; } @GetMapping("/delEmp/{id}") public String delEmp(@PathVariable("id") Integer id) { employeeDao.delete(id); return "redirect:/emps"; } }
- LoginController
package com.kuang.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import javax.servlet.http.HttpSession; @Controller public class LoginController { @GetMapping("user/login") public String login(@RequestParam("username") String username, @RequestParam("password") String password, Model model, HttpSession session){ //具体的业务 if(StringUtils.hasLength(username)&&"123456".equals(password)){ session.setAttribute("loginUser",username); return "redirect:/main.html"; }else { //告诉用户,你登录失败了 model.addAttribute("msg","用户名或密码错误"); return "index"; } } @RequestMapping("/user/logout") public String logout(HttpSession session){ session.invalidate(); return "redirect:/index.html"; } }
config
- LoginHandlerInterceptor
package com.kuang.config; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; 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("/index.html").forward(request, response); return false; } return true; } }
- MyLocaleResolver
package com.kuang.config; import org.springframework.util.StringUtils; import org.springframework.web.servlet.LocaleResolver; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Locale; public class MyLocaleResolver implements LocaleResolver { //解析请求 @Override public Locale resolveLocale(HttpServletRequest request) { //获取请求中的语言参数 String l = request.getParameter("l"); //如果没有就使用默认的 Locale locale = Locale.getDefault(); //如果请求的链接携带了国际化的参数 if (!StringUtils.isEmpty(l)) { String[] split = l.split("_"); //语言 国家 locale = new Locale(split[0], split[1]); } return locale; } @Override public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { } }
- MyMvcConfig
package com.kuang.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; //如果 你想自定义一些定制化的功能,只要写这个组件,然后将它交给springboot,springboot就会帮我们自动装配 //扩展springmvc //如果我们要扩展springmvc,官方建议我们这样做 @Configuration public class MyMvcConfig implements WebMvcConfigurer { //视图跳转 @Override public void addViewControllers(ViewControllerRegistry registry) { // 浏览器发送/test , 就会跳转到test页面; registry.addViewController("/").setViewName("index"); registry.addViewController("/index.html").setViewName("index"); registry.addViewController("/main.html").setViewName("dashboard"); } //自定义的国际化生效 @Bean public LocaleResolver localeResolver(){ return new MyLocaleResolver(); } // @Override // public void addInterceptors(InterceptorRegistry registry) { // registry.addInterceptor(new LoginHandlerInterceptor()) // .addPathPatterns("/**") // .excludePathPatterns("/","/index.html", "/user/login","/css/*","/js/*","/img/*","/dashboard.html"); // } }
前端页面
i18n
- login.properties
login.tip=请登录 login.btn=登录 login.password=密码 login.remeber=记住我 login.username=用户名
- login_en_US.properties
login.tip=Please sign in login.btn=Sign in login.password=Password login.remember=Remeber me login.username=Username
- login_zh_CN.properties
login.tip=请登录 login.btn=登录 login.password=密码 login.remember=记住我 login.username=用户名
templates 页面 main
index.html
<body class="text-center"> <form class="form-signin" th:action="@{/user/login}"> <img class="mb-4" th:src="@{/img/bootstrap-solid.svg}" alt="" width="72" height="72"> <h1 class="h3 mb-3 font-weight-normal" th:text="#{login.tip}">Please sign in</h1> <!--如果msg为空,则不显示消息--> <p style="color: red" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}"></p> <label class="sr-only">Username</label> <input type="text" name="username" class="form-control" th:placeholder="#{login.username}" required="" autofocus=""> <label class="sr-only">Password</label> <input type="password" name="password" class="form-control" th:placeholder="#{login.password}" required=""> <div class="checkbox mb-3"> <label> <input type="checkbox" value="remember-me"> [[#{login.remember}]] </label> </div> <button class="btn btn-lg btn-primary btn-block" type="submit"> [[#{login.btn}]] </button> <p class="mt-5 mb-3 text-muted">© 2020-2030 </p> <a class="btn btn-sm" th:href="@{/index.html(l='zh_CN')}">中文</a> <a class="btn btn-sm" th:href="@{/index.html(l='en_US')}">English</a> </form> </body>
emp
- add.html
<main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4"> <form th:action="@{/emp}" method="post"> <div class="form-group"> <label>LastName</label> <input type="text" name="lastName" class="form-control" placeholder="海绵宝宝"> </div> <div class="form-group"> <label>Email</label> <input type="email" name="email" class="form-control" placeholder="1176244270@qq.com"> </div> <div class="form-group"> <label>Gender</label><br> <div class="form-check form-check-inline"> <input class="form-check-input" type="radio" name="gender" value="1"> <label class="form-check-label">男</label> </div> <div class="form-check form-check-inline"> <input class="form-check-input" type="radio" name="gender" value="0"> <label class="form-check-label">女</label> </div> </div> <div class="form-group"> <label>department</label> <select class="form-control" name="departmentId"> <option th:each="department:${departments}" th:text="${department.getDepartmentName()}" th:value="${department.getId()}"></option> </select> </div> <div class="form-group"> <label>Birth</label> <input type="text" class="form-control" placeholder="2019-1-1" name="birth"> </div> <button type="submit" class="btn btn-primary">添加</button> </form> </main>
- list.html
<main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4"> <h2><a class="btn btn-sm btn-success" th:href="@{/emp}">添加员工</a> </h2> <div class="table-responsive"> <table class="table table-striped table-sm"> <thead> <tr> <th>id</th> <th>lastName</th> <th>email</th> <th>gender</th> <th>department</th> <th>birth</th> <th>操作</th> </tr> </thead> <tbody> <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="${departmentDao.getDepartmentById(emp.getDepartmentId()).getDepartmentName()}"> </td> <td th:text="${#dates.format(emp.getBirth(),'yyyy-MM-dd HH:mm:ss')}"></td> <td> <a class="btn btn-sm btn-primary" th:href="@{/emp/}+${emp.getId()}">编辑</a> <a class="btn btn-sm btn-danger" th:href="@{/delEmp/}+${emp.getId()}">删除</a> </td> </tr> </tbody> </table> </div> </main>
- update.html
<main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4"> <form th:action="@{/updateEmp}" method="post"> <input type="hidden" name="id" th:value="${employee.getId()}"> <div class="form-group"> <label>lastName</label> <input th:value="${employee.getLastName()}" type="text" name="lastName" class="form-control" placeholder="海绵宝宝"> </div> <div class="form-group"> <label>Email</label> <input th:value="${employee.getEmail()}" type="email" name="email" class="form-control" placeholder="1176244270@qq.com"> </div> <div class="form-group"> <label>Gender</label><br> <div class="form-check form-check-inline"> <input th:checked="${employee.getGender() == 1}" class="form-check-input" type="radio" name="gender" value="1"> <label class="form-check-label">男</label> </div> <div class="form-check form-check-inline"> <input th:checked="${employee.getGender() == 0}" class="form-check-input" type="radio" name="gender" value="0"> <label class="form-check-label">女</label> </div> </div> <div class="form-group"> <label>department</label> <select class="form-control" name="departmentId"> <option th:each="department:${departments}" th:selected="${department.getId() == employee.getDepartmentId()}" th:text="${department.getDepartmentName()}" th:value="${department.getId()}"></option> </select> </div> <div class="form-group"> <label>Birth</label> <input th:value="${#dates.format(employee.getBirth(),'yyyy-MM-dd')}" type="text" class="form-control" placeholder="2019-1-1" name="birth"> </div> <button type="submit" class="btn btn-primary">保存</button> </form> </main>