欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

简单概述:Controller、Service、Mapper与Entity的三层架构分解

最编程 2024-02-11 06:59:50
...

在上一章和mybatis整合中已经贴过层层调用的代码,这里只对三层结构外加Entity简述

1.controllor层

controllor属于控制层,多数用来实现和前端请求的对接,并判断,前端发出的请求,传入的参数是否符合条件。controllor中的方法将会通过调用service接口来实现。

2.service层

service层为服务层,一些需要完成的动作,操作需要在service层完成
service层分为service接口类和serviceImpl接口实现类
1)service接口类,用来完成controllor方法的请求
2)serviceImpl接口实现类,通过implements service接口类 实现接口方法。同时会调用mapper层的方法。

3.mapper层

数据层,进行数据操作,完成sql语句

package com.tony.luckymoney.mybatistest.mapper;

import com.tony.luckymoney.mybatistest.entity.Luckymoney;
import com.tony.luckymoney.mybatistest.entity.LuckymoneyDetailedInfo;
import com.tony.luckymoney.mybatistest.entity.LuckymoneyStatement;
import com.tony.luckymoney.mybatistest.entity.LuckymoneyType;
import org.apache.ibatis.annotations.*;

import java.util.List;

//@Mapper
public interface LuckyMoneyMapper {

    /**
     *查找所有红包列表
     * @return luckymoney集合
     */
    @Select("SELECT id,consumer,money,producer FROM luckymoney ")
    List<Luckymoney> findAllLuckyMoneyInfo();

    /**
     * 根据红包id查看红包信息
     * @param id 红包id
     * @return luckymoney
     */
    @Select("SELECT id,consumer,money,producer FROM luckymoney where id = #{id}")
    Luckymoney findLuckyMoneyInfoById(@Param("id") Integer id);

    /**
     * 创建红包信息
     * @param luckymoney
     * @return int
     */
    @Insert("INSERT INTO luckymoney (producer,money,typeId) VALUES (#{obj.producer},#{obj.money},#{obj.typeId})")
    @Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")
    int insertLuckyMoneyInfo(@Param("obj") Luckymoney luckymoney);

    /**
     * 根据红包id添加取红包人的信息
     * @param luckymoney luckymoney
     * @return int
     */
    @Update("UPDATE luckymoney SET consumer = #{obj.consumer} WHERE id = #{obj.id} ")
    int updateLuckyMoneyInfo(@Param("obj") Luckymoney luckymoney);

    @Delete("DELETE FROM luckymoney WHERE id = #{id}")
    int deleteLuckyMoneyInfo(@Param("id") Integer id);

    @Select("SELECT id FROM luckymoney WHERE consumer = #{obj.consumer}")
    Luckymoney findLuckyMoneyInfoByConsumer(@Param("obj") Luckymoney luckymoney);

    /**
     * 根据producer找
     * @param luckymoney
     * @return 红包对象集合
     */
    @Select("SELECT id FROM luckymoney WHERE producer = #{obj.producer}")
    List<Luckymoney> findLuckyMoneyInfoByProducer(@Param("obj") Luckymoney luckymoney);

    /**
     * 查红包信息中有和cosumer和producer值都相等的行
     * @param luckymoney
     * @return 符合条件的红包集合
     */
    @Select("SELECT id,consumer,money,producer FROM luckymoney WHERE consumer = #{obj.consumer} AND producer = #{obj.producer}")
    List<Luckymoney> selectLuckyMoneySingleProducerLimit(@Param("obj") Luckymoney luckymoney);

    /**
     * 查找用户已经发送的红包数
     * @param luckymoney
     * @return int
     */
    @Select("SELECT COUNT(producer) FROM luckymoney WHERE producer = #{obj.producer}")
    int countRowNumberByProducer(@Param("obj") Luckymoney luckymoney);

    /**
     * 查找符合条件的行数
     * @param luckymoney
     * @return
     */
    @Select("SELECT COUNT(id) FROM luckymoney WHERE producer = #{obj.producer} AND consumer = #{obj.consumer}")
    int countRowNumberByProducerAndConsumer(@Param("obj") Luckymoney luckymoney);

    /**
     * 添加红包类型表信息
     * @param luckymoneyType
     * @return 几行变化
     */
    @Insert("INSERT INTO luckymoneytype (type) VALUES (#{obj.type})")
    @Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")
    int insertluckyMoneyTypeInfo(@Param("obj") LuckymoneyType luckymoneyType);

    /**
     * 两表内链接查全信息
     * @return 对象LuckymoneyDetailedInfo集合
     */
    @Select("SELECT t0.id as lid,t0.producer as producer,t0.money as money,t0.consumer as consumer,t1.id as tid,t1.type as type FROM luckymoney t0 inner join luckymoneytype t1 on t0.typeId = t1.id ")
    List<LuckymoneyDetailedInfo> selectLuckyMoneyWithType();

    /**
     * 两表内链接查符合固定金额红包的全信息
     * @return 对象LuckymoneyDetailedInfo集合
     */
    @Select("SELECT t0.id as lid,t0.producer as producer,t0.money as money,t0.consumer as consumer,t1.id as tid,t1.type as type FROM luckymoney t0 inner join luckymoneytype t1 on t0.typeId = t1.id WHERE t1.id = 1")
    List<LuckymoneyDetailedInfo> selectLuckyMoneyWithType1();

    /**
     * 两表内链接查符合随机金额红包的全信息
     * @return 对象LuckymoneyDetailedInfo集合
     */
    @Select("SELECT t0.id as lid,t0.producer as producer,t0.money as money,t0.consumer as consumer,t1.id as tid,t1.type as type FROM luckymoney t0 inner join luckymoneytype t1 on t0.typeId = t1.id WHERE t1.id = 2")
    List<LuckymoneyDetailedInfo> selectLuckyMoneyWithType2();

    /**
     * 报表
     * @return 集合
     */
    @Select("select t0.producer,sum(t0.money) as totalAmmount ,count(1) as totalCount,t1.type from luckymoney t0 inner join luckymoneytype t1 on t0.typeId = t1.id group by t1.type,t0.producer")
    List<LuckymoneyStatement> selectLuckyMoneyStatement();
}

4.Entity

entity包中装实体类,他们在mapper层中和数据表中获得的数据源关联,并通过sql语句进行操作,获得新的数据源,反馈给数据库
其中要注意的是,数据库中表列名的别名要和实体类属性名一致,并且要注明是哪个表的哪一列!(t0.id as lid)