剖析Java中的Entity、service、serviceImpl、Mapper以及Controller层之间的关系(代码诠释)

这篇具有很好参考价值的文章主要介绍了剖析Java中的Entity、service、serviceImpl、Mapper以及Controller层之间的关系(代码诠释)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

学习了Java的相关方面知识之后,但对于各层次之间的关系以及部署,可能还会有些陌生感,下面以代码讲解各层之间的关系。
(企业中多数以Springboot为例,下面的代码都是以Springboot为例)
如果还停留在SSM基础或者补充Springboot的基础知识,也可在我的博客搜索。

1. Demo1

简单的Spring Boot项目的基本结构,其中包含了实体类、Mapper接口和XML文件、Service接口和实现类以及Controller。

根据实际需求进行适当的调整和扩展。在实际项目中,还需要配置数据库连接、事务管理等相关内容

一、定义实体类(Entity):

// User.java
public class User {
    private Long id;
    private String username;
    private String email;

    // Getters and setters
}

二、创建Mapper接口:

// UserMapper.java
import java.util.List;

public interface UserMapper {
    List<User> getAllUsers();
    User getUserById(Long id);
    void insertUser(User user);
    void updateUser(User user);
    void deleteUser(Long id);
}

三、创建Mapper XML文件:(在resources目录下创建一个与Mapper接口同名的XML文件,定义SQL语句):

<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
    <select id="getAllUsers" resultType="com.example.model.User">
        SELECT * FROM users;
    </select>

    <select id="getUserById" parameterType="Long" resultType="com.example.model.User">
        SELECT * FROM users WHERE id = #{id};
    </select>

    <insert id="insertUser" parameterType="com.example.model.User">
        INSERT INTO users (username, email) VALUES (#{username}, #{email});
    </insert>

    <update id="updateUser" parameterType="com.example.model.User">
        UPDATE users SET username = #{username}, email = #{email} WHERE id = #{id};
    </update>

    <delete id="deleteUser" parameterType="Long">
        DELETE FROM users WHERE id = #{id};
    </delete>
</mapper>

四、创建Service接口和实现类:(实现类记得写@Service):

// UserService.java
public interface UserService {
    List<User> getAllUsers();
    User getUserById(Long id);
    void saveUser(User user);
    void updateUser(User user);
    void deleteUser(Long id);
}
// UserServiceImpl.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {
    private final UserMapper userMapper;

    @Autowired
    public UserServiceImpl(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    @Override
    public List<User> getAllUsers() {
        return userMapper.getAllUsers();
    }

    @Override
    public User getUserById(Long id) {
        return userMapper.getUserById(id);
    }

    @Override
    public void saveUser(User user) {
        userMapper.insertUser(user);
    }

    @Override
    public void updateUser(User user) {
        userMapper.updateUser(user);
    }

    @Override
    public void deleteUser(Long id) {
        userMapper.deleteUser(id);
    }
}

五、创建Controller:(用于处理HTTP请求)

// UserController.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {
    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    @PostMapping
    public void saveUser(@RequestBody User user) {
        userService.saveUser(user);
    }

    @PutMapping("/{id}")
    public void updateUser(@PathVariable Long id, @RequestBody User user) {
        user.setId(id);
        userService.updateUser(user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
    }
}

2. Demo2

上述改进方案可以摘Service中继承Iservice,使用继承类中的方法:

一、 修改UserService接口:在com.example.service包下创建一个UserService接口,继承IService:

// UserService.java
import com.example.model.User;
import com.baomidou.mybatisplus.extension.service.IService;

public interface UserService extends IService<User> {
    // 这里可以添加自定义的业务方法
}

二、创建UserServiceImpl实现类:(ServiceImpl已经实现了IService中的基本方法,在此基础上添加自定义的业务方法)

// UserServiceImpl.java
import com.example.mapper.UserMapper;
import com.example.model.User;
import com.example.service.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    // 这里可以添加自定义的业务方法的实现
}

三、使用UserService:在Controller中注入UserService,即可使用自动生成的方法

// UserController.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import com.example.model.User;
import com.example.service.UserService;

import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {

    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping
    public List<User> getAllUsers() {
        return userService.list();
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getById(id);
    }

    @PostMapping
    public void saveUser(@RequestBody User user) {
        userService.save(user);
    }

    @PutMapping("/{id}")
    public void updateUser(@PathVariable Long id, @RequestBody User user) {
        user.setId(id);
        userService.updateById(user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userService.removeById(id);
    }
}

3. Demo3

对于MybatisPlus中,其实更多的是Mapper来操作,上述Service的操作,最后都会通过Mapepr来操作

可以看这篇文章的示例讲解:快速理解Mybatis-plus中BaseMapper、IService和ServiceImpl

类似如下:

    @Test
    public void getUserById() {

        List<User> one = userMapper.selectList(Wrappers.<User>lambdaQuery().eq(User::getUsername,"manong"));
        System.out.println(one);
    }

3. Mybatis自动生成

使用Spring Boot和MyBatis的整合框架,可以借助MyBatis Generator自动生成实体类、Mapper接口以及XML文件。

以下是一个使用MyBatis Generator生成代码的简单示例:

一、pom.xml的依赖包:

<dependencies>
    <!-- 其他依赖 -->

    <!-- MyBatis Generator 依赖 -->
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.4.0</version>
    </dependency>
</dependencies>

二、创建MyBatis Generator配置文件:在src/main/resources目录下创建一个generatorConfig.xml文件,用于配置生成器的参数:

<!-- generatorConfig.xml -->
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <context id="default" targetRuntime="MyBatis3">

        <!-- 数据库连接配置 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/your_database" userId="your_username" password="your_password"/>

        <!-- 实体类生成位置 -->
        <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>

        <!-- Mapper接口生成位置 -->
        <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/java"/>

        <!-- XML文件生成位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>

        <!-- 表配置 -->
        <table tableName="users" domainObjectName="User"/>

    </context>
</generatorConfiguration>

三、通过命令行或者IDE插件运行MyBatis Generator,生成代码:文章来源地址https://www.toymoban.com/news/detail-859101.html

mvn mybatis-generator:generate

到了这里,关于剖析Java中的Entity、service、serviceImpl、Mapper以及Controller层之间的关系(代码诠释)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java中的controller、domain、mapper(persistence)、service 都是做什么用的?

    java中的controller、domain、mapper(persistence)、service代表了服务端接口的 4 层,第一层是控制层(controller),负责接口请求/响应的控制,调用第二层业务逻辑层(service 一般分为接口和实现),完成具体业务功能,它会调用第三层数据持久层 mapper(persistence)的逻辑,作用是访

    2024年02月15日
    浏览(47)
  • 快速掌握SpringBoot项目中的domain、mapper、service、controller层作用与书写格式

    承接上篇文章:http://t.csdn.cn/49QHB ①四个层负责的功能与作用: 1. Domain:包含业务实体,用于传输和封装数据。作用:作为数据载体,用于在各个模块之间传递业务数据。 2. Mapper:实现Domain与数据库表的映射及数据访问逻辑。作用:负责数据访问,将业务实体与数据库表进行映射,实现

    2024年02月03日
    浏览(43)
  • Java中 Controller、Service、Dao/Mapper层的区别与用法

    在Java开发中,通常会采用三层架构(或称MVC架构)来划分程序的职责和功能,分别是Controller层、Service层、Dao/Mapper层。 业务模块的逻辑功能设计,和DAO层一样都是先设计接口,再创建要实现的类,然后在配置文件中进行配置其实现的关联。接下来就可以在service层调用接口进

    2024年02月06日
    浏览(48)
  • web中为什么要引入service层以及前端控制器DispatchServlet的作用以及原理剖析

    review: 最初的做法是: 一个请求对应一个Servlet,这样存在的问题是servlet太多了 把一些列的请求都对应一个Servlet, IndexServlet/AddServlet/EditServlet/DelServlet/UpdateServlet - 合并成FruitServlet 通过一个operate的值来决定调用FruitServlet中的哪一个方法 使用的是switch-case 在上一个版本中,Ser

    2024年02月04日
    浏览(38)
  • IService接口和ServiceImpl实现类(Mybatis-Plus对service层的封装)

    Java知识点总结:想看的可以从这里进入 3.2、IService接口 BaseMapper 是用在Mapper中,而IService是在Service层使用的封装接口,它进一步封装 CRUD 。为了和BaseMapper 中方法进行区分,它采用了不同的前缀: get 查询单行 remove 删除 list 查询集合 page 分页 save新增 update修改 IService还有一个

    2024年02月16日
    浏览(36)
  • 解决‘getBaseMapper()‘ in ‘com.baomidou.mybatisplus.extension.service.impl.ServiceImpl‘ clashes with问题

    原因:包的问题 将 import com.baomidou.mybatisplus.mapper.BaseMapper; 改为 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 即可

    2024年02月16日
    浏览(45)
  • Java中的实体类(entity class)和model

    编写代码时,经常会遇到一些具有“现实”意义的“ 个体 ”,eg:一个用户、一首歌曲、一条评论等。它们在逻辑上是完整的整体,具有相似的结构,但是却因为“ 属性 ”的不同而不同。 下面看一个典型的Entity class: 总结: 一个Entity类,代表了某一种“个体”,类中的属

    2024年02月16日
    浏览(38)
  • mapper层和service层的区别

    在软件开发中,通常将应用程序的不同层进行分离,以便实现更好的代码组织和职责分离。通常将应用程序分为三个主要层:表示层、业务逻辑层和数据访问层。其中,业务逻辑层通常又可以分为 Service 层和 Mapper 层。 Mapper 层是数据访问层的一部分,负责将数据从数据库中提

    2024年02月12日
    浏览(38)
  • sql中的时间范围查询【三种方式】以及Mapper.xml中遇到大于号小于号问题解决方案

    mapper注意事项 字符 转义字符 描述 gt; 大于 = gt;= 大于等于 lt; 小于 = lt;= 小于等于 \\\" quot; 双引号 ’ apos; 单引号 amp; and 遇到问题: 从数据库获取时间传到前端进行展示的时候,我们有时候可能无法得到一个满意的时间格式的时间日期,在数据库中显示的是正确的时间格式,获

    2024年02月10日
    浏览(45)
  • MyBatis源码剖析之Mapper代理方式细节

    MyBatis是一个流行的Java持久层框架,它提供了多种方式来执行数据库操作,其中之一就是通过Mapper代理方式。通过Mapper代理方式,开发者可以编写接口,然后MyBatis会动态地生成接口的实现类,从而避免了繁琐的SQL映射配置。 具体代码如下: 思考⼀个问题,通常的Mapper接⼝我

    2024年02月14日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包