版权声明:本文为博主原创文章,未经博主允许不得转载。 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 //实体管理对象,操纵持久化数据的接口