SSM项目实战-service实现

1、SysUserService.java

package com.atguigu.schedule.service;

import com.atguigu.schedule.pojo.SysUser;

public interface SysUserService {
    SysUser getSysUser(SysUser sysUser);
}

2、SysUserServiceImpl.java

package com.atguigu.schedule.service.impl;
import com.atguigu.schedule.mapper.SysUserMapper;
import com.atguigu.schedule.pojo.SysUser;
import com.atguigu.schedule.service.SysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
public class SysUserServiceImpl implements SysUserService {

    @Autowired
    private SysUserMapper sysUserMapper;

    @Override
    @Transactional(readOnly = true)
    public SysUser getSysUser(SysUser sysUser) {
        return sysUserMapper.getSysUser(sysUser);
    }
}

3、ScheduleQueryVo.java 

package com.atguigu.schedule.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
//日程的查询条件封装成一个java对象,我们将这样的对象称之为查询条件对象(Query Object)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ScheduleQueryVo {
    private Integer uid;
    private Integer pageNum;   //页码:显示第几页
    private Integer pageSize = 3;  //页大小
}

3、ScheduleService.java

package com.atguigu.schedule.service;
import com.atguigu.schedule.pojo.Schedule;
import com.atguigu.schedule.vo.ScheduleQueryVo;
import com.github.pagehelper.PageInfo;
public interface ScheduleService {
    PageInfo getSchedulePageInfo(ScheduleQueryVo queryVo);
}

4、ScheduleServiceImpl.java

package com.atguigu.schedule.service.impl;
import com.atguigu.schedule.mapper.ScheduleMapper;
import com.atguigu.schedule.pojo.Schedule;
import com.atguigu.schedule.service.ScheduleService;
import com.atguigu.schedule.vo.ScheduleQueryVo;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@Transactional
public class ScheduleServiceImpl implements ScheduleService {

    @Autowired
    private ScheduleMapper scheduleMapper;

    @Override
    @Transactional
    public PageInfo getSchedulePageInfo(ScheduleQueryVo queryVo) {
        PageHelper.startPage(queryVo.getPageNum(), queryVo.getPageSize());
        List scheduleList = scheduleMapper.getScheduleList(queryVo.getUid());
        return new PageInfo<>(scheduleList);
    }
}

SSM项目实战-service实现_第1张图片

 

5、@Autowired不建议在字段上使用的原因有以下几点:

  1. 无法用于final修饰的变量:在基于字段的依赖注入中,如果字段是final类型,那么这个字段的值在类实例化的过程中就需要被初始化。然而,@Autowired注解无法在初始化时注入final类型的变量,因此需要使用基于构造函数的依赖注入。
  2. 掩饰单一职责的设计思想:如果一个类使用了过多的@Autowired注解,那么这个类的构造函数参数可能会变得很庞大。这可能会违反单一职责原则,使得这个类承担了过多的职责。使用基于构造函数的依赖注入可以避免这个问题。
  3. 可能导致循环依赖:当两个类互相注入时,就可能形成一个循环依赖。例如,类A注入了类B的实例,而类B又注入了类A的实例,这样就会形成一个无法解析的循环依赖。为了避免这种情况,建议使用基于构造函数的依赖注入。
  4. 无法设置final或static变量:基于字段的依赖注入无法将注入的对象设置为final或static变量。这是因为final类型的变量需要在类实例化的过程中进行初始化,而基于字段的依赖注入无法在初始化时注入final类型的变量。同时,由于字段注入需要在类实例化之后才能进行,因此也无法注入static类型的变量。

总之,虽然@Autowired注解可以方便地进行依赖注入,但是在使用时需要注意其限制和潜在问题。在需要注入final或static类型的变量时,或者当一个类需要承担过多的职责时,建议使用基于构造函数的依赖注入。

你可能感兴趣的:(SSM整合实战,ssm,Spring,SpringMVC,MyBatis,transactional,PageInfo,PageHelper)