zoukankan      html  css  js  c++  java
  • springboot CRUD+分页(基于JPA规范)

    步骤一:JPA概念

      JPA(Java Persistence API)是Sun官方提出的Java持久化规范,用来方便大家操作数据库
      真正干活的可能是Hibernate,TopLink等等实现了JPA规范的不同厂商,默认是Hibernate。

    步骤二:创建数据库和表

      创建个分类表,字段很简单,就id和name。

    create database test01;
    use test01;
    CREATE TABLE category_ (
      id int(11) NOT NULL AUTO_INCREMENT,
      name varchar(30),
      PRIMARY KEY (id)
    ) DEFAULT CHARSET=UTF8;

    步骤三:准备数据

    insert into category_ values(null,'家具');
    insert into category_ values(null,'电器');
    insert into category_ values(null,'服装');
    insert into category_ values(null,'化妆品');

    步骤四:基于springboot入门小demo

      基于的springboot入门小demo,已包含了前面文章的知识点(比如:热部署、全局异常处理器)。

    步骤五:修改application.properties配置文件,连接数据库

      新增数据库链接必须的参数:spring.jpa.properties.hibernate.hbm2ddl.auto=update ;表示会自动更新表结构,所以创建表这一步其实是可以不需要的。

    spring.mvc.view.prefix=/WEB-INF/jsp/
    spring.mvc.view.suffix=.jsp
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test01?characterEncoding=UTF-8
    spring.datasource.username=root
    spring.datasource.password=root
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.jpa.properties.hibernate.hbm2ddl.auto=update

    步骤六:修改pom.xml文件

      增加对mysql和jpa的支持。

            <!-- mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.21</version>
            </dependency>
     
            <!-- jpa-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency> 

    步骤七:创建pojo类Category

      JPA通过JDK 注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中

      增加一个包:cn.xdf.springboot.pojo,然后创建实体类Category。
      @Entity 注解表示这是个实体类
      @Table(name = "category_") 表示这个类对应的表名是 category_ ,注意有下划线哦
      @Id 表明主键
      @GeneratedValue(strategy = GenerationType.IDENTITY) 表明自增长方式
      @Column(name = "id") 表明对应的数据库字段名

    package cn.xdf.springboot.pojo;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="category_")
    public class Category {
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @Column(name="id")
        private int id;
        @Column(name="name")
        private String name;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }

    步骤八:创建接口CategoryDao

      增加一个包:cn.xdf.springboot.dao,然后创建dao接口CategoryDao,继承了JpaRepository,并且提供泛型<Category,Integer> 表示这个是针对Category类的Dao,Integer表示主键是Integer类型。
      JpaRepository 这个父接口,就提供了CRUD, 分页等等一系列的查询了,直接拿来用,都不需要二次开发的了。

    package cn.xdf.springboot.dao;
    import org.springframework.data.jpa.repository.JpaRepository;
    import cn.xdf.springboot.pojo.Category;
    
    public interface CategoryDao extends JpaRepository<Category, Integer> {
    
    }

    步骤九:创建CategoryController

      增加一个包:cn.xdf.springboot.controller,然后创建CategoryController 类。
      1. 接受listCategory映射
      2. 然后获取所有的分类数据
      3. 接着放入Model中
      4. 跳转到listCategory.jsp中

    package cn.xdf.springboot.controller;
    import java.util.List;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.PageRequest;
    import org.springframework.data.domain.Pageable;
    import org.springframework.data.domain.Sort;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import cn.xdf.springboot.dao.CategoryDao;
    import cn.xdf.springboot.pojo.Category;
    
    @Controller
    public class CategoryController {
    
        @Autowired
        CategoryDao categoryDao;
    
    //    @RequestMapping("/listCategory")
    //    public String listCategory(Model m) throws Exception {
    //        List<Category> cs = categoryDao.findAll();
    //        m.addAttribute("cs", cs);
    //        return "listCategory";
    //    }
        @RequestMapping("/listCategory")   //查询所有分类
        public String listCategory(Model m,@RequestParam(value="start",defaultValue="0")int start,@RequestParam(value = "size", defaultValue = "5") int size) throws Exception {
            start = start < 0 ? 0:start;
            Sort sort = new Sort(Sort.Direction.DESC,"id"); //设置根据id倒序排列
            Pageable pageable = new PageRequest(start, size,sort); //根据start、size、sort创建分页对象
            Page<Category> page = categoryDao.findAll(pageable);    //根据这个分页对象获取分页对象
            
            System.out.println(page.getNumber());  //当前页start
            System.out.println(page.getNumberOfElements());  //当前页start
            System.out.println(page.getSize());   //每页数量size
            System.out.println(page.getTotalElements());  //总数量
            System.out.println(page.getTotalPages());    //总页数
            
            m.addAttribute("page", page);
            return "listCategory";
        }
        
        @RequestMapping("/addCategory")   //添加分类
        public String addCategory(Category c)throws Exception{
            categoryDao.save(c);
            return "redirect:listCategory";  //添加成功,重定向到分类查询页面
        }
        
        @RequestMapping("/deleteCategory")  //删除分类
        public String deleteCategory(Category c)throws Exception{
            categoryDao.delete(c);
            return "redirect:listCategory";  //删除成功,重定向到分类查询页面
        }
        
        @RequestMapping("/updateCategory")   //修改方法
        public String updateCategory(Category c)throws Exception{
            categoryDao.save(c); //CrudRepository:JPA 新增和修改用的都是save. 它根据实体类的id是否为0来判断是进行增加还是修改
            return "redirect:listCategory";  //修改成功,重定向到分类查询页面
        }
        
        @RequestMapping("/editCategory")     //获取方法(先走查询,再走修改)
        public String editCategory(int id ,Model m)throws Exception{
            Category c = categoryDao.findOne(id); //根据id查询
            m.addAttribute("c", c); //查到展示到修改页面
            return "editCategory";      }
        
    }

    步骤十:创建listCategory.jsp

      通过page.getContent遍历当前页面的Category对象。
      在分页的时候通过page.number获取当前页面,page.totalPages获取总页面数。
      注:page.getContent会返回一个泛型是Category的集合。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>    
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>分类展示列表</title>
    </head>
    <body>
    <!--     <table align="center" border="1" > -->
    <!--         <tr> -->
    <!--             <td>id</td> -->
    <!--             <td>name</td> -->
    <!--         </tr> -->
    <%--         <c:forEach items="${cs}" var="c" varStatus="st"> --%>
    <!--             <tr> -->
    <%--                 <td>${c.id}</td> --%>
    <%--                 <td>${c.name}</td> --%>
    <!--             </tr> -->
    <%--         </c:forEach> --%>
    <!--     </table> -->
    
    
    <div style="500px;margin:20px auto;text-align: center">
        <table align='center' border='1' cellspacing='0'>
            <tr>
                <td>id</td>
                <td>name</td>
                <td>编辑</td>
                <td>删除</td>
            </tr>
            <c:forEach items="${page.content}" var="c" varStatus="st">
                <tr>
                    <td>${c.id}</td>
                    <td>${c.name}</td>
                    <td><a href="editCategory?id=${c.id}">编辑</a></td>
                    <td><a href="deleteCategory?id=${c.id}">删除</a></td>
                </tr>
            </c:forEach>
             
        </table>
        <br>
        <div>
                    <a href="?start=0">[首  页]</a>  <!-- 这是相对路径的写法。 前面没有斜线就是相对当前路径加上这个地址。-->
                <c:if test="${page.number-1>-1}">
                    <a href="?start=${page.number-1}">[上一页]</a>
                </c:if>
                <c:if test="${page.number+1<page.totalPages}">
                    <a href="?start=${page.number+1}">[下一页]</a>
                </c:if>
                    <a href="?start=${page.totalPages-1}">[末  页]</a>
        </div>
        <br>
        <form action="addCategory" method="post">
            添加分类:
            name: <input name="name"> <br>
        <button type="submit">提交</button>
         
        </form>
    </div>
    </body>
    </html>

    步骤十一:创建editCategory.jsp

      修改分类的页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>修改分类的页面</title>
    </head>
    <body>
        <div style="margin:0px auto; 500px">
         
        <form action="updateCategory" method="post"> 
            name: <input name="name" value="${c.name}"> <br>
            <input name="id" type="hidden" value="${c.id}">
            <button type="submit">提交</button>
        </form>

      </div> </body> </html>

    步骤十二:测试

      访问测试地址:http://127.0.0.1:8080/listCategory

      效果图:

  • 相关阅读:
    linux 解压tgz 文件指令
    shell 脚本没有执行权限 报错 bash: ./myshell.sh: Permission denied
    linux 启动solr 报错 Your Max Processes Limit is currently 31202. It should be set to 65000 to avoid operational disruption.
    远程查询批量导入数据
    修改 MZTreeView 赋权节点父节点选中子节点自动选中的问题
    关于乱码的问题解决记录
    我的网站优化之路
    对设计及重构的一点反思
    我的五年岁月
    奔三的路上
  • 原文地址:https://www.cnblogs.com/zs-notes/p/9370378.html
Copyright © 2011-2022 走看看