store(商城项目)Springboot+springmvc+ajax+mybatis(八)

32. 收货地址-增加-前端页面

33. 省市区-导入数据表及数据

下载t_dict_district.zip得到SQL脚本,然后,登录MySQL控制台,使用tedu_store数据库,并执行

source 脚本文件的路径

34. 省市区-创建实体类

cn.tedu.store.entity下创建District类,实现Serializable接口:

public class District implements Serializable {
    private Integer id;
    private String parent;
    private String code;
    private String name;
    // SET/GET/基于id的hashCode和equals/toString
}

35. 省市区-获取列表-持久层

获取全国所有省/获取某省所有市/获取某市所有区时,需要执行的SQL语句是相同的,大致是:

select * from t_dict_district where parent=? order by code

则在编写代码时,先在cn.tedu.store.mapper下创建DistrictMapper接口,并在接口中添加抽象方法:

/**
 * 处理省/市/区数据的持久层接口
 */
public interface DistrictMapper {

    /**
     * 查询全国所有省/某省所有市/某市所有区的列表
     * @param parent 父级单位的行政代号,如果需要查询全国所有省,则使用"86"作为父级代号
     * @return 匹配的全国所有省/某省所有市/某市所有区的列表
     */
    List<District> findByParent(String parent);

}

src/main/resources/mappers下将AddressMapper.xml复制,并得到DistrictMapper.xml,在DistrictMapper.xml中,删除原有配置代码,并配置以上抽象方法的映射:

<mapper namespace="cn.tedu.store.mapper.DistrictMapper">

    <!-- 查询全国所有省/某省所有市/某市所有区的列表 -->
    <!-- List<District> findByParent(String parent) -->
    <select id="findByParent"
        resultType="cn.tedu.store.entity.District">
        SELECT
            *
        FROM
            t_dict_district
        WHERE
            parent=#{parent}
        ORDER BY
            code ASC
    </select>

</mapper>

src/test/javacn.tedu.store.mapper下创建DistrictMapperTests测试类,在测试类的声明之前添加2项注解,并测试以上抽象方法的功能:

@RunWith(SpringRunner.class)
@SpringBootTest
public class DistrictMapperTests {

    @Autowired
    private DistrictMapper mapper;

    @Test
    public void findByParent() {
        String parent = "86";
        List<District> list = mapper.findByParent(parent);
        System.err.println("count=" + list.size());
        for (District item : list) {
            System.err.println(item);
        }
    }

}

36. 省市区-获取列表-业务层

cn.tedu.store.service包中创建IDistrictService业务接口,并在接口中添加抽象方法:

/**
 * 处理省/市/区数据的业务层接口
 */
public interface IDistrictService {

    /**
     * 查询全国所有省/某省所有市/某市所有区的列表
     * @param parent 父级单位的行政代号,如果需要查询全国所有省,则使用"86"作为父级代号
     * @return 匹配的全国所有省/某省所有市/某市所有区的列表
     */
    List<District> getByParent(String parent);

}

cn.tedus.store.service.impl包中创建DistrictServiceImpl业务实现类,实现以上接口,添加@Service注解,添加@Autowired private DistrictMapper districtMapper;持久层对象,并重写抽象方法:

public List<District> getByParent(String parent) {
    // 调用持久层对象的查询,得到列表
    // 遍历查询到的列表
    // -- 将列表项的id和parent设置为null
    // 返回列表
}

具体代码为:

/**
 * 处理省/市/区数据的业务层实现类
 */
@Service
public class DistrictServiceImpl implements IDistrictService {

    @Autowired
    private DistrictMapper districtMapper;

    @Override
    public List<District> getByParent(String parent) {
        // 调用持久层对象的查询,得到列表
        List<District> list = districtMapper.findByParent(parent);
        // 遍历查询到的列表
        for (District district : list) {
            // 将列表项的id和parent设置为null
            district.setId(null);
            district.setParent(null);
        }
        // 返回列表
        return list;
    }

}

最后,在src/test/javacn.tedu.store.service下创建DistrictServiceTests测试类,在测试类的声明之前添加2项注解,并测试以上抽象方法的功能:

@RunWith(SpringRunner.class)
@SpringBootTest
public class DistrictServiceTests {

    @Autowired
    private IDistrictService service;

    @Test
    public void getByParent() {
        String parent = "86";
        List<District> list = service.getByParent(parent);
        System.err.println("count=" + list.size());
        for (District item : list) {
            System.err.println(item);
        }
    }

}

37. 省市区-获取列表-控制器层

关于需要处理的请求:

请求路径:/districts/
请求参数:String parent
请求方式:GET
响应结果:JsonResult<List<District>>
是否拦截:否,不需要登录就可以访问

由于不需要拦截,所以,先在拦截器的配置类InterceptorConfigurer类中添加/district/**到白名单!

先在cn.tedu.store.controller包中创建DistrictController类,继承自BaseController,在类的声明之前添加@RestController@RequestMapping("districts")注解,并在类中声明@Autowired private IDistrictService districtService;业务接口:

/**
 * 处理省/市/区数据相关请求的控制器类
 */
@RestController
@RequestMapping("districts")
public class DistrictController extends BaseController {

    @Autowired
    private IDistrictService districtService;

}

然后,在类中添加处理请求的方法:

// http://localhost:8080/districts/?parent=86
@GetMapping({"", "/"})
public JsonResult<List<District>> getByParent(String parent) {
    // 调用业务对象获取数据
    // 返回OK与数据
}

38. 省市区-获取列表-前端页面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饭九钦vlog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值