文章目录
创建项目
常用的几个注解
@Data
注在类上,提供类的get、set、equals、hashCode、canEqual、toString方法
@AllArgsConstructor
注在类上,提供类的全参构造
@NoArgsConstructor
注在类上,提供类的无参构造
@Setter
注在属性上,提供 set 方法
@Getter
注在属性上,提供 get 方法
@EqualsAndHashCode
注在类上,提供对应的 equals 和 hashCode 方法
@Log4j/@Slf4j
注在类上,提供对应的 Logger 对象,变量名为 log
MYBatis-Plus常用注解
@TableName
value作用:value指定数据库中的表名
如果我们不设置这个注解,我们操作的数据库的表就由BaseMapper<Book> 泛型决定(Book)
@TableName(value = "t_book") //@TableName("t_book")
public class Book {}
另外的一种方法:
设置实体类所对应的表的统一前缀
我们如果不用注解也可以,比如下面的这个方式,给每个类都配置一个前缀,比如说表名是Book,但他其实已经默认是t_Book
@TableId
@TableField
作用:指定属性所对应的字段名
@TableField(value = "bookName")
private String bookName;
@TableField(value="type")
private String type;
如果不加上面那个注解的话,就会默认两个单词中间加一个—,如下图所示
@TableLogic
后端代码中常用注解
@Mapper
使用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类。
添加位置:接口类上面,代码如下所示:
@Mapper
public interface StudentMapper {
}
@MapperScan
作用:指定要变成实现类的接口所在的包,包下面的所有接口在编译之后都会生成相应的实现类。添加位置:是在Springboot启动类上面添加
package com.tyut.pet;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
@MapperScan({"com.pet.mapper"})
public class PetApplication {
public static void main(String[] args) {
SpringApplication.run(PetApplication.class, args);
}
}
@Controller(@RequestMapping)
在SpringMVC中,控制器Controller负责处理又DIspatcherServlet分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model,然后再把该Model返回给对应的View进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。
@Controller
public class MyController {
@RequestMapping ( "/showView" )
public ModelAndView showView() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName( "viewName" );
modelAndView.addObject( " 需要放到 model 中的属性名称 " , " 对应的属性值,它是一个对象 " );
return modelAndView;
}
}
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
在上面的示例中,@Controller 是标记在类MyController 上面的,所以类MyController 就是一个SpringMVC Controller 对象了,然后使用@RequestMapping(“/showView”) 标记在Controller 方法上,表示当请求/showView.do 的时候访问的是MyController 的showView 方法,该方法返回了一个包括Model 和View 的ModelAndView 对象。
@Autowired
使用 @Autowired 注解,可以省略手动编写代码来实例化和设置组件的属性的步骤。Spring 框架会自动扫描应用程序中所有使用了 @Component、@Service、@Repository 等注解的类
@Service
public class MyService {
@Autowired
private MyRepository repository;
public List<MyEntity> getAllEntities() {
return repository.findAll();
}
}
@Repository
public class MyRepository {
public List<MyEntity> findAll() {
}
}
在这个示例中,MyService 组件使用 @Autowired 注解来自动装配 MyRepository 组件。当 MyService 实例化时,Spring 框架会自动创建 MyRepository 的实例,并将它注入到 MyService 中。然后,MyService 可以使用 repository 属性来访问 MyRepository 提供的方法,例如 findAll() 方法。
@ResponseBody
参考
作用:将java对象转为json格式的数据
将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
注意:在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
原理:@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用(也就是AJAX)。
注意:在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。@RequestBody 将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。
@RequestMapping(value = "user/login")
@ResponseBody
// 将ajax(datas)发出的请求写入 User 对象中
public User login(@RequestBody User user) {
// 这样就不会再被解析为跳转路径,而是直接将user对象写入 HTTP 响应正文中
return user;
}
@Transactional
@Transactional 是 Spring Framework 提供的注解,用于在 Spring 事务管理中标记一个方法应该作为一个事务处理。在使用 @Transactional 注解之前,需要先确保你的项目中已经添加了 Spring Framework 的依赖。
在 IntelliJ IDEA 中,使用 @Transactional 注解很简单,可以按照以下步骤进行:
-
首先,确保你的类已经添加了 @Service、@Repository 或 @Controller 注解,以便 Spring 能够扫描到该类并将其作为组件管理。
-
在需要添加事务的方法上面添加 @Transactional 注解。例如:
-
最后,确保你的 Spring 应用程序配置文件中已经启用了事务管理器。如果你使用的是 Spring Boot,则不需要进行额外配置,它已经包含了一个默认的事务管理器。如果你使用的是 Spring Framework
在你的 pom.xml 文件中添加以下依赖:
<dependencies>
<!-- Spring Core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.14</version>
</dependency>
<!-- Spring Context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.14</version>
</dependency>
<!-- Spring AOP -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.3.14</version>
</dependency>
<!-- Spring Transaction -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.14</version>
</dependency>
<!-- Your other dependencies -->
...
</dependencies>
@Param
@Param 是 MyBatis 框架中的注解,用于指定 Mapper 方法的参数名与 SQL 语句中占位符的对应关系。
当 Mapper 方法存在多个参数时,MyBatis 默认使用参数的顺序来与 SQL 语句中的占位符一一对应。但在实际开发中,由于多个参数的顺序可能会发生变化,因此建议使用 @Param 注解来明确指定参数名和占位符的对应关系。
public interface UserMapper {
List<User> selectUsersByNameAndAge(@Param("name") String name, @Param("age") int age);
}
上面的代码中,@Param 注解指定了方法参数 name 对应 SQL 语句中的 #{name} 占位符,参数 age 对应 #{age} 占位符。这样,当 Mapper 方法被调用时,MyBatis 就会按照 @Param 注解指定的对应关系来设置 SQL 语句中的参数值。
需要注意的是,如果 Mapper 方法只有一个参数,且没有使用 @Param 注解,那么可以直接在 SQL 语句中使用 #{参数名} 占位符,MyBatis 会自动将方法参数与占位符对应起来。例如:
public interface UserMapper {
List<User> selectUsersByName(String name);
}
<select id="selectUsersByName" resultType="User">
SELECT * FROM user WHERE name = #{name}
</select>
在上面的代码中,Mapper 方法 selectUsersByName 只有一个参数 name,因此可以直接在 SQL 语句中使用 #{name} 占位符,MyBatis 会自动将方法参数与占位符对应起来。
pom依赖:
<!-- MyBatis 依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
pom.xml
中加入依赖
在pom.xml
中右键,选中generate
,里面有Dependency
,在里面查找想要的依赖。
IService接口
IService通常是一个接口,其作用是定义一个服务的功能和方法。IService接口它可以将一个复杂的服务分解成多个小的服务,每个小的服务都有一个对应的IService接口,这样可以降低服务之间的耦合性,提高代码的可读性和可维护性。
IService接口通常会定义服务的方法、输入参数、返回值等。IService接口可以被实现为不同的服务,例如一个数据库访问服务、一个文件访问服务、一个邮件服务等。通过使用IService接口,客户端可以方便地使用服务,并且可以轻松地切换不同的服务实现。源码
IService的使用
①mapper接口继承basemapper接口
②service接口继承Iservice
③service接口的实现类继承ServiceImpl<继承basemapper的mapper,实体类>,实现IUserService接口
Cookie
作用:我们知道,平时上网时都是使用无状态的HTTP协议传输出数据,这意味着客户端与服务端在数据传送完成后就会中断连接。这时我们就需要一个一直保持会话连接的机制。在session出现前,cookie就完全充当了这种角色。也就是,
cookie的小量信息能帮助我们跟踪会话。一般该信息记录用户身份。
原理:客户端请求服务器时,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。而客户端浏览器会把Cookie保存起来。当浏览器再请求服务器时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器通过检查该Cookie来获取用户状态。
Cookie cookie = new Cookie("username","joker");// 新建Cookie
cookie.setMaxAge(24*60*60); // 设置生命周期
response.addCookie(cookie); //