法助 2024-04-12 17:19 采纳率: 0%
浏览 7

用了Mapper之后怎么写服务层

img

img

img


之前的Dao层是先接口再实现然后写服务,使用Mybatis和@Mapper之后要怎么写服务层
实现下面这样

img

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-12 17:19
    关注

    引自免费微信小程序:皆我百晓生

    在使用Mybatis和@Mapper注解后,服务层的编写方式会有所不同。首先,你需要了解Mybatis是如何工作的:它通过注解映射SQL语句,并且自动处理数据到对象的转换。

    以下是服务层的步骤:

    1. 创建一个用户接口(User.java):
    public interface User {
        int getId();
        String getName();
        void setId(int id);
        void setName(String name);
    }
    
    1. 创建一个UserMapper接口(UserMapper.java):
    import org.apache.ibatis.annotations.*;
    
    public interface UserMapper {
        @Select("SELECT * FROM user WHERE id = #{id}")
        User selectUserById(@Param("id") int id);
    
        @Insert("INSERT INTO user (name) VALUES (#{name})")
        int insertUser(User user);
    
        @Update("UPDATE user SET name=#{name} WHERE id=#{id}")
        int updateUser(User user);
    
        @Delete("DELETE FROM user WHERE id=#{id}")
        int deleteUser(@Param("id") int id);
    }
    

    这里定义了四个基本操作:查询、插入、更新和删除用户的SQL语句。

    1. 创建一个UserService类(UserService.java),在这个类中注入UserMapper并提供业务方法:
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserService {
    
        private final UserMapper userMapper;
    
        @Autowired
        public UserService(UserMapper userMapper) {
            this.userMapper = userMapper;
        }
    
        public User getUserById(int id) {
            return userMapper.selectUserById(id);
        }
    
        public int addUser(User user) {
            return userMapper.insertUser(user);
        }
    
        public int updateUser(User user) {
            return userMapper.updateUser(user);
        }
    
        public int deleteUser(int id) {
            return userMapper.deleteUser(id);
        }
    }
    

    在这个例子中,我们创建了一个UserService类,它有一个UserMapper的实例。这个类提供了与数据库交互的方法,这些方法调用UserMapper中的SQL映射。

    1. 最后,在Spring配置文件中添加UserMapper的扫描和事务管理器设置:
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
    
        <!-- MyBatis配置 -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <property name="mapperLocations" value="classpath:mapper/*.xml"/>
        </bean>
    
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
    
        <tx:annotation-driven transaction-manager="transactionManager"/>
    
        <!-- 扫描Service包下的所有注解 -->
        <context:component-scan base-package="com.example.yourpackage.services"/>
    
    </beans>
    

    确保你的项目中有相应的mybatis-config.xml、spring-context.xml配置文件,以及UserMapper.xml映射文件,它们分别用于全局配置、事务管理和具体的SQL映射。

    这样,你就可以在其他地方注入UserService并调用它的方法来执行相应的数据库操作了。例如,在Controller中:

    @RestController
    @RequestMapping("/api/users")
    public class UserController {
    
        private final UserService userService;
    
        @Autowired
        public UserController(UserService userService) {
            this.userService = userService;
        }
    
        @GetMapping("/{id}")
        public ResponseEntity<User> getUserById(@PathVariable int id) {
            User user = userService.getUserById(id);
            if (user == null) {
                return ResponseEntity.notFound().build();
            }
            return ResponseEntity.ok(user);
        }
    
        // 其他控制器方法...
    }
    

    这就是在使用Mybatis和@Mapper注解的情况下如何编写服务层的详细过程。注意,这里使用的是Spring框架,如果你的项目中没有使用Spring,那么你需要相应地调整配置。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月12日

悬赏问题

  • ¥15 问题重发,R语言:代码运行过程中出现如下警告,请求如何解决!
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 苍穹外卖拦截器token为null
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关