java开发常用注解

1、使用Spring Cloud feign使用中在使用服务发现的时候提到了两种注解,
一种为@EnableDiscoveryClient,一种为@EnableEurekaClient,用法上基本一致。
spring cloud中discovery service有许多种实现(eureka、consul、zookeeper等等),@EnableDiscoveryClient基于spring-cloud-commons, @EnableEurekaClient基于spring-cloud-netflix。
其实用更简单的话来说,就是如果选用的注册中心是eureka,那么就推荐@EnableEurekaClient,如果是其他的注册中心,那么推荐使用@EnableDiscoveryClient。
用注解@EnableFeignClients启用feign客户端 目的就是启动feign客户端
2、@SpringBootApplication : 是Sprnig Boot项目的核心注解,目的是开启自动配置
3、@ComponentScan这个注解在Spring中很重要,它对应XML配置中的元素,@ComponentScan的功能其实就是自动扫描并加载符合条件的组件(比如@Component和@Repository等)或者bean定义,最终将这些bean定义加载到IoC容器中。
4、@EnableAutoConfiguration 简单概括一下就是,借助@Import的支持,收集和注册特定场景相关的bean定义。
5、@EnableScheduling是通过@Import将Spring调度框架相关的bean定义都加载到IoC容器。
6、@EnableMBeanExport是通过@Import将JMX相关的bean定义加载到IoC容器。
配置类注解@EnableScheduling来开启对计划任务的支持,然后在要执行计划任务的7、@Scheduled方法上注解@Scheduled,声明这是一个计划任务。
Spring通过@Scheduled支持多种类型的计划任务,包含cron、fixDelay、fixRate等。
使用cron属性可按照指定时间执行,本例写的是每天20点07分执行;
8、@RepositoryRestResource 注解的使用 Spring Data REST将自动创建此接口的实现。然后,它将使用@RepositoryRestResource注解让Spring MVC在/people处创建RESTful入口点。
9、@Param 注解 在传入参数时候添加该注解可以对传入参数进行自动赋值
10、对返回的值不需要所有参数都进行返回 @JsonIgnoreProperties(ignoreUnknown = true)
允许返回的值不一定包含所有属性的值,一般直接用在类上
11、@Entity
@Table(name = “CAN_BUY_PLATE_NUMBERS”)
@JsonIgnoreProperties(ignoreUnknown = true)
该注解一般用在实体进行注解,table指明name如果和数据库一致可以省略
12、@GeneratorValue注解----JPA通用策略生成器
@GenericGenerator注解----自定义主键生成策略
13、@JsonFormat( pattern = “yyyy-MM-dd’T’HH:mm:ss”,locale = “zh”,timezone = “GMT+8”)定义数据格式类型
14、@AllArgsConstructor使用后添加一个构造函数,该构造函数含有所有已声明字段属性参数
@NoArgsConstructor使用后创建一个无参构造函数
15、@Transient注解 在实体中申明某个不希望通过映射存储在数据的属性字段,当想要忽略某个字段的,不让其映射数据库时候 可以使此注解@Transient

16、hibernate表关系的关系映射注解形式
@ManyToOne:在多的一方维护记录 代表一对多关联 通过某个字段进行关联
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true,fetch = FetchType.EAGER)
private List ruleDetailList;
@ManyToOne后面设置了cascade=CascadeType.ALL,那么就有两种情况:
tuser2是多的一方,tgroup是一的一方
(1)tuser2不存在相同的groupid的其他记录,此时会删除tuser2表中id为1的记录,也会级联删除group表中相应的记录;
(2)tuser2表存在相同的groupid的其他记录,后台会报错,无法删除。
如果没有设置cascade=CascadeType.ALL,则会删除tuser2表的记录,不会删除group表的记录。
17、@OneToMany:在一的一方维护记录(在group表维护记录)
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name=“userid”) //意味着在user表会多出一列userid,如果不设置这个属性,那么会多出一个中间表,表中两个字段分别是group和user表的id
private Set users;
只能从group一方获取user一方的数据,而不能从user一方获取group一方的数据
如果在@OneToMany后面设置了cascade=CascadeType.ALL,那么会级联删除user表中的记录,如果没有设置,那么会清空user表的groupid字段,然后删除group表记录。
Group group=(Group)session.get(Group.class, 9);
session.delete(group); 删除记录数据

18、如何通过任意一方可以获取另一方的数据
bean:在一的一方需要设置@OneToMany和mappedby,
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy=“group”)
private Set users;

在多的一方需要设置@ManyToOne和@JoinColumn:
@ManyToOne(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinColumn(name=“groupid”) //会在user表中多出一列:groupid,如果不设置这个属性,数据库会新增一个中间表维护user和group的记录
private Group group;
18、增删改查对应方法
新增一条记录 save()
更新一条数据 save()
删除一条数据 delete()
19、多对多单向关联
bean:只在一方维护关系就好,例如在class表一方维护关系,teacher表一方不做处理
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinTable(
name=“class_teacher”,//中间表名
joinColumns={@JoinColumn(name=“classid”)},//当前对象id在中间表的列名
inverseJoinColumns={@JoinColumn(name=“teacherid”)}//关联的另一个表在中间表的列名
)
在某一方进行维护,获取数据时候只能在某一个表来进行获取数据
20、多对多双向关联
上面的多对多但相关联有一个不足就是只能从class来维护teacher表的记录,双向关联则可以从任何一方维护另一方的记录:
class不变,teacher只要设置mappedby属性即可
@ManyToMany(mappedBy=“teachers”,cascade=CascadeType.ALL,fetch=FetchType.LAZY)
private Set clazzs;
在双向关联多对多的操作中,双向关联并不是真的互相维护,还是存在控制权的问题,这里就把控制权交给了class。
21、深复制和浅复制
浅复制-----
在实际编程中,经常需要从某个已知对象A创建出另一个与A具有相同状态的对象B,并且对B的修改不会影响到A的状态
1、实现clone的类首先需要继承Cloneable接口(Cloneable接口实质是一个标识接口,没有任何的接口方法)
2、在类中重写Object类中的clone()方法
3、在clone()方法中调用super.clone()。无论clone类继承结构是什么,super.clone()会直接或间接java.lang.Object类中的clone()方法。
public Object clone() { //重写clone()方法
Object o = null;
try {
o = (Obj)super.clone();
}catch(CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
}
把浅复制的引用指向原型对象新的克隆体。
深复制------
当类中只有一些基本数据类型时,采用浅复制就行,但是当类中包含了一些对象时,就需要用到深复制了
public Object clone() {
Obj o = null;
try {
o = (Obj)super.clone(); //先执行浅复制
}catch(CloneNotSupportedException e) {
e.printStackTrace();
}
o.birth = (Date)this.getBirth().clone(); //深复制,没有这一步的话,两个对
//象的运行结果都是4月,原因是后面的深复制和浅复制的区别
return o;
}
浅复制和深复制的区别
浅复制:被复制对象的所有变量都含有与原来对象相同的值,而所有对其他对象的引用仍然指向原来的对象,换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象 (引用指向原来对象,不复制引用的对象)
深复制:被复制对象的所有变量都含有与原来对象相同的值,除去那些引用其他对象的变量,那些引用其他对象的变量将指向被复制的新对象,而不知原来那些被引用的对象,换言之,深复制把浅复制的对象所引用的对象都复制了一遍。(引用把浅复制的对象引用都复制一遍)
22、@RequestBody注解 一般应用在对象接收参数 get请求时,后台接收参数的注解应该为RequestParam,如果为post请求时,则后台接收参数的注解就是为RequestBody
@PathVariable注解 spring通过@PathVariable注解来获得请求url中的动态参数的,并且支持动态url访问,可以从url中直接提取参数而不需要采用?q=q&d=d的形式
接收list类型的参数
boolean saveAll(@RequestBody Collection list);
23、@Transation 事务的传播级别 propagation = Propagation.
REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。
REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。
NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
NESTED:支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务。
24、@query 包含属性nativeQuery = true表示 可以直接使用原生SQL进行执行当前SQL。而不使用该属性表示生成SQL对应属性和表明可能不是数据库直接对应的名称。涉及HQL的知识

hibernate常用注解学习

25、@Entity(name=“DEPARTMENT”) 申明实体名称
@Getter
@Setter 自动提供get和set方法
@JsonIgnoreProperties(ignoreUnkown =true) Jackson解析JSON数据时,忽略未知的字段。(如果不设置,当JSON字段和bean字段不匹配时,会抛出异常)

26、@JsonIgnore注解一般使用在字段属性上
27、@JsonIgnoreProperties注解一般使用在类上,对某个希望忽略不传值的地方进行标注
列如 @JsonIgnoreProperties(value = “{password}”)

28 @Id 申明当前属性名称
@GeneratedValue(generator = “uuidGenerator”) 包含两个属性 generator属性的值是一个字符串,默认为"",其声明了主键生成器的名称
strategy属性:提供四种值:
-AUTO主键由程序控制, 是默认选项 ,不设置就是这个
-IDENTITY 主键由数据库生成, 采用数据库自增长, Oracle不支持这种方式
-SEQUENCE 通过数据库的序 列产生主键, MYSQL??不支持
-Table 提供特定的数据库产生主键, 该方式更有利于数据库的移植
@GenericGenerator(name = “uuidGenerator”,strategy = “uuid”)
@GenericGenerator注解配合@GeneratedValue一起使用,@GeneratedValue注解中的"generator"属性要与@GenericGenerator注解中name属性一致,
strategy属性表示hibernate的主键生成策略
strategy属性对应的值包括increasement
native: 对于 oracle 采用 Sequence 方式,对于MySQL 和 SQL Server 采用identity(自增主键生成机制),
native就是将主键的生成工作交由数据库完成,hibernate不管(很常用)。
uuid:采用128位的uuid算法生成主键,uuid被编码为一个32位16进制数字的字符串。占用空间大(字符串类型)。
@Column(name = “ID”,unique = true,nullable = false,length = 32) 定义当前的列名称 唯一主键 不能为空 长度
private String id;
29、@JsonSerialize(using = ToStringSerializer.class) 将返回的值转化成数字序列化返回

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值