package com.youngpeng.blog.entity;
import lombok.Data;
import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.util.Date;
@Entity
@Data
@DynamicUpdate
public class User {
@Id
private String id;
private String name;
private String email;
// @DynamicUpdate 针对时间自动更新而言
private Date createTime;
private Date updateTime;
// 构造函数
public User() {
}
public User(String id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
}
package com.youngpeng.blog.repository;
import com.youngpeng.blog.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* 增删改查的接口,一般别写
*/
public interface UserRepository extends JpaRepository {
}
package com.youngpeng.blog.service;
import com.youngpeng.blog.entity.User;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
public interface UserService {
User save(User user);
void deleteById(String id);
User findOne(String id);
Page findAll(Pageable pageable);
}
package com.youngpeng.blog.service.serviceImpl;
import com.youngpeng.blog.entity.User;
import com.youngpeng.blog.repository.UserRepository;
import com.youngpeng.blog.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public User save(User user) {
return userRepository.save(user);
}
@Override
public void deleteById(String id) {
userRepository.delete(id);
}
@Override
public User findOne(String id) {
return userRepository.findOne(id);
}
@Override
public Page findAll(Pageable pageable) {
// 1. 调用JPA分页查询的方法
Page userPage = userRepository.findAll(pageable);
// 2. 转换为list,
List userList = userPage.getContent();
// 3. 返回
// public PageImpl(List content, Pageable pageable, long total) {}
// public PageImpl(List content) {}
return new PageImpl<>(userList, pageable, userPage.getTotalElements());
}
}
package com.youngpeng.blog.controller;
import com.youngpeng.blog.entity.User;
import com.youngpeng.blog.form.CreateUser;
import com.youngpeng.blog.service.UserService;
import com.youngpeng.blog.utils.GeneraterKey;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("/user")
@Slf4j
public class UserController {
@Autowired
private UserService userService;
/**
* 以分页的形式显示用户列表信息
* 1. 接收参数page, size.
* 2. 初始化pagerequest,
* 3. 查询
* 4. 返回结果
*/
@GetMapping("/list")
public ModelAndView userlist(@RequestParam(value = "page" ,defaultValue = "1") int page,
@RequestParam(value = "size" ,defaultValue = "2") int size,
Map map){
// 初始化pagerequest
PageRequest pageRequest = new PageRequest(page-1, size);
// 调用service 层 的 page 接口查询
Page userPage = userService.findAll(pageRequest);
map.put("userPage", userPage);
map.put("currentPage",page);
map.put("size", size);
return new ModelAndView("/user/list", map);
}
/**创建一个空对象出来存储
* 1. 首先判断URL中有无ID号
* 2. 有 - 根据ID查询数据。 无 - 自动生成ID号赋值
* 3. 将前端传来的数据拷贝到对象中,无,显示空,有值- 则修改
*
* @param createUser
* @param bindingResult
* @param map
* @return
*/
@GetMapping("/create")
public ModelAndView create(@Valid CreateUser createUser,
BindingResult bindingResult,
Map map){
User userNew = new User();
//判断前端数据正误
if (bindingResult.hasErrors()){
map.put("msg", bindingResult.getFieldError().getDefaultMessage());
map.put("url", "/user/list");
return new ModelAndView("common/error",map);
}
// 判断有无ID号
if (StringUtils.isEmpty(createUser.getId() )){
// 新建 -- 设置id 号
userNew.setId(GeneraterKey.genUniqueKey());
}else {
// 修改 -- 查询出来显示
userNew = userService.findOne(createUser.getId());
}
// 下面是同一的拷贝
// createUser.setName(userNew.getName()); --- error 反了
try {
userNew.setName(createUser.getName());
userNew.setEmail(createUser.getEmail());
/**
* 这里更改之后千万别忘了保存到数据库
*/
userService.save(userNew);
}catch (Exception e){
// log.error("[注册、修改操作发生错误]{}",e);
map.put("msg", "[注册、修改操作发生错误]");
map.put("url", "/user/list");
return new ModelAndView("common/error",map);
}
map.put("user", userNew);
map.put("url", "/user/list");
return new ModelAndView("/common/success",map);
}
/**
* 新增和修改的页面都在这个页面进行单独操作
* @param id
* @param map
* @return
*/
@GetMapping("/index")
public ModelAndView index(@RequestParam(value = "id", required = false) String id,
Map map){
// 如果有id值传进来,就打包查询返回
User user = new User();
if ( !StringUtils.isEmpty(id) ){
user = userService.findOne(id);
}
map.put("userInfo", user);
return new ModelAndView("/user/index", map);
}
@GetMapping("/delete")
public ModelAndView delete(@RequestParam(value = "id") String id,
Map map){
try{
// 直接执行删除操作
userService.deleteById(id);
}catch (Exception e){
map.put("msg", "删除发生错误");
map.put("url", "/user/list");
return new ModelAndView("common/error",map);
}
map.put("msg", "删除成功");
map.put("url", "/user/list");
return new ModelAndView("common/success",map);
}
}
这里注意,list显示用户,但是单独的用户操作写在index页面中,细细评味其中逻辑
用户信息列表
<#--表格主体-->
<#--新增一个用户-->
<#-- 分页切换按钮-->
<#--主要内容-->
8. 友好提示页面 error 、 success
操作发生错误
<#--setTimeout(location.href="${url}",3000);-->