@mapper 和@service注解的区别
时间: 2024-06-15 17:04:17 浏览: 20
在Java开发中,@Mapper和@Service是两个常用的注解,它们的作用和使用场景有所不同。
@Mapper注解通常用于MyBatis框架中,用于标识一个接口是数据访问层的Mapper接口。Mapper接口定义了数据库操作的方法,通过@Mapper注解告诉MyBatis框架该接口是一个Mapper接口,需要由框架自动生成对应的实现类。@Mapper注解可以减少手动编写Mapper接口实现类的工作量,提高开发效率。
@Service注解是Spring框架中的注解,用于标识一个类是业务逻辑层的组件。通常情况下,我们将业务逻辑的实现放在Service类中,通过@Service注解告诉Spring框架该类是一个Service组件,需要由框架进行管理和依赖注入。Service组件负责处理业务逻辑,调用数据访问层的方法获取数据,并进行相应的处理和转换。
总结一下区别:
- @Mapper注解用于标识数据访问层的Mapper接口,主要与MyBatis框架相关;
- @Service注解用于标识业务逻辑层的组件,主要与Spring框架相关。
相关问题
@Component 和@Mapper啥区别
@Component 和 @Mapper 都是 Spring 框架中的注解,但是它们的作用不同。
@Component 是一个通用的注解,表示被修饰的类是一个组件,可以被 Spring 容器所管理。通常情况下,我们使用 @Component 注解来标注 Service、Dao、Controller 等类,以便能够通过 Spring 的自动扫描机制来自动装配依赖。
@Mapper 是 MyBatis 框架中的注解,表示被修饰的接口是一个 MyBatis 的 Mapper 接口,用于标记数据访问层的接口,使其能够被 MyBatis 扫描并生成代理对象。在 MyBatis 中,我们可以通过 Mapper 接口来定义数据库的操作,通过 @Mapper 注解来标注 Mapper 接口,然后在 Service 层中注入 Mapper 接口的实现来完成数据访问操作。
因此,@Component 和 @Mapper 的作用不同,@Component 用于标注 Spring 容器管理的组件,@Mapper 用于标注 MyBatis 的 Mapper 接口。
运用spring boot框架用@Controller @ResponseBody@Autowired@PostMapping@Service@Mapper@Data注解和xml编写sql语句实现用户登录案例
好的,下面给出一个简单的用户登录案例,使用了Spring Boot框架、MyBatis、MySQL数据库。
首先,需要在pom.xml文件中添加相关依赖:
```xml
<dependencies>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<!-- MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
</dependencies>
```
然后,在application.properties文件中配置数据库连接信息:
```properties
spring.datasource.url=jdbc:mysql://localhost:3306/db_name?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis.mapper-locations=classpath:mapper/*.xml
```
接下来,创建一个User实体类:
```java
@Data
public class User {
private Integer id;
private String username;
private String password;
}
```
然后,在resources目录下创建mapper/UserMapper.xml文件,编写SQL语句:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
<resultMap id="userMap" type="com.example.demo.entity.User">
<id column="id" property="id"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
</resultMap>
<select id="findByUsernameAndPassword" resultMap="userMap">
select * from user where username=#{username} and password=#{password}
</select>
</mapper>
```
然后,在com.example.demo.mapper包下创建UserMapper接口:
```java
@Mapper
public interface UserMapper {
User findByUsernameAndPassword(@Param("username") String username, @Param("password") String password);
}
```
接着,在com.example.demo.service包下创建UserService接口和实现类UserServiceImpl:
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User findByUsernameAndPassword(String username, String password) {
return userMapper.findByUsernameAndPassword(username, password);
}
}
```
最后,在com.example.demo.controller包下创建UserController:
```java
@Controller
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/login")
@ResponseBody
public String login(String username, String password) {
User user = userService.findByUsernameAndPassword(username, password);
if (user == null) {
return "登录失败";
} else {
return "登录成功";
}
}
}
```
这样,我们就完成了一个简单的用户登录案例。需要注意的是,这里只是一个简单的示例,实际应用中还需要进行参数校验、异常处理等。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)