JPA+Thymeleaf增删改查

1.创建项目

利用IDEA工具创建项目,选择相关依赖

修改pox.xml文件,并添加依赖 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>3.3.2</version>
</dependency>

<dependency>
    <groupId>nz.net.ultraq.thymeleaf</groupId>
    <artifactId>thymeleaf-layout-dialect</artifactId>
    <version>3.0.0</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

1.2.配置文件

spring:
  #配置数据源
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/数据库?useUnicode=true&characterEncoding=utf-8
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSource #使用阿里巴巴Druid数据源

      #  #Themeleaf模板引擎配置
  thymeleaf:
    cache: true #关闭缓存,方便调试(默认为:true)
    encoding: UTF-8 #设置编码
    mode: HTML5 #设置thymeleaf的模式
    prefix: classpath:/templates/ #设置模板的路径
    suffix: .html #设置模板的格式
    check-template: true #在开发时,热部署会监视模板变化,默认为true
    check-template-location: true #检查模板路径,默认为true
    template-resolver-order: 1 #配置模板解析器的优先级,默认为1

2.模型开发

模型开发包括entity、repository、service

2.1entity

实体类包括User,Role,使用注解配置映射,且配置好关联关系:

User实体类:

@TableName("sys_user")
@Data
public class User implements Serializable {

  @TableField("usr_id")
  @TableId(type = IdType.AUTO)
  private Integer usrId;
  private String usrName;
  private String usrPassword;
  private Integer usrRoleId;
  private Integer usrFlag;
//  @TableField(exist = false)
//  private String roleName;
  @TableField(exist = false)
  private Role role; // 角色信息

  public User() {

  }
  public User(String usrName, String usrPassword, int role, Integer usrFlag) {
    this.usrName = usrName;
    this.usrPassword = usrPassword;
    this.role = role;
    this.usrFlag = usrFlag;
  }

  public User get() {
    return new User();
  }
}

Role实体类:

@TableName("sys_role")
@Data
public class Role implements Serializable {

  @TableId(value = "role_id",type = IdType.AUTO)
  @TableField("role_id")
  private Integer roleId;
  @TableField("role_name")
  private String roleName;
  @TableField("role_desc")
  private String roleDesc;
  @TableField("role_flag")
  private Integer roleFlag;

//  @OneToMany(targetEntity = User.class,fetch = FetchType.EAGER,cascade = CascadeType.REMOVE,mappedBy = "role")
//  private Set<User> users=new HashSet<>();

  public Role() {

  }
  public Role(String roleName, String roleDesc, Integer roleFlag) {
    this.roleName = roleName;
    this.roleDesc = roleDesc;
    this.roleFlag = roleFlag;
  }
}

2.2repository

repository需要提供实体相应的接口,继承JpaRepository接口即可,如果有特殊的操作,则可适当添加对应的方法。

public interface UserMapper extends JpaRepository<User, Long>,JpaSpecificationExecutor<User>{
   public List<User> findByUsrNameAndUsrPassword(String usrName,String usrpassword);
}

public interface RoleMapper extends JpaRepository<Role, Long>{}

UserMapper除继承JpaRepository外,还继承了JpaSpecificationExecutor,用于复杂查询,具体操作在service中实现。

2.3service

service层分别使用IUserService和IRoleService

public interface UserService extends IService<User> {
    User login(String username, String password);
    int addUser(User user);
    int updateUser(User user);
    int deleteUser(int id);

    @Cacheable(value="user", keyGenerator = "keyGenerator")
    public User getUser(Long usrId);
    User getUserById(int id);
    List<User> findAllUsers();
    List<User> selectUserList();

    List<User> selectUsersPage(Integer roleId, String usrName, Integer pageNum, Integer pageSize);





public interface RoleService extends IService<Role> {
}

3.实现增删改查

1.新增

    @GetMapping("/add")
    public String addUser(Model model){
        List<Role> roles=roleService.list();
        model.addAttribute("roles",roles);
        return "/user/add";
    }
    @PostMapping("/save")
    public String saveUser(User user){
        int i = userService.addUser(user);
        if(i>0){
            return "redirect:/user/list";
        }
        return "/user/add";
    }

2.修改

 @GetMapping("/edit")
    public String updateUser(Model model,Long usrId){
        List<Role> roles=roleService.list();
        User user = userService.getUserById(Math.toIntExact(usrId));
        model.addAttribute("roles",roles);
        model.addAttribute("user",user);
        return "/user/edit";
    }
    @PostMapping("/edit")
    public String editUser(User user){
        int i = userService.updateUser(user);
        if(i>0){
            return "redirect:/user/list";
        }
        return "/user/edit";
    }

3.删除

 @PostMapping("/del/{id}")
    @ResponseBody
    public String deleteUser(@PathVariable Integer id){
        if(id==null || id==0){
            return "false";
        }
        int count=userService.deleteUser(id);
        if(count==0){
            return "false";
        }else{
            return "true";
        }

在list.html页面实现增删脚本,通过ajax实现删除:

function doDel(obj, usrId) {
        if (confirm("你确定需要删除该用户信息吗?")) {
            $.ajax({
                type: "POST",
                url: ctxPath + "user/del/" + usrId,
                /*data: {
                 "usrId": usrId
                 },*/
                dataType: "text",
                success: function (data) {
                    // alert(JSON.stringify(data)); // {"result":"true"}
                    if (data === "true") { // 删除成功:移除删除行
                        alert("删除成功!");
                        $(obj).parents("tr").remove();
                        // window.location.href = project_name() + "/user/list";
                    }
                },
                error: function (data) {
                    alert("对不起,删除失败!");
                }
            });
        }
    }

4.查询

 @RequestMapping("/list")
    public String list(Model model,Integer roleId,String usrName,@RequestParam(defaultValue = "1") Integer pageIndex){
        List<Role> roles=roleService.list();
        QueryWrapper<User> qw=new QueryWrapper<>();
        if(usrName!=null && !"".equals(usrName)){
            qw.like("usr_name",usrName);
        }
        Page<User> userPage= new Page<>(pageIndex, Constants.USER_PAGE_SIZE);
        IPage<User> userPager = userService.page(userPage, qw);
        userPager.setRecords(userService.selectUsersPage(roleId, usrName, (pageIndex-1)*Constants.USER_PAGE_SIZE, Constants.USER_PAGE_SIZE));
        model.addAttribute("roleId",roleId);
        model.addAttribute("usrName",usrName);
        model.addAttribute("roles",roles);
        model.addAttribute("userPager",userPager);
        return "user/list";
    }

4.其他功能

4.1拦截器

@Configuration
public class IndexConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("forward:/login");
    }
}

4.2Ajax

  $(document).ready(function () {
        $.ajax({
            type: "GET",
            url: "${pageContext.request.contextPath}/role/json",
            dataType: "json",
            success: function (data) {
                $.each(data, function (i, tmp) {
                    $("#roleId").append(
                        "<option value='" + tmp.roleId + "'>" + tmp.roleName + "</option>");
                });
            },
            error: function (data) {
                alert("对不起,获取数据失败!");
            }
        });
    });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值