亲自动手搭建微服务框架和测试环境-6-Spring Boot
1版本说明
GA= General Availability:正式发布版本,官方推荐使用此版本
RCx=Release Candidate:候选版本,即将成为正式发布版
SNAPSHOT: 快照版,可以稳定使用,但仍在继续改进
Mx=stands for milestone:里程碑版本,开发版本,并不稳定
1.x:最新发布版1.5.17 GA,发布日2018.10.16)
2.x:最新发布版为2.0.6GA,发布日2018.10.16)
版本依赖关系如下:
Spring boot 版本 | Spring Framework | jdk 版本 | maven 版本 |
1.2.0 版本之前 | 6 | 3 | |
1.2.0 | 4.1.3+ | 6 | 3.2+ |
1.2.1 | 4.1.3+ | 7 | 3.2+ |
1.2.3 | 4.1.5+ | 7 | 3.2+ |
1.3.4 | 4.2.6+ | 7 | 3.2+ |
1.3.6 | 4.2.7+ | 7 | 3.2+ |
1.3.7 | 4.2.7+ | 7 | 3.2+ |
1.3.8 | 4.2.8+ | 7 | 3.2+ |
1.4.0 | 4.3.2+ | 7 | 3.2+ |
1.4.1 | 4.3.3 | 7 | 3.2+ |
1.4.2 | 4.3.4 | 7 | 3.2+ |
1.4.3 | 4.3.5 | 7 | 3.2+ |
1.4.4 | 4.3.6 | 7 | 3.2+ |
1.4.5 | 4.3.7 | 7 | 3.2+ |
1.4.6 | 4.3.8 | 7 | 3.2+ |
1.4.7 | 4.3.9 | 7 | 3.2+ |
1.5.0 | 4.3.6 | 7 | 3.2+ |
1.5.2 | 4.3.7 | 7 | 3.2+ |
1.5.3 | 4.3.8 | 7 | 3.2+ |
1.5.4 | 4.3.9 | 7 | 3.2+ |
1.5.5 | 4.3.10 | 7 | 3.2+ |
1.5.7 | 4.3.11 | 7 | 3.2+ |
1.5.8 | 4.3.12 | 7 | 3.2+ |
1.5.9 | 4.3.13 | 7 | 3.2+ |
2.0.0 | 5.0.2 | 8 | 3.2+ |
2下载安装
Eclipse 4.8.0àHelpàEclipse MarketPlace…
选择PopularàSpring Tools 3 Add-on:
安装完后重启生效。
3依赖
1、Java 8或者9
2、Spring Framewok 5.0.10.RELEASE或者以上版本
3、构建采用maven3.2+或者gradle4.x
4、servlet容器采用tomcat8.5或者jetty9.4或者undertow1.4,servlet版本3.1
4源码
1、SpringBoot源码位置:
https://github.com/spring-projects/spring-boot
命令行编译可以少很多问题,进出现一次JDK问题(见7、maven的问题2),如下:
D:\eclipse\workspace\spring-boot\spring-boot-project\spring-boot> mvn clean install -Dmaven.test.skip=true
在eclipse中编译出现较多问题:
(1)Repository Path 'D:\eclipse\workspace\spring-boot\spring-boot-project\spring-boot-starters\spring-boot-starter\target\classes' does not exist.
Classes缺少,增加即可
(2)Repository Path ' D:\eclipse\workspace\spring-boot\spring-boot-project\spring-boot-starters\spring-boot-starter-logging\target\classes' does not exist.
Classes缺少,增加即可
(3)copy (include-loader-jar) on project spring-boot-loader-tools: Artifact has not been packaged yet. When used on reactor artifact, copy should be executed after packaging: see MDEP-187.
不怎么影响使用,把maven库的包删除(D:\maven-repository\org\apache\maven\plugins\ maven-dependency-plugin),重新下载即可
(4) test (default-test) on project spring-boot: There are test failures.
执行maven -install时需要测试代码,如果测试有错误,则报此错误,解决办法是:
在
另外一个办法是找到测试失败的原因,提示:sslWantsClientAuthenticationSucceedsWithoutClientCertificate(org.springframework.boot.web.embedded.tomcat.TomcatReactiveWebServerFactoryTests) Time elapsed: 0.022 s <<< ERROR!
java.lang.IllegalArgumentException: The location [C:\Users\ADMINI~1\AppData\Local\Temp\tomcat.14722600924658181848.0] specified for the base directory is not a directory
这个目录确实不存在了,手工新建一个。
如果在程序中新建,可以使用:
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation("C:\Users\ADMINI~1\AppData\Local\Temp\ tomcat.14722600924658181848.0");
return factory.createMultipartConfig();
}
只是在此处不适合。
(5)Failed to clean project: Failed to delete D:\eclipse\workspace\spring-boot\spring-boot-project\spring-boot-tools\target
进入这个目录提示:
退出eclipse(等eclipse进程退完全),这个目录已经消失,重新进eclipse错误就没有了。
同样的错误发生在spring-boot-configuration-processor等多个项目,还存在一种情况:在资源管理器中发现该目录正常,手工删除后解决(后来发现子目录有问题,无法进去)。
具体原因未知,可能和磁盘有关。
2、Spring Framework源码位置:
https://github.com/spring-projects/spring-framework
3、Spring Initializr源码位置:
https://github.com/spring-io/initializr
2.1.5配置
1、快速生成
快速创建一个SpringBoot项目可以使用Spring Initializr,有现成的,如下网址:
https://start.spring.io/
2、配置文件
先加载application.yml,再加载Application.properties,properties的配置会覆盖yml的配置,也就是说yml的配置优先级低。
(1)mongodb配置
spring.data.mongodb.uri=mongodb://edison:123@localhost:27017/education
Mongo 2.x使用:
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.username=edison
spring.data.mongodb.password=123
spring.data.mongodb.authentication-database=education
Mongo 3.0不支持:
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
(2)日志配置
#logging.pattern.console="%d - %msg%n"
logging.pattern.file='%d ***** %msg %n'
logging.path=d:/logs/
#logging.file='test.log'
最后一句无效,原因未知。
6启动
在eclipseànewàproject…中新建一个demo项目,如下:
点Next>后如下:
修改项目信息,继续点下一步后:
选择依赖后点下一步:
这是总结,点finish后自动生成项目,需要自动下载包,建议设置maven mirror到阿里云。
项目右键àdebug as…àmaven -build会先后出现两个问题,参见第7节maven问题1、问题2;可以直接项目右键à debug as…àSpring boot app启动,不会出现上面两个问题。
在浏览器chrome中输入http://localhost:8080,如下:
增加一个控制器,如下
在浏览器中验证,如下:
7问题
问题1、无法找到SpringApplication
第一种方法:不使用eclipse自带的maven,建立新的本地仓库,运行maven -install后解决
第二种方法:把SpringBoot的版本从2.0.6改为2.0.5
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.5.RELEASEversion>
<relativePath/>
parent>
问题2、无法引入org.springframework.boot.autoconfigure.SpringBootApplication
删除本地仓库的autoconfigure,运行项目右键菜单mavenàUpdate project…
问题3、无法引入@RestController,@RequestMapping
在eclipse点击代码右键按提示操作解决
问题4、无法引入@SpringBootApplication
删除本地仓库的autoconfigure,运行项目右键菜单mavenàUpdate project…
问题5:不能读取application.properties
把application.properties或者application.yml移到config目录中,有人认为放在resources目录中实际上是错的。
官方文档说放在以下四个目录:
(1)当前目录的 "/config"的子目录下
(2)当前目录下
(3)classpath根目录的"/config"包下
(4)classpath的根目录下
问题6:无法访问@RequestMapping中指定的链接
原因1:Application类和Controller类不再一个包中,解决办法:Application类和Controller类放到一个包中
问题7:Error creating bean with name 'userController': Unsatisfied dependency expressed through field 'userService' ……Validation failed for query for method public abstract java.util.List com.edison.dblib.UserRepository.findUser(java.lang.String)!
原因是JPA使用的Hibernate需要传送java中的model名字,而不是使用表名,因此需要把:
@Query("select id,username,sex,address from User u where u.username=:name")
List
改为:
@Query("select id,username,sex,address from UserModel u where u.username=:name")
List
问题8:Consider defining a bean of type 'com.edison.dblib.UserDao' in your configuration
Description:
Field userDao in com.edison.dblib.CustomUserService required a bean of type 'com.edison.dblib.UserDao' that could not be found.
Action:
Consider defining a bean of type 'com.edison.dblib.UserDao' in your configuration.
解决:使用@Mapper注解
//@Repository
@Mapper
public interface UserDao {
public SysUser findByUserName(String username);
}
问题9:The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone.
解决办法:数据库连接URL后,加上?serverTimezone=UTC
8逻辑图
9 Starter
启动器 | 功能 | POM |
spring-boot-starter | 核心启动器:自动配置支持,日志,YAML | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starterartifactId> |
spring-boot-starter-activemq | 基于Apache ActiveMQ支持JMS消息 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-activemqartifactId> |
spring-boot-starter-amqp | 支持Spring AMQP和RabbitMQ | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-aop | 基于Spring AOP和AspectJ实现AOP | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-artemis | 基于Apache Artemis支持JMS消息 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-batch | 支持Apache Batch | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-cache | 支持Spring Framework中cache | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-cloud-connectors | 支持Spring Cloud Connectors,简化到云平台的连接,例如Cloud Foundry,Heroku | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-data-cassandra | 支持Spring Data Cassandra和Cassandra分布式数据库 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-data-cassandra-reactive | 支持Spring Data Cassandra Reactive和Cassandra分布式数据库 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-data-couchbase | 支持Spring Data Couchbase和Couchbase文档型数据库 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-data-couchbase-reactive | 支持Spring Data Couchbase Reactive和Couchbase文档型数据库 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-data-elasticsearch | 支持Spring Data Elasticsearch和Elasticsearch搜索和分析引擎 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-data-jpa | 支持基于Hibernate的Spring Data JPA | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-data-ldap | 支持Spring Data LDAP | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-data-mongodb | 支持Spring Data MongoDB和MongoDB文档型数据库 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-data-mongodb-reactive | 支持Spring Data MongoDB Reactive和MongoDB文档型数据库 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-data-neo4j | 支持Spring Data Neo4j和Neo4j图形数据库 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-data-redis | 支持Spring Data redis和redis键值数据库 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-data- redis-reacive | 支持Spring Data redis reactive和redis内存数据库 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-data-rest | 支持Spring Data rest和基于REST的Spring Data数据仓库输出 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-data-solr | 支持Spring Data solr和solr搜索引擎 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-data-freemarker | 基于freemarker视图构建MVC web应用 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-groovy-templates | 基于groovy templates视图构建MVC web应用 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-hateosa | 基于Spring MVC 和Spring HATEOSA构建基于RESTful的超媒体web应用 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-integration | 支持Spring integration | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-jdbc | 支持基于HikariCP连接池的JDBC | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-jersey | 基于JAX-RS 和Jersey构建基于RESTful的web应用。可替代 spring-boot-starter-web | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-jooq | 基于jOOQ访问SQL数据库。可替代spring-boot-starter-jdbc或者spring-boot-starter-data-jpa | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-json | 读写JSON | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-jta-atomikos | 基于Atomikos的JTA分布式事务 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-jta-bitronix | 基于Bitronix的JTA分布式事务 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-jta-narayana | 基于narayana的JTA分布式事务 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-mail | 基于Spring Framework email sending支持JAVA Mail | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-mustache | 基于mustache视图构建web应用 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-quartz | 基于quartz实现任务调度器 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-security | 支持Spring Security | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-test | 基于Junit、Hamcrest或者Mockito实现Spring Boot应用的测试 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-thymeleaf | 基于thymeleaf视图构建MVC web应用 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-validation | 基于Hibernate Validator实现Java Bean校验 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-web | 基于Spring MVC构建RESTful风格的web应用,使用内嵌tomcat作为默认容器 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-web-services | 使用Spring Web Services | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-webflux | 基于Spring Framework的Reactive Web功能构建Webflux风格的web应用 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-websocket | 基于Spring Framework的Websocket功能构建WebSocket应用 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-actuator | 驱动器,用于生产准备,提供应用程序监控和管理功能。不同于此条目之上的应用程序启动器,这是生产启动器,唯一 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-jetty | 技术启动器。使用jetty作为内嵌servlet容器。可代替spring-boot-starter-tomcat | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-log4j2 | 技术启动器。使用log4j2作为日志组件。可代替spring-boot-starter-logging | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter- logging | 技术启动器。使用Logback作为日志组件。默认的日志启动器 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-reactive-netty | 技术启动器。使用Reactive Netty作为内嵌反应式Http服务器 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-tomcat | 技术启动器。使用tomcat作为内嵌servlet容器。被spring-boot-starter-web使用的默认servlet容器 | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
spring-boot-starter-undertow | 技术启动器。使用undertow作为内嵌servlet容器。可替代spring-boot-starter-tomcat | <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-?artifactId> |
10 Annotation
1、Boot注解
注解 | 解释 |
@SpringBootApplication | 自动包括@Configuration、@EnableAutoConfiguration、@EnableWebMvc、@ComponentScan。属于Spring Boot注解。 |
@SpringBootTest | SpringBoot自1.4.0版本开始引入的一个用于测试的注解。classes属性指定启动类,SpringBootTest.WebEnvironment.RANDOM_PORT经常和测试类中@LocalServerPort一起在注入属性时使用。会随机生成一个端口号。 |
@SpringBootConfiguration | 继承自@Configuration。在Spring Boot项目中推荐使用@SpringBootConfiguration替代@Configuration |
@Configuration | 标注应用程序上下文。等同于Spring Framework的XML配置文件。使用注解可以进行类型安全检查 |
@EnableAutoConfiguration | 自动配置。告诉SpringBoot开始增加基于classpath的bean,和具有不同属性设置的其他bean |
@EnableWebMvc | 使能web应用,激活诸如设置DispatcherServlet等关键行为。当SpringBoot发现classpath有spring-webmvc时,自动增加该标注 |
@ComponentScan | 自动寻找Java包中存在的其他组件、配置和服务。可自动装配bean。 |
@Component | 可配合CommandLineRunner使用。在SpringBoot应用程序启动后执行基础任务。注解在类上,表示通用bean,value不写表示默认类名首字母小写。 |
@Service | 业务层bean,注解在类上 |
@Repository | 数据访问层bean,注解在类上 |
@Controller | 控制层bean,注解在类上 |
@ImportResource | 调用XML配置文件 |
@Autowired | 默认byType按类型注入(DI),默认属性required=true,表示找不到匹配bean时自动抛出异常。和@Qualifier结合使用,则自动注入由byType变为byName。注解在成员变量、方法和构造函数上。属于Spring Framework |
@Resource | 默认byName按名称注入(DI)。注解在成员变量、方法和构造函数上。属于Java EE的注解 |
@Bean | 声明当前方法返回一个bean。注解在方法上。 |
@Scope | 指定创建bean实例的方式。注解在类上。创建方式包括如下: (1)singleton: 表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例。为指定@Scope,默认此方式 (2)prototype:表示每次获得bean都会生成一个新的对象 (3)request:表示在一次http请求内有效(只适用于web应用) (4)session:表示在一个用户会话内有效(只适用于web应用) (5)globalSession:表示在全局会话内有效(只适用于web应用) |
@value | 从配置文件中读取值。注解在变量上。例如:@Value(value = "#{message}") |
@ConfigurationProperties | 给对象赋值,将注解转换为对象 |
@Profile | 在不同情况下选择实例化 |
@RestController | 自动包括@Controller和@ResponseBody |
@ResponseBody | 返回结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用。在@RequestMapping 后,返回值通常解析为跳转路径,加上@Responsebody 后返回结果就从跳转路径改为直接写入HTTP 响应正文中。注解在方法中。 |
@Controller | 用于定义控制器类,在spring项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层)。注解在类中,配合@RequestMapping。 |
@RequestBody | 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。GET、POST和PUT判断和处理不同。 |
@PathVariable | 绑定Request参数到Controller方法的参数中。Required=false可以在value不存在时不抛出异常。URL:http://host:port/path/参数值 |
@RequestParam | 绑定Request参数到Controller方法的参数中。Required=false可以在value不存在时不抛出异常。URL:http://host:port/path?参数名=参数值 |
@RequestMapping | 属性有value(默认),method,consumes,produces,params,headers。 Value:请求相对url地址 Method:方法类型,忽略则自动判定get或post Consumes:提交的内容类型 Produces:返回的内容类型 Params:请求必须包含的参数 Headers:请求必须包含的头 |
@GetMapping | 同@RequestMapping(method = RequestMethod.GET) |
@PutMapping | 同@RequestMapping(method = RequestMethod.PUT) |
@PostMapping | 同@RequestMapping(method = RequestMethod.POST) |
@DeleteMapping | 同@RequestMapping(method = RequestMethod.DELTE) |
@EnableCaching | 加入Cache Manager |
@SuppressWarning | 移除警告 |
@Modifying | 表示数据库操作是增删改。和@Transactional一起使用 |
@Query | 指定自定义查询语句。支持JPQL或者原生SQL |
@RepositoryRestResource | 配合spring-boot-starter-data-rest使用。Spring Data REST自动创建此接口的实现后,@RepositoryRestResource注解让Spring MVC在path处创建RESTful入口点。 |
@RunWith | |
@AutoConfigureMockMvc | |
@Test | |
@AutoConfigureWebTestClient | |
@DirtiesContext | |
@MockBean | |
@JsonTest | |
@WebMvcTest | |
@WebFluxTest | |
@DataJpaTest | |
@AutoConfigureTestDatabase | |
@JooqTest | |
@DataMongoTest | |
@DataNeo4jTest | |
@DataRedisTest | |
@JdbcTest | |
@Import | |
@AutoConfigureRestDocs | |
@LocalServerPort | |
@TestConfiguration | |
@Override | |
@ImportAutoConfiguration | |
@EnableBatchProcessing | |
@ContextConfiguration | |
@Value | |
@PayloadRoot | |
@ResponsePayload | |
@Endpoint | |
@RequestPayload | |
@JsonCreator | |
@JsonProperty |
2、JPA注解
注解 | 解释 |
@Entity | 声明类为实体或表。 |
@Table | 声明表名。和@Entity一起使用,表示表名和实体名不同 |
@Basic | 指定非约束明确的各个字段。 |
@Embedded | 指定类或它的值是一个可嵌入的类的实例的实体的属性。 |
@Id | 指定的类的属性,用于识别(一个表中的主键)。 |
@GeneratedValue | 指定如何标识属性可以被初始化,例如自动、手动、或从序列表中获得的值。strategy=IDENTITY:自增长,strategy=AUTO:自动(默认),strategy=SEQUENCE:采用@SequenceGenerator的序列生成器,strategy=TABLE:使用表产生 |
@Transient | 表示不持久,即:该值永远不会存储在数据库中。没有此注解则表示默认@Basic |
@Basic | 持久的。fetch=FetchType.LAZY表示加载方式 |
@Column | 指定持久属性栏属性。属性name:字段名,unique:是否唯一,nullable:是否空,Length:长度,insertable:是否可插入,updateable:是否可更新,columnDifinition:DDL,secondaryTable:从表名。 |
@Temporal | 和@Column一起使用。属性value:TemporalType.DATE:日期,TemporalType.TIME:时间,TemporalType.TIMESTAMP:时间戳 |
@JsonIgnore | 作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响。 |
@JsonIgnoreProperties | 类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响 |
@JsonFormat | 用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式,比如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss") |
@JsonSerialize | 此注解用于属性或者getter方法上,用于在序列化时嵌入我们自定义的代码,比如序列化一个double时在其后面限制两位小数点。 |
@JsonDeserialize | 此注解用于属性或者setter方法上,用于在反序列化时可以嵌入我们自定义的代码,类似于上面的@JsonSerialize |
@JsonManagedReference | 放在父类中 |
@JsonBackReference | 放在子类中 |
@SequenceGenerator | 指定在@GeneratedValue注解中指定的属性的值。它创建了一个序列。 |
@TableGenerator | 指定在@GeneratedValue批注指定属性的值发生器。它创造了的值生成的表。 |
@AccessType | 这种类型的注释用于设置访问类型。如果设置@AccessType(FIELD),则可以直接访问变量并且不需要getter和setter,但必须为public。如果设置@AccessType(PROPERTY),通过getter和setter方法访问Entity的变量。 |
@JoinColumn | 指定一个实体组织或实体的集合。这是用在多对一和一对多关联。 |
@UniqueConstraint | 指定的字段和用于主要或辅助表的唯一约束。 |
@ColumnResult | 参考使用select子句的SQL查询中的列名。 |
@ManyToMany | 定义了连接表之间的多对多一对多的关系。对应hibernate配置文件 |
@ManyToOne | 定义了连接表之间的多对一的关系。对应hibernate配置文件 |
@OneToMany | 定义了连接表之间存在一个一对多的关系。对应hibernate配置文件 |
@OneToOne | 定义了连接表之间有一个一对一的关系。对应hibernate配置文件 |
@NamedQueries | 指定命名查询的列表。 |
@NamedQuery | 指定使用静态名称的查询。 |