简单概述: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)
上一篇: 理解JavaEE中的三层架构模型详解