记录一下工程中注解的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39089503/article/details/88396725

记录一下注解的使用:

@SpringBootApplication //springboot启动注解
@EnableScheduling //表示对计划任务的支持
class Application : SpringBootServletInitializer {
	...
}
@Scheduled(cron = "0 0 2 * * ?") //执行定时任务,cron表达式(每天2点)
fun test(){
	...
}
@Configuration //表示该类是一个配置类,相当于一个xml配置文件
@EnableJms //设置在@Configuration类上,用来声明对 JMS 注解的支持
class ActiveMqConfig {
    @Bean //相当于xml配置文件中的bean,表示创建一个Bean
    fun testQueue() = ActiveMQQueue(GlobalConfig.Activemq.MQ_TEST_NAME)
    ...
}
@Service  //自动注入
@Transactional   //事务管理
class Test{
	@Autowired  //自动装配(默认是根据类型Type)  @Autowired(required=false) 表示有就注入,没有就忽略,本地调试时用的多
	@Qualifier("abc")  //指定注入 Bean 的名称,消除歧义
	@Primary //表明优先选择
	private lateinit var a: A
}
@Value("\${spring.profiles.active}") //注入外部的值,一般获取配置文件中的值,kotlin中是 \$
@RestController  //@Controller + @ResponseBody
@RequestMapping("Test")  //地址映射
class Test{
	@GetMapping("/{id}") //@RequestMapping(method = RequestMethod.GET)
	@RequestParam(value = "name", required = false)  //请求参数绑定
	fun get(@PathVariable("id")){}  //动态绑定
	@PostMapping("")  //@RequestMapping(method = RequestMethod.POST)
	fun post(){}
	@DeleteMapping("")  //@RequestMapping(method = RequestMethod.DELETE)
	fun delete(){}
}
@ControllerAdvice  //控制器增强  一般用于全局异常拦截处理(controller)
class ExceptController {
	@ExceptionHandler(value = Exception::class)  //统一处理某一类异常
    @Transactional(rollbackOn = arrayOf(Exception::class, RuntimeException::class))  //有保存操作所以加上这个
    @ResponseBody  //写入 HTTP response body
    fun exceptionHandler(req: HttpServletRequest, e: Exception): Map<String, Any> {
    ...
    }
}
@Throws  //虽然有全局异常处理,但是有些(如定时任务)并不会被捕捉,需要该注解抛给上一层,然后进行try..catch
@EnableAsync  //开启对异步任务的支持
class Test{
	@Async  //新启一个线程任务
	fun a(){}
}
@MappedSuperclass  //标记实体类当成基类实体(公有属性),不会隐射到数据库表
open class BaseModel : Serializable {
	var createAt: Timestamp? = null
    lateinit var updateAt: Timestamp

    @PrePersist  //在持久化之前自动填充实体属性
    fun setInitValue() {
		this.createAt = Timestamp(Date().time)
        this.updateAt = Timestamp(Date().time)
    }

    @PreUpdate //每次更新实体时更新实体的属性
    fun setUpdateAt() {
        this.updateAt = Timestamp(Date().time)
    }
}
//@Entity标注是实体类,并且使用默认的映射规则,即类名为表名,字段名为表中的字段名,如果想改变这种默认的规则,
 就要使用@Table来改变表名的映射规则,@Column来改变字段名的映射规则
@Entity 
@Table(name = "t_account")
class Account(@Id @GeneratedValue(strategy = GenerationType.TABLE) var id: Long? = null) : BaseModel() {
	@Column(unique = true,nullable = false,columnDefinition = "int default 1")
	...
	@JsonIgnore  //返回的json数据不包含该属性
	...
	@JoinColumn(name = "parent_id")  //指定外键列
	...
    @JoinTable(name = "ref_acct_auth")  //多对多关系时自动生成中间表
    ...
	@OneToMany(mappedBy = "fkAcct")  //一对多关系,交由多的一方来维护(外键在多的一方),和@JsonIgnore一起用
	...
	@ManyToMany(cascade = arrayOf(CascadeType.ALL))  //多对多关系,所有情况下均进行关联操作
	...
	@ManyToOne  //多对一关系
	...
	@OneToOne  //一对一关系
    ...
    @Basic(fetch = FetchType.LAZY)  //表示一个简单的属性到数据库表的字段的映射,懒加载
    ...
    @Lob  // 指定大对象类型,默认blob,和@Basic一起使用
    ...
}   
	@PersistenceContext  //持久化上下文,它一般包含有当前事务范围内的,被管理的实体对象(Entity)的数据
    private lateinit var entityManager: EntityManager //实体管理对象,操纵持久化数据的接口

猜你喜欢

转载自blog.csdn.net/qq_39089503/article/details/88396725