持续更新
@RequiresPermissions
验证用户是否登录,等同于方法subject.isAuthenticated() 结果为true时。
@PostMapping、@GetMapping
@GetMapping 注解已经默认封装了@RequestMapping(method = RequestMethod.GET)
@PostMapping( "/system/user")
等价于@RequestMapping(value = "/system/user",method = RequestMethod.POST)
@Column
属性
- name
用来标识实体类中属性与数据表中字段的对应关系
/**
* (Optional) The name of the column. Defaults to
* the property or field name.
*/
String name() default "";
- unique
表示该字段是否为唯一标识,默认为false。如果表中有一个字段需要唯一标识,则既可以使用该标记,也可以使用@Table标记中的@UniqueConstraint。
/**
* (Optional) Whether the property is a unique key. This is a
* shortcut for the UniqueConstraint annotation at the table
* level and is useful for when the unique key constraint is
* only a single field. This constraint applies in addition
* to any constraint entailed by primary key mapping and
* to constraints specified at the table level.
*/
boolean unique() default false;
- nullable
表示该字段是否可以为null值,默认为true。
/**
* (Optional) Whether the database column is nullable.
*/
boolean nullable() default true;
- insertable
表示在使用“INSERT”脚本插入数据时,是否需要插入该字段的值。默认为true
/**
* (Optional) Whether the column is included in SQL INSERT
* statements generated by the persistence provider.
*/
boolean insertable() default true;
- updatable
表示在使用“UPDATE”脚本插入数据时,是否需要更新该字段的值。insertable和updatable属性一般多用于只读的属性,例如主键和外键等。这些字段的值通常是自动生成的。
/**
* (Optional) Whether the column is included in SQL UPDATE
* statements generated by the persistence provider.
*/
boolean updatable() default true;
- columnDefinition
/**
* (Optional) The SQL fragment that is used when
* generating the DDL for the column.
* <p> Defaults to the generated SQL to create a
* column of the inferred type.
*/
String columnDefinition() default "";
- table
表示当映射多个表时,指定表的表中的字段。默认值为主表的表名。
/**
* (Optional) The name of the table that contains the column.
* If absent the column is assumed to be in the primary table.
*/
String table() default "";
- length
表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符。
/**
* (Optional) The column length. (Applies only if a
* string-valued column is used.)
*/
int length() default 255;
- precision、scale
precision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数
/**
* (Optional) The precision for a decimal (exact numeric)
* column. (Applies only if a decimal column is used.)
* Value must be set by developer if used when generating
* the DDL for the column.
*/
int precision() default 0;
/**
* (Optional) The scale for a decimal (exact numeric) column.
* (Applies only if a decimal column is used.)
*/
int scale() default 0;
@Table
属性
- name:
用来命名 当前实体类 对应的数据库 表的名字
@Table(name = "aqjy_px")
/**
* (Optional) The name of the table.
* <p> Defaults to the entity name.
*/
String name() default "";
- catalog
指定数据库名称,默认为当前配置的数据库
/** (Optional) The catalog of the table.
* <p> Defaults to the default catalog.
*/
String catalog() default "";
- schema
指定数据库的用户名 ,默认为当前配置的用户 root
/** (Optional) The schema of the table.
* <p> Defaults to the default schema for user.
*/
String schema() default "";
- uniqueConstraints
用来批量命名唯一键 其作用等同于多个:@Column(unique = true)
/**
* (Optional) Unique constraints that are to be placed on
* the table. These are only used if table generation is in
* effect. These constraints apply in addition to any constraints
* specified by the {@link Column} and {@link JoinColumn}
* annotations and constraints entailed by primary key mappings.
* <p> Defaults to no additional constraints.
*/
UniqueConstraint[] uniqueConstraints() default {};
@Id
标注用于声明一个实体类的属性映射为数据库的主键列。该属性通常置于属性声明语句之前,可与声明语句同行,也可写在单独行上。
/**
* Specifies the primary key property or field of an entity.
*
* <pre>
* Example:
*
* @Id
* public Long getId() { return id; }
* </pre>
*
* @since Java Persistence 1.0
*/
@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface Id {}
@GeneratedValue
@GeneratedValue注解存在的意义主要就是为一个实体生成一个唯一标识的主键(JPA要求每一个实体Entity,必须有且只有一个主键),
@GeneratedValue和@Id一起来标注主键
- strategy
@Target({METHOD,FIELD})
@Retention(RUNTIME)
public @interface GeneratedValue{
GenerationType strategy() default AUTO;
String generator() default "";
}
/**
* (Optional) The primary key generation strategy
* that the persistence provider must use to
* generate the annotated entity primary key.
*/
GenerationType strategy() default AUTO;
- generator
generator属性的值是一个字符串,默认为"",其声明了主键生成器的名称(对应于同名的主键生成器@SequenceGenerator和@TableGenerator)。
添加链接描述
/**
* (Optional) The name of the primary key generator
* to use as specified in the {@link SequenceGenerator}
* or {@link TableGenerator} annotation.
* <p> Defaults to the id generator supplied by persistence provider.
*/
String generator() default "";
@Data
@Table(name = "`ah`")
public class Pxjh {
@Id
@Column(name = "docid")
@GeneratedValue(generator = "JDBC")
/** $column.columnComment */
private String docid;
@Data
- staticConstructor
package lombok;
@java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE})
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE)
public @interface Data {
java.lang.String staticConstructor() default "";
}
源码
/**
* Generates getters for all fields, a useful toString method, and hashCode and equals implementations that check
* all non-transient fields. Will also generate setters for all non-final fields, as well as a constructor.
* <p>
* Equivalent to {@code @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode}.
* <p>
* Complete documentation is found at <a href="https://projectlombok.org/features/Data">the project lombok features page for @Data</a>.
*
* @see Getter
* @see Setter
* @see RequiredArgsConstructor
* @see ToString
* @see EqualsAndHashCode
* @see lombok.Value
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface Data {
/**
* If you specify a static constructor name, then the generated constructor will be private, and
* instead a static factory method is created that other classes can use to create instances.
* We suggest the name: "of", like so:
*
* <pre>
* public @Data(staticConstructor = "of") class Point { final int x, y; }
* </pre>
*
* Default: No static constructor, instead the normal constructor is public.
*
* @return Name of static 'constructor' method to generate (blank = generate a normal constructor).
*/
String staticConstructor() default "";
}
@PathVariable
其用来获取请求路径(url)中的动态参数
@RequestMapping
@ResponseBody
使用在@controller上的方法上
* 在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody后是将java对象转为json格式的数据,
表示该方法的返回结果直接写入HTTP response body中(通常用来返回JSON数据或者是XML数据),一般在异步获取数据时使用,不会被解析为跳转路径。而是直接将数据写入到输入流中,
他的效果等同于通过response对象输出指定格式的数据。
* 注意编码:
如果返回对象,按utf-8编码。
如果返回String,默认按iso8859-1编码,页面可能出现乱码。
因此在注解中我们可以手动修改编码格式,例如@RequestMapping(value="/aqgl",produces="text/html;charset=utf-8"),
前面是请求的路径,后面是编码格式。
* 当方法上面没有写@ResponseBody,底层会将方法的返回值封装为ModelAndView对象。
* 原理:控制层方法的返回值是如何转化为json格式的字符串的?
其实是通过HttpMessageConverter中的方法实现的,它本是一个接口,在其实现类完成转换。
如果是bean对象,会调用对象的getXXX()方法获取属性值并且以键值对的形式进行封装,进而转化为json串。
如果是map集合,采用get(key)方式获取value值,然后进行封装。
@RequestBody
是作用在形参列表上,用于将前台发送过来固定格式的数据【xml格式 或者 json等】封装为对应的 JavaBean 对象,封装时使用到的一个对象是
系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上
注意:在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,
@RequestBody最多只能有一个,而@RequestParam()可以有多个。
1、该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;由于GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。
2、再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。
参考:@RequestBody的使用
@RequestParam
@Mapper
@MapperScan
@Repository
首先:@repository是用来注解接口,如下图:这个注解是将接口BookMapper的一个实现类(具体这个实现类的name叫什么,还需要再分析源码找找看)交给spring管理(在spring中有开启对@repository注解的扫描),当哪些地方需要用到这个实现类作为依赖时,就可以注入了.当然我们也可以主动给这个实现类命名
引用@Respository
@Annotation
@Cacheable @CacheEvict
@NotBlank @NotNull @NotEmpty
@NotBlank
The annotated element must not be {@code null} and must contain at
least one non-whitespace character. Accepts {@code CharSequence}. CharSequence字符序列
@NotEmpty
The annotated element must not be {@code null} nor empty. Supported types are:
* <ul>
* <li>{@code CharSequence} (length of character sequence is evaluated) 字符串</li>
* <li>{@code Collection} (collection size is evaluated) </li>
* <li>{@code Map} (map size is evaluated) </li>
* <li>Array (array length is evaluated)</li>
* </ul>
@NotNull
* The annotated element must not be {@code null}.
* Accepts any type.
@RestControllerAdvice
SpringBoot - MyBatis-Plus
二、设置模型对应的表名、字段名
1,设置关联的表名
(1)默认情况下,如果数据库表是使用标准的下划线命名,并且能对应上实体类的类名,我们就不需要特别去手动匹配。比如有张 user_info 表,那么会自动匹配下面这个实体类:
@Data
public class UserInfo {
private Integer id;
private String userName;
private String passWord;
}
(2)如果数据库中所有表都有个表名前缀,比如我们想让 t_user_info 表仍然对应 UserInfo 实体类,可以添加如下全局配置设置表名前缀:
mybatis-plus.global-config.db-config.table-prefix=t_
(3)如果所有表名都不是下划线命名(但能跟类名对应上),比如想让 userinfo 表对应 UserInfo 实体类,可以添加如下全局配置,表示数据库表不使用下划线命名:
mybatis-plus.global-config.db-config.table-underline=false
(4)除了上面两种全局配置方法外,我们还可以使用 @TableName 表名注解指定当前实体类对应的表名,比如下面 UserInfo 实体类对应表名为 user:
@Data
@TableName(value = "user")
public class UserInfo {
private Integer id;
private String userName;
private String passWord;
}
2,设置关联的字段名
(1)同表名一样,如果数据库表里的字段名使用标准的下划线命名,并且能对应上实体类的成员名称(驼峰命名),我们就不需要特别去手动匹配。比如下面 user_info 表里的字段会自动跟 UserInfo 实体类的各个成员属性一一对应:
原文:SpringBoot - MyBatis-Plus使用详解2(设置实体类对应的表名、字段名 )
@Data
public class UserInfo {
private Integer id;
private String userName;
private String passWord;
}
(2)如果数据库表里的字段名并不是使用下划线命名(但能跟实体类的成员名称对应上),可以添加如下全局配置,表示数据库表字段名不使用下划线命名:
原文:SpringBoot - MyBatis-Plus使用详解2(设置实体类对应的表名、字段名 )
mybatis-plus.configuration.map-underscore-to-camel-case=false
(3)除了全局配置方法外,我们还可以使用 @TableId 注解(标注在主键上)和 @TableField 注解(标注在其他成员属性上)来指定对应的字段名:
@Data
public class UserInfo {
@TableId(value = "uuid")
private Integer id;
@TableField(value = "uname")
private String userName;
@TableField(value = "pword")
private String passWord;
}
原文出自:www.hangge.com 转载请保留原文链接:原文链接l
参考文章:
- https://blog.csdn.net/weixin_42265148/article/details/104739175?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159574068319195265964373%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159574068319195265964373&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-1-104739175.pc_ecpm_v3_pc_rank_v3&utm_term=%40column&spm=1018.2118.3001.4187
- https://blog.csdn.net/sswqzx/article/details/84337672?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159574608419724835850884%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159574608419724835850884&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v3~pc_rank_v3-9-84337672.pc_ecpm_v3_pc_rank_v3&utm_term=%40table&spm=1018.2118.3001.4187
- https://blog.csdn.net/u012493207/article/details/50846616?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight
- https://blog.csdn.net/jiahao1186/article/details/91980316
- https://blog.csdn.net/justry_deng/article/details/80972817