JAVA基础-层级结构

最近开始学习JAVA,接触后端项目,发现跟iOS的区别挺大的,在这里记录一下

iOS谈到项目结构,无非就是MVC,再加上一些自定义的文件夹,管理类,资源类,三方类,拓展,公共UI、弹框等等,比较随意

JAVA这边接触下来,发现它的层级结构比较多,而且一环套着一环,要求比较高,这里的要求甚至对命名的要求都比较高

1、模型(PO)

JAVA中的模型可以直接将数据库的表结构通过工具网址进行转换,数据库字段里面的下划线转成驼峰命名,eg:user_id 转成 userId

模型名直接用表名+PO。eg:表名 user_login 转成class文件名  UserLoginPO

工具网址:https://java.bejson.com/generator/

注解:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "表名")

模型稍微好理解一点,就是看着不太习惯,iOS里面的模型基本上都是以Model结尾,也第一次接触注解这种玩意,难搞。

 

2、控制层(Controller)

这次跟iOS里面的控制器比较相像,可以简单理解为这层就是和客户端进行交互的,接口路径啥的都是定义在这里。

controller只和service交互。

注解:

@Slf4j
@Validated
@RestController

定义service对象

@Autowired
private IUserTaskService userTaskService;

定义接口

// get接口
@RequestMapping(value = "/api/task/list", method = RequestMethod.GET)
public ResultMsg<?> userTaskList(HttpServletRequest request) {
    return xxxx;
}

// post接口
@RequestMapping(value = "/login/qq/miniprogram", method = RequestMethod.POST)
    public Object login_qq_miniprogram(HttpServletRequest request, @RequestBody QQProgramUserInfo info) {

}

 

3、接口层(service)

这里就是写接口的地方,只写接口返回类型和入参,提供方法给controller层调用,实现交由impl层实现

命名也是前面名字保持统一后面加上service

文件类型:interface

不用注解

 

4、接口实现层(impl)

命名:在接口文件名后面加上 impl

文件类型:class,implements service

快捷键生成对于方法:option+回车

@Service
public class UserGoldCoinAccountServiceImpl implements UserGoldCoinAccountService

注解:

@Service


@Resource
private UserGoldCoinAccountDao userGoldCoinAccountDao;

 

5、Dao层

操作数据库的层级,跟Mapper通信,提供方法给impl调用

文件类型:class

注解:

@Repository

@Resource
private UserGoldCoinAccountMapper userGoldCoinAccountMapper;

eg:

@Repository
public class UserGoldCoinAccountDao {

    @Resource
    private UserGoldCoinAccountMapper userGoldCoinAccountMapper;

    public UserGoldCoinAccountPo getUserGoldCoinAccountDao(String userId) {
        return userGoldCoinAccountMapper.selectUserGoldCoinAccountByUserId(userId);
    }

    public void updateUserGoldCoinAccountDao(UserGoldCoinAccountPo userGoldCoinAccountPo) {
        userGoldCoinAccountMapper.updateByPrimaryKeySelective(userGoldCoinAccountPo);
    }

    public void addUserGoldCoinAccountDao(UserGoldCoinAccountPo userGoldCoinAccountPo) {
        userGoldCoinAccountMapper.insertSelective(userGoldCoinAccountPo);
    }
}

 

6、Mapper层

操作数据库的层级,绑定模型,只定义方法,实现交由同名的xml文件来实现

文件类型:interface 文件名Mapper extends Mapper<模型名>

一般都是返回查询的模型或者int值

注解:

@Component

eg:

@Component
public interface UserGoldCoinAccountMapper extends Mapper<UserGoldCoinAccountPo> {

    UserGoldCoinAccountPo selectUserGoldCoinAccountByUserId(@Param("userId") String userId);
}

 

7、xml层

直接创建File文件,文件名和Mapper名保持完全一致,最后加上文件后缀:.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="mapper文件路径">

    <select id="selectUserGoldCoinAccountByUserId" resultType="返回模型文件路径">
        select * from 表名 where user_id = #{userId} and status = 1 limit 1
    </select>
</mapper>

 

总结:

controller 用 @Autowired  定义 service对象,自身用@Validated @RestController 修饰,--class

service的实现层impl  用 @Autowired 定义Dao对象,自身用 @Service修饰, --interface

dao 用 @Autowired 定义 Mapper对象,自身用@Repository修饰,---class

Mapper 自身用@Component修饰,并通过 extends Mapper<Model> 绑定模型,---interface

xml文件内直接写SQL

 

posted on 2022-10-11 16:11  麦芽呀~  阅读(588)  评论(0编辑  收藏  举报