一、开发环境:

1、windows 7 企业版

2、IDEA 14

3、JDK 1.8

4、Maven 3.5.2

5、MariaDB

6、SQLYog

二、Maven设置:

Maven目录下的conf目录下的settings.xml做如下内容的添加:

1、使用阿里云的仓库,比官网访问速度快很多

 <mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

2、全局JDK配置

 <!-- 全局jdk配置,settings.xml -->
<profile>
<id>jdk18</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>

三、IDEA基本设置:

1、Maven设置:选择Maven目录,同时配置文件和本地仓库

2、字符编码设置

四、使用IDEA创建Maven工程:

选择Enable Auto-Import,创建好的工程目录如下图:

五、体验SpringBoot结合JPA的快速开发吧

1、pom.xml

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>cn.temptation</groupId>
<artifactId>studySpringBoot</artifactId>
<version>1.0-SNAPSHOT</version> <!-- 使用spring boot的默认设置 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent> <dependencies>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- 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>
</dependencies>
</project>

2、resources目录下新建application.properties(当然喜欢用yaml的可以用yaml)

 # 数据库连接
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test
spring.datasource.username=root
spring.datasource.password=sa
spring.datasource.driver-class-name=com.mysql.jdbc.Driver # JPA配置
spring.jpa.properties.hibernate.hbm2ddl.auto=update

3、创建SpringBoot程序启动类SpringbootApplication.java

 package cn.temptation;

 import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class SpringbootApplication {
public static void main(String[] args) {
// SpringBoot项目启动
SpringApplication.run(SpringbootApplication.class, args);
}
}

4、创建实体类Category.java

 package cn.temptation.model;

 import javax.persistence.*;

 // 建库建表
//DROP TABLE category;
//
//CREATE TABLE category
//(
// categoryid INT AUTO_INCREMENT PRIMARY KEY,
// categoryname VARCHAR(10) NOT NULL
//);
//
//INSERT INTO category VALUES(NULL, '手机'), (NULL, '图书'), (NULL, '服装'), (NULL, '鞋帽');
//
//SELECT * FROM category;
@Entity
@Table(name = "category")
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "categoryid")
private Integer categoryid; @Column(name = "categoryname")
private String categoryname; public Integer getCategoryid() {
return categoryid;
} public void setCategoryid(Integer categoryid) {
this.categoryid = categoryid;
} public String getCategoryname() {
return categoryname;
} public void setCategoryname(String categoryname) {
this.categoryname = categoryname;
}
}

5、创建DAO接口CategoryDao.java

 package cn.temptation.dao;

 import cn.temptation.model.Category;
import org.springframework.data.jpa.repository.JpaRepository; public interface CategoryDao extends JpaRepository<Category, Integer> { }

6、创建控制器类CategoryController.java

 package cn.temptation.web;

 import cn.temptation.dao.CategoryDao;
import cn.temptation.model.Category;
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.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView; import java.util.List; @Controller
public class CategoryController {
@Autowired
private CategoryDao categoryDao; /**
* 不分页查询
*
* @return
*/
// @RequestMapping("/categorylist")
// public ModelAndView categorylist() {
// List<Category> list = categoryDao.findAll();
//
// ModelAndView mav = new ModelAndView("categorylist");
// mav.addObject("list", list);
// return mav;
// } /**
* 分页查询
*
* @return
*/
@RequestMapping("/categorylist")
public ModelAndView categorylist(@RequestParam(value = "start", defaultValue = "0") Integer start,
@RequestParam(value = "limit", defaultValue = "2") Integer limit) {
start = start < 0 ? 0 : start; Sort sort = new Sort(Sort.DEFAULT_DIRECTION, "categoryid");
Pageable pageable = new PageRequest(start, limit, sort);
Page<Category> page = categoryDao.findAll(pageable); // System.out.println(page.getNumber());
// System.out.println(page.getNumberOfElements());
// System.out.println(page.getSize());
// System.out.println(page.getTotalElements());
// System.out.println(page.getTotalPages());
// System.out.println(page.isFirst());
// System.out.println(page.isLast()); ModelAndView mav = new ModelAndView("categorylist");
mav.addObject("page", page);
return mav;
} /**
* 类别新增视图
* @return
*/
@RequestMapping("/categoryinit")
public String categoryinit() {
return "categoryinit";
} /**
* 类别新增操作
* @param model
* @return
*/
@RequestMapping("/categoryinsert")
public String categoryinsert(Category model) {
categoryDao.save(model);
return "redirect:categorylist";
} /**
* 类别删除操作
* @param categoryid
* @return
*/
@RequestMapping("/categorydelete")
public String categorydelete(Integer categoryid) {
categoryDao.deleteById(categoryid);
return "redirect:categorylist";
} /**
* 类别编辑视图
* @param categoryid
* @return
*/
@RequestMapping("/categoryedit")
public ModelAndView categoryedit(Integer categoryid) {
Category model = categoryDao.getOne(categoryid); ModelAndView mav = new ModelAndView("categoryedit");
mav.addObject("category", model);
return mav;
} /**
* 类别编辑操作
* @param model
* @return
*/
@RequestMapping("/categoryupdate")
public String categoryupdate(Category model) {
categoryDao.save(model);
return "redirect:categorylist";
}
}

7、resources目录下新建templates目录,创建表现层:类别列表页面(categorylist.html)、类别新增页面(categoryinit.html)、类别编辑页面(categoryedit.html)

类别列表页面(categorylist.html)

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>类别列表</title>
<style>
table, th, td {
border: 1px solid green;
border-collapse: collapse;
}
</style>
</head>
<body>
<a th:href="@{/categoryinit}">新增</a>
<table>
<tr>
<th>类别编号</th>
<th>类别名称</th>
<th>操&nbsp;&nbsp;作</th>
</tr>
<!--不分页遍历-->
<!--<tr th:each="item : ${list}">-->
<!--分页遍历-->
<tr th:each="item : ${page.content}">
<td th:text="${item.categoryid}">类别编号</td>
<td th:text="${item.categoryname}">类别名称</td>
<td>
<a th:href="@{/categoryedit(categoryid=${item.categoryid})}">编辑</a>&nbsp;&nbsp;
<a th:href="@{/categorydelete(categoryid=${item.categoryid})}">删除</a>
</td>
</tr>
</table>
<div>
<a th:href="@{/categorylist(start=0)}">[首页]</a>&nbsp;&nbsp;
<a th:if="${not page.isFirst()}" th:href="@{/categorylist(start=${page.number-1})}">[上页]</a>&nbsp;&nbsp;
<a th:if="${not page.isLast()}" th:href="@{/categorylist(start=${page.number+1})}">[下页]</a>&nbsp;&nbsp;
<a th:href="@{/categorylist(start=${page.totalPages-1})}">[末页]</a>
</div>
</body>
</html>

类别新增页面(categoryinit.html)

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>类别新增</title>
</head>
<body>
<form action="categoryinsert" method="post">
<label for="txtCategoryname">类别名称:</label>
<input type="text" id="txtCategoryname" name="categoryname" /><br/>
<input type="submit" value="提交">
</form>
</body>
</html>

类别编辑页面(categoryedit.html)

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>类别编辑</title>
</head>
<body>
<form action="categoryupdate" method="post">
<input type="hidden" id="txtCategoryid" name="categoryid" th:field="${category.categoryid}"/><br/>
<label for="txtCategoryname">类别名称:</label>
<input type="text" id="txtCategoryname" name="categoryname" th:field="${category.categoryname}"/><br/>
<input type="submit" value="提交">
</form>
</body>
</html>

六、启动项目,运行效果如下

【原】无脑操作:IDEA + maven + SpringBoot + JPA + Thymeleaf实现CRUD及分页的更多相关文章

  1. 【原】无脑操作:IDEA + maven + SpringBoot + JPA + EasyUI实现CRUD及分页

    背景:上一篇文章的界面太丑.没有条件查询功能.所以做一些改进,整合EasyUI做实现.(仅以此文纪念表格中出现的这些朋友工作六周年,祭奠一下逝去的青春^_^) 一.开发环境(参照上一篇文章) 补充:E ...

  2. 【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限

    开发环境搭建参见<[原]无脑操作:IDEA + maven + SpringBoot + JPA + Thymeleaf实现CRUD及分页> 需求: ① 除了登录页面,在地址栏直接访问其他 ...

  3. 【原】无脑操作:EasyUI Tree实现左键只选择叶子节点、右键浮动菜单实现增删改

    Easyui中的Tree组件使用频率颇高,经常遇到的需求如下: 1.在树形结构上,只有叶子节点才能被选中,其他节点不能被选中: 2.在叶子节点上右键出现浮动菜单实现新增.删除.修改操作: 3.在非叶子 ...

  4. 【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础授权权限

    上一篇<[原]无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限>介绍了实现Shiro的基础认证.本篇谈谈实现 ...

  5. 【原】无脑操作:express + MySQL 实现CRUD

    基于node.js的web开发框架express简单方便,很多项目中都在使用.这里结合MySQL数据库,实现最简单的CRUD操作. 开发环境: IDE:WebStorm DB:MySQL ------ ...

  6. 【原】无脑操作:eclipse + maven搭建SSM框架

    网上看到一些Spring + Spring MVC + MyBatis框架的搭建教程,不是很详细或是时间久远了,自己动手整一个简单无脑的! 0.系统环境 1)Windows 10 企业版 2)JDK ...

  7. 【原】无脑操作:ElasticSearch学习笔记(01)

    开篇来自于经典的“保安的哲学三问”(你是谁,在哪儿,要干嘛) 问题一.ElasticSearch是什么?有什么用处? 答:截至2018年12月28日,从ElasticSearch官网(https:// ...

  8. IDEA上创建 Maven SpringBoot+mybatisplus+thymeleaf 项目

    概述 在WEB领域,Java也是在不断的探索和改进,从开始的JSP--->Struts1--->Struts2+Spring--->Spring MVC--->SpringBo ...

  9. Springboot+JPA+Thymeleaf 校园博客完整小网站

    本文所属[知识林]:http://www.zslin.com/web/article/detail/35 此项目是一个比较简易的校园博客.麻雀虽小五脏俱全,虽然是比较简易的但是涉及的知识点还是比较全面 ...

随机推荐

  1. 看雪.TSRC 2017CTF秋季赛第三题

    看雪.TSRC 2017CTF秋季赛第三题 wp 这是一道很简单的题,反调试的坑略多.这道题采用了很多常用的反调试手段,比如调用IsDebuggerPresent.进程名检查等等.另外也有利用SEH的 ...

  2. ABP官方文档翻译 3.7 领域事件(事件总线)

    领域事件(事件总线) 事件总线 注入IEventBus 获取默认实例 定义事件 预定义事件 处理异常 实体更改 触发事件 处理事件 处理基础事件 处理者异常 处理多个事件 注册处理者 自动 手动 取消 ...

  3. Mybatis异常There is no getter for property named 'XXX' in 'class com.xxx.xxx.UserAccountDTO

    mybatis报错异常信息如下: 解决: 在接口中加上注解:@Param("userAccountDTO"),如图

  4. 《EntrePreneur》发刊词

    I do not choose to be a common person. It is my right to be uncommon - if I can. I seek opportunity ...

  5. POJ1269 Intersecting Lines[线段相交 交点]

    Intersecting Lines Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 15145   Accepted: 66 ...

  6. Effective Java 第三版——32.合理地结合泛型和可变参数

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  7. 一个Dotnet数据框架的bug

    好久没写C#代码了,今天在维护公司老项目时,偶然发现一个BUG.记录一下,后面的同学就不要踩坑啦. -------------------------------------------------- ...

  8. Ansible进阶--playbook的使用

    一.什么是playbooksplaybooks是ansible的脚本.如同shell脚本一样,它是控制远程主机的一系列命令的集合,通过YAML语言编写.执行一些简单的任务,我们可以使用ad-hoc命令 ...

  9. zend framework框架学习走起——从零开始,点击记录-安装

    zend framework第一步,先来安装下zend framework框架. 先介绍下,我这边的php配置环境,为图省事,我是安装wampserver来搭载php环境的,,php+Apache+m ...

  10. javascript 数字字母组合的随机数

    Math.random()方法用于生成,结果为0-1间的一个伪随机数(包括0,不包括1) ,通常的办法是结合parseInt().Math.floor() 或者 Math.ceil()进行四舍五入处理 ...