Maven工程搭建spring boot+spring mvc+JPA的示例

本文介绍了Maven工程搭建spring boot+spring mvc+JPA的示例,分享给大家,具体如下:

添加Spring boot支持,引入相关包:

1、maven工程,少不了pom.xml,spring boot的引入可参考官网:

 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>1.5.9.RELEASE</version>
 </parent>

 <dependencies>

 <dependency>
 <groupId>javax.servlet</groupId>
 <artifactId>javax.servlet-api</artifactId>
 <scope>provided</scope><!-- 编译需要而发布不需要的jar包 -->
 </dependency> 

 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-webmvc</artifactId>
 </dependency> 

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

 <!--jpa的jar包 ,操作数据库的-->
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-jpa</artifactId>
 </dependency>

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

 <!--mysql驱动-->
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 </dependency>
 <dependency>
 <groupId>org.apache.shiro</groupId>
 <artifactId>shiro-core</artifactId>
 <version>1.2.2</version>
 </dependency>
 <dependency>
 <groupId>org.apache.shiro</groupId>
 <artifactId>shiro-spring</artifactId>
 <version>1.2.2</version>
 </dependency>
 <!-- shiro ehcache -->
 <dependency>
 <groupId>org.apache.shiro</groupId>
 <artifactId>shiro-ehcache</artifactId>
 <version>1.2.2</version>
 </dependency>
 </dependencies>
 <build>

 <plugins>
 <plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 <executions>
 <execution>
 <goals>
 <goal>repackage</goal>
 </goals>
 </execution>
 </executions>
 </plugin>
 </plugins>
 <finalName>name</finalName>
 </build>

2、以上代码引入了spring boot。spring mvc 和jpa,以及mysql数据库的驱动jar;

编写启动类,并加装配置文件:

1、启动类如下:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import java.io.IOException;
import com.my.config.CommonProperties;
@SpringBootApplication
@EnableAutoConfiguration
@EnableJpaAuditing
public class Application {
 public static void main(String[] args) throws IOException{
 String loc = CommonProperties.loadProperties2System(System.getProperty("spring.config.location"));
 System.getProperties().setProperty("application.version", CommonProperties.getVersion(Application.class));
 System.getProperties().setProperty("app.home", loc + "/..");
 SpringApplication.run(Application.class, args);
 }
}

2、配置文件的位置放到classpath外边,方便在不重新打包的情况下修改,spring boot工程一般都打成jar包:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import org.springframework.util.StringUtils;

public final class CommonProperties {

 public static final String PPT_KEY_APP_HOME = "app.home";
 public static final String DEFAULT_APP_HOME = "./";

 public static final String getAppHome() {
 return System.getProperty("./", "./");
 }

 public static String loadProperties2System(String location) throws IOException {
 String configLocation = location;
 File cnf;
 if (!StringUtils.hasLength(location)) {
 configLocation = "./config";
 cnf = new File(configLocation);
 if (!cnf.exists() || !cnf.isDirectory()) {
 configLocation = "../config";
 cnf = new File(configLocation);
 }
 } else {
 cnf = new File(location);
 }

 File[] arg2 = cnf.listFiles();
 int arg3 = arg2.length;

 for (int arg4 = 0; arg4 < arg3; ++arg4) {
 File file = arg2[arg4];
 if (file.isFile() && file.getName().endsWith(".properties")) {
 Properties ppt = new Properties();
 FileInputStream fi = new FileInputStream(file);
 Throwable arg8 = null;

 try {
  ppt.load(fi);
  System.getProperties().putAll(ppt);
 } catch (Throwable arg17) {
  arg8 = arg17;
  throw arg17;
 } finally {
  if (fi != null) {
  if (arg8 != null) {
  try {
  fi.close();
  } catch (Throwable arg16) {
  arg8.addSuppressed(arg16);
  }
  } else {
  fi.close();
  }
  }

 }
 }
 }

 return configLocation;
 }

 public static String getVersion(Class<?> clazz) {
 Package pkg = clazz.getPackage();
 String ver = pkg != null ? pkg.getImplementationVersion() : "undefined";
 return ver == null ? "undefined" : ver;
 }

将配置文件放到jar包同级目录的config文件夹下,包括日志配置,application.yml文件,其他配置文件等;

编写自动配置类

用于扫描compan* ,代替spring mvc的spring.xml配置文件:

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = {
 "com.my.rs",
 "com.my.service",
 "com.my.repository"})
public class AppAutoConfiguration {

}

import org.springframework.boot.autoconfigure.web.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
 * 预配置
 * */
@Configuration
public class MyConfiguration extends WebMvcConfigurerAdapter{

 @Bean
 public HttpMessageConverters customConverters() {
 return new HttpMessageConverters();
 }

 @Override
 public void addResourceHandlers(ResourceHandlerRegistry registry) {
 //registry.addResourceHandler("/**")
 // .addResourceLocations("classpath:/META-INF/resources/**");
 }

编写rs,service,repository

package com.my.rs;
import java.util.List;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.my.entity.User;

@RequestMapping({"/api/user"})
public interface UserRS {

 @RequestMapping(value="/add",method={RequestMethod.POST})
 @ResponseBody
 public User saveUser(@RequestBody User user);

 @RequestMapping(value="/update",method={RequestMethod.POST})
 @ResponseBody
 public User updateUser(@RequestBody User user);

 @RequestMapping(value="/delete",method={RequestMethod.POST,RequestMethod.DELETE})
 public void deleteUser(@RequestParam String[] userIds);

 @RequestMapping(value="/get",method={RequestMethod.GET})
 @ResponseBody
 public User getUser(@RequestParam String userId);

 @RequestMapping(value="/query/all",method={RequestMethod.GET})
 public List<User> queryAll();

 @RequestMapping(value="/query/byName",method={RequestMethod.GET})
 public List<User> queryByName(@RequestParam String name);

 @RequestMapping(value="/query/byParentId",method={RequestMethod.GET})
 public List<User> queryChildren(@RequestParam String parentId);
 //无参数分页查询
 @RequestMapping(value="/query/page",method={RequestMethod.GET})
 public List<User> queryByPage(@RequestParam int pageNo,
 @RequestParam int pageSize,
 @RequestBody(required=false) User user);
}
package com.my.rs.impl;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import com.my.entity.User;
import com.my.rs.UserRS;
import com.my.service.UserService;

@RestController
public class UserRSImpl implements UserRS{

 public static Logger logger = LoggerFactory.getLogger(UserRSImpl.class);

 @Autowired
 UserService _userService;

 @Override
 public User saveUser(@RequestBody User user){
 try {
 return _userService.save(user);
 } catch (Throwable e) {
 logger.error(e.getMessage(),e);
 throw e;
 }
 }

 @Override
 public User updateUser(@RequestBody User user) {
 return _userService.update(user);
 }

 @Override
 public void deleteUser(String[] userIds) {
 for (String userId : userIds) {
 _userService.deleteById(userId);
 }
 }

 @Override
 public List<User> queryAll() {
 return _userService.queryAll();
 }

 @Override
 public List<User> queryByName(String name) {
 return _userService.findByName(name);
 }

 @Override
 public List<User> queryChildren(String parentId) {
 return _userService.findByParentId(parentId);
 }

 @Override
 public User getUser(String userId) {
 return _userService.findById(userId);
 }

 @Override
 public List<User> queryByPage(int pageNo, int pageSize, User user) {

 return null;
 }

}
package com.my.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.my.entity.User;
import com.my.repository.UserRepository;

@Service
public class UserService extends BaseService<User>{

 @Autowired
 UserRepository _userRepository;
 public List<User> findByName(String name){
 return _userRepository.findByName(name);
 }

 public List<User> findByParentId(String parentId){
 return _userRepository.findByParentId(parentId);
 }
}
package com.my.repository;
import java.util.List;
import com.my.entity.User;
public interface UserRepository extends BaseRepository<User>{
 List<User> findByName(String name);
 List<User> findByParentId(String parentId);
}

以上采用了分层模式,有点繁琐,但是对之后修改每层的业务逻辑比较方便

JPA相关的类如下:

package com.my.service;
import java.io.Serializable;
import javax.persistence.EntityManager;
import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import com.my.repository.BaseRepository;

/**
 * 一些共有的方法放这里
 * */
@Transactional
public class BaseService<E extends Serializable> {

 @Autowired
 BaseRepository<E> _baseRepository;

 @Autowired
 EntityManager em;

 public E save(E baseUnit){
 return _baseRepository.saveAndFlush(baseUnit);
 }

 public E update(E baseUnit){
 return _baseRepository.saveAndFlush(baseUnit);
 }

 public void deleteById(String id) {
 _baseRepository.delete(id);
 }

 public java.util.List<E> queryAll(){
 return _baseRepository.findAll();
 }

 public E findById(String id){
 return _baseRepository.getOne(id);
 }
}
package com.my.repository;
import java.io.Serializable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.NoRepositoryBean;
@NoRepositoryBean
public interface BaseRepository<E> extends JpaRepository<E, Serializable>{
}

实体类:与数据库字段相关,需要注意下父类中的注解@MappedSuperclass

package com.my.entity;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.ManyToMany;

import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.hibernate.validator.constraints.Email;

@Entity(name = "db_user")
@DynamicInsert
@DynamicUpdate
public class User extends BaseUnit {

 /**
 * 账户状态
 */
 public static enum AccountStatus {
 /**
 * 正常
 */
 Enable, //
 /**
 * 停用
 */
 Disable
 }

 private static final long serialVersionUID = -3101319619397064425L;
 private String password;
 private String salt;
 /** 账户状态 */
 private AccountStatus status;

 /** 认证邮箱 */
 @Email(message = "User.email属性必须符合邮箱格式")
 private String email;

 /** 移动电话号码 */
 private String mobileNo;

 /** 身份证号码 */
 private String cardId;

 @ManyToMany(targetEntity=Role.class)
 private List<String> roleIds;

 /** 昵称。可选。 */
 private String nickName;

 public String getCardId() {
 return cardId;
 }

 public String getEmail() {
 return email;
 }

 public String getMobileNo() {
 return mobileNo;
 }

 public String getNickName() {
 return nickName;
 }

 public String getPassword() {
 return password;
 }

 public List<String> getRoleIds() {
 if (roleIds == null) {
 roleIds = new ArrayList<>();
 }
 return roleIds;
 }

 public String getSalt() {
 return salt;
 }

 public AccountStatus getStatus() {
 return status;
 }

 public void setCardId(String cardId) {
 this.cardId = cardId;
 }

 public void setEmail(String email) {
 this.email = email;
 }

 public void setMobileNo(String mobileNo) {
 this.mobileNo = mobileNo;
 }

 public void setNickName(String nickName) {
 this.nickName = nickName;
 }

 public void setPassword(String password) {
 this.password = password;
 }

 public void setRoleIds(List<String> roleIds) {
 this.roleIds = roleIds;
 }

 public void setSalt(String salt) {
 this.salt = salt;
 }

 public void setStatus(AccountStatus status) {
 this.status = status;
 }
}
package com.my.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;

@MappedSuperclass
public class BaseUnit implements Serializable {

 @Id
 @NotNull
 public String id;
 /**
  * 父单元ID
  */
 @Size(max = 32, message = "BaseUnit.parentId属性长度不能大于32")
 public String parentId;

 /** 父单元的类型 */
 public ParentType parentType;

 /**
  * 单元的名称
  */
 @NotNull(message = "BaseUnit.name属性不能为空")
 public String name;

 @CreatedBy
 public String createBy;

 @CreatedDate
 public Date createDate;

 @LastModifiedBy
 public String lastModifiedBy;  

 /**
  * 最后更新日期
  */
 @LastModifiedDate
 public Date lastModifiedDate;

 public String getId() {
  return id;
 }

 public void setId(String id) {
  this.id = id;
 }

 /**
  * 获取单元的名称
  *
  * @return 必填
  */
 public String getName() {
  return name;
 }

 /**
  *
  *
  * @return UUID,不含{}和-
  */
 public String getParentId() {
  return parentId;
 }

 public ParentType getParentType() {
  return parentType;
 }

 public String getStationId() {
  return stationId;
 }

 public String getThumbnailId() {
  return thumbnailId;
 }

 public String getCreateBy() {
  return createBy;
 }

 public void setCreateBy(String createBy) {
  this.createBy = createBy;
 }

 public Date getCreateDate() {
  return createDate;
 }

 public void setCreateDate(Date createDate) {
  this.createDate = createDate;
 }
 /**
  * 设置单元的名称
  *
  * @param name
  *   必填
  */
 public void setName(String name) {
  this.name = name;
 }

 /**
  * 设置父单元ID
  *
  * @param parentId
  *   UUID,不含{}和-
  */
 public void setParentId(String parentId) {
  this.parentId = parentId;
 }

 public String getLastModifiedBy() {
  return lastModifiedBy;
 }

 public void setLastModifiedBy(String lastModifiedBy) {
  this.lastModifiedBy = lastModifiedBy;
 }

 public Date getLastModifiedDate() {
  return lastModifiedDate;
 }

 public void setLastModifiedDate(Date lastModifiedDate) {
  this.lastModifiedDate = lastModifiedDate;
 }
}

配置文件:

server:
 port: 16800
 contextPath: /

logging:
 config: ./config/logback.xml

spring:
 http:
 multipart:
  enabled: false
 datasource:
 url : jdbc:mysql://127.0.0.1:3306/db?useUnicode=true&characterEncoding=utf-8
 username : root
 password : 123456
 driverClassName : com.mysql.jdbc.Driver
 jpa:
 database : MYSQL
 show-sql : true
 hibernate:
  ddl-auto : update
 jackson:
 serialization:
  INDENT_OUTPUT : true
 #hibernate:配置了实体类维护数据库表结构的具体行为,update表示当实体类的属性发生变化时,表结构跟着更新,
这里我们也可以取值create,这个create表示启动的时候删除上一次生成的表,并根据实体类重新生成表,
这个时候之前表中的数据就会被清空;还可以取值create-drop,这个表示启动时根据实体类生成表,但是当sessionFactory关闭的时候表会被删除;
validate表示启动时验证实体类和数据表是否一致;none表示啥都不做。
#show-sql表示hibernate在操作的时候在控制台打印真实的sql语句
#jackson表示格式化输出的json字符串

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • SpringMVC中使用Thymeleaf模板引擎实例代码
  • 浅谈SpringMVC对RESTfull的支持
  • 解决SpringMvc后台接收json数据中文乱码问题的几种方法
  • springMVC自定义注解,用AOP来实现日志记录的方法
  • 详解快速搭建Spring Boot+Spring MVC
  • SpringMVC返回图片的几种方式(小结)
  • SpringMVC文件上传及查看的示例代码
  • spring mvc路径匹配原则详解
(0)

相关推荐

  • SpringMVC中使用Thymeleaf模板引擎实例代码

    本文研究的主要是SpringMVC中使用Thymeleaf模板引擎的相关内容,具体介绍如下. Thymeleaf提供了一组Spring集成,允许您将其用作Spring MVC应用程序中全面替代JSP的功能. Maven依赖 <!-- thymeleaf-spring4 --> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring4</artifa

  • SpringMVC文件上传及查看的示例代码

    写在前面 谈到文件上传,首先要说业务逻辑,如果上传的文件大家都可以看(比如广告或者首页的banner)等,那么我们就把图片放在静态资源区(与css,js一样的位置)中,如果文件是受保护的(像用户只能查看自己上传的照片),那么我们就把它存放在服务器中的某个专门存放图片的位置. 本例分别展示了存放在两个位置的上传文件的方法,上传之后,作为延伸,还添加了查看上传的文件以及下载已经上传的文件的功能. 准备工作 配置SpringMVC,导入commons包 在mvc-servlet.xml中配置文件上传解

  • springMVC自定义注解,用AOP来实现日志记录的方法

    需求背景 最近的一个项目,在项目基本完工的阶段,客户提出要将所有业务操作的日志记录到数据库中,并且要提取一些业务的关键信息(比如交易单号)体现在日志中. 为了保证工期,在查阅了资料以后,决定用AOP+自定义注解的方式来完成这个需求. 准备工作 自定义注解需要依赖的jar包有 aspectjrt-XXX.jar ,aspectjweaver-XXX.jar,XXX代表版本号. 自定义注解 在项目下单独建立了一个log包,来存放日志相关的内容 **.common.log.annotation //自

  • 解决SpringMvc后台接收json数据中文乱码问题的几种方法

    1.使用ajax从前台页面传输数据到后台controller控制器的时候,出现中文乱码(问号???). 之前在网上找了各种解决方案,都行不通,最后发现是tomcat服务器接收数据的问题 解决方案: 方式一:在controller接收参数时,对参数进行转码 @ResponseBody @RequestMapping(value="/getJsonDataByCityName",produces="application/json") public String get

  • spring mvc路径匹配原则详解

    在Spring MVC中经常要用到拦截器,在配置需要要拦截的路径时经常用到<mvc:mapping/>子标签,其有一个path属性,它就是用来指定需要拦截的路径的.例如: <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="com.i360r.platform.webapp.runtime.view.interceptor.GenericInterceptor"

  • SpringMVC返回图片的几种方式(小结)

    后端提供服务,通常返回的json串,但是某些场景下可能需要直接返回二进制流,如一个图片编辑接口,希望直接将图片流返回给前端,此时可以怎么处理? I. 返回二进制图片 主要借助的是 HttpServletResponse这个对象,实现case如下 @RequestMapping(value = {"/img/render"}, method = {RequestMethod.GET, RequestMethod.POST, RequestMethod.OPTIONS}) @CrossOr

  • 浅谈SpringMVC对RESTfull的支持

    本文研究的主要是SpringMVC对RESTfull的支持的相关内容,具体如下. RESTful架构,就是目前流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用.RESTful架构对url进行规范,写RESTful格式的url是什么样子的呢?我们一般请求的url是类似这样子的: http://...../xxx.action?id=001&type=aaa 而REST的url风格是什么样子呢?一般它类似于: http://..../xxx/001 所

  • 详解快速搭建Spring Boot+Spring MVC

    Spring Boot的出现大大简化了Spring项目的初始搭建和开发过程,今天我们快速搭建一个带有页面渲染(themeleaf模板引擎)的Spring Boot环境. 一.首先我们在IDEA中创建一个Maven项目 勾选create from archetype,选择webapp 二.在pom文件中添加Spring Boot依赖和themeleaf依赖 <dependency> <groupId>org.springframework.boot</groupId> &

  • Maven工程搭建spring boot+spring mvc+JPA的示例

    本文介绍了Maven工程搭建spring boot+spring mvc+JPA的示例,分享给大家,具体如下: 添加Spring boot支持,引入相关包: 1.maven工程,少不了pom.xml,spring boot的引入可参考官网: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId>

  • 详解在Spring Boot中使用JPA

    前面关于spring Boot的文章已经介绍了很多了,但是一直都没有涉及到数据库的操作问题,数据库操作当然也是我们在开发中无法回避的问题,那么今天我们就来看看Spring Boot给我们提供了哪些疯狂的方式来解决数据库的操作问题. OK,废话不多说,让我们愉快的开启今天的数据库操作之旅吧! 什么是JPA 一说JavaWeb,很多小伙伴都知道SSH,这个H代表的就是hibernate框架,这个小伙伴们都知道,可是什么又是JPA呢?相信许多刚入门的小伙伴听说过但不是特别清楚,首先JPA的全称叫做Ja

  • Spring Boot 通过 Mvc 扩展方便进行货币单位转换的代码详解

    由于公司是支付平台,所以很多项目都涉及到金额,业务方转递过来的金额是单位是元,而我们数据库保存的金额单位是分.一般金额的流向有以下几个方向: 外部业务方请求我们服务,传递过来的金额单位是元,需要把元转换成分.比如:下单接口. 内部系统之间的流转,不管是向下传递还是向上传递系统间的流程都是分,不需要扭转.比如:调用支付引擎(向下传递),支付引擎回调收单业务(向上传递). 向业务方返回数据,这个时候需要把分转换成元.比如:商户调用查询订单接口. 内部系统的展示,这个时候需要把分转换成元.比如:显示收

  • 在Eclipse中部署Spring Boot/Spring Cloud应用到阿里云

    Spring Cloud 和 Spring Boot 可以说是当前最流行的微服务开发框架了,在本文中,将向读者介绍如何在 在 Eclipse 中部署 Spring Boot / Spring Cloud 应用到阿里云. 本地开发 无论是编写云端运行的,还是编写本地运行的 Spring Boot 应用程序,代码编写本身并没有特别大的变化,因此本文采用一个极其基础的样例<在 Web 页面打印 HelloWorld 的 Spring Boot >为例,通过启动内置的 Tomcat 容器,处理 HTT

  • Spring Boot整合QueryDSL的实现示例

    之前研究Jooq,今天来研究一下搭配JPA的QueryDSL吧. 简介 Querydsl是一个Java开源框架用于构建类型安全的SQL查询语句.它采用API代替拼凑字符串来构造查询语句.可跟 Hibernate 和 JPA 等框架结合使用. 新建Spring Boot项目 ...还说啥? 1. pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <

  • spring boot+spring cache实现两级缓存(redis+caffeine)

    spring boot中集成了spring cache,并有多种缓存方式的实现,如:Redis.Caffeine.JCache.EhCache等等.但如果只用一种缓存,要么会有较大的网络消耗(如Redis),要么就是内存占用太大(如Caffeine这种应用内存缓存).在很多场景下,可以结合起来实现一.二级缓存的方式,能够很大程度提高应用的处理效率. 内容说明: 缓存.两级缓存 spring cache:主要包含spring cache定义的接口方法说明和注解中的属性说明 spring boot

  • Spring Boot 的创建和运行示例代码详解

    目录 1.什么是Spring Boot 2.Spring Boot 优点 3. Spring Boot 项目创建 3.1 使用 Idea 社区版创建 4.项目目录介绍和运行 4.1 运行项目 点击启动类的 main ⽅法就可以运⾏ Spring Boot 项⽬了 4.2 验证项目是否成功 5. 注意事项:包路径错误 5.1 正确路径 6. Spring Boot 热部署(热加载) 6.1 添加框架⽀持  在 pom.xml 中添加如下框架引⽤: 6.2 开启项目自动编译 6.3 开启运⾏中热部署

  • Spring Boot结合ECharts案例演示示例

    目录 一.提出任务 二.完成任务 (一)创建数据库与表 (二)创建Spring Boot项目 (三)创建班级实体类 (四)创建班级映射器接口 (五)创建班级映射器配置文件 (六)创建班级服务类 (七)创建班级控制器 (八)添加ECharts和jQuery脚本 (九)添加Druid起步依赖 (十)修改应用属性文件 (十一)创建页面可视化数据 (十二)启动应用,查看结果 一.提出任务 后端利用Spring Boot查询班级表数据,前端利用ECharts绘制各班人数柱形图. (一)班级数据 编号 班级

  • Spring Boot企业常用的starter示例详解

    SpringBoot简介# Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者. Spring Boot让我们的Spring应用变的更轻量化.比如:你可以仅仅依靠一个Java类来运行一个Spring引用.你也可以打包你的应用为

随机推荐