本文章通过实现一个小功能来介绍Spring+SpringMVC+Mybatis的简单应用流程
关于SSM框架的配置这里就不提了,详情可看上一篇文章
流程介绍: 首先我们有一个地区实体类Area,包含的属性有地区id,地区名称,地区权重,地区创建时间和地区修改时间。
持久层:通过一个AreaDao接口与AreaDao.xml文件来从数据库中读取数据
业务层:通过一个AreaService接口与对应的实现类来调用持久层接口获取数据。
表现层:通过一个Controller类来接收请求,调用AreaService将数据返回给客户端
项目结构图:
Area.java(get set方法自己生成一下)
public class Area {
private Integer areaId;
private String areaName;
//权重
private Integer priority;
private Date creatTime;
private Date lastEditTime;
}
SQL建表与数据插入
create table tb_area
(
area_id int NOT NULL AUTO_INCREMENT,
area_name varchar(200) NOT NULL UNIQUE,
priority int NOT NULL DEFAULT '0',
create_time datetime DEFAULT NULL,
last_edit_time datetime DEFAULT NULL,
primary key(area_id)
)AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8MB4
insert into tb_area values(null,'兰苑',1,null,null)
insert into tb_area values(null,'桂苑',2,null,null)
一.AreaDao接口与AreaDao.xml文件
由于配置了mybaties,我们只需要创建AreaDao接口而无需创建对应的实现类,用一个简单的xml文件取而代之便可。
AreaDao:内容很简单,返回一个Area的List
public interface AreaDao {
/**
* @Description:获取区域列表
* @return: java.util.List<com.mckf.myshop.entity.Area>
*/
List<Area> queryArea();
}
AreaDao.xml文件(放在resources中的mapper目录里)
<?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">
<!--namespace与我们编写好的AreaDao接口类对应-->
<mapper namespace="com.mckf.myshop.dao.AreaDao">
<!--id与接口中的方法对应-->
<!--resultType指定返回类型,我们从数据库中获取的数据会自动转换为指定对象-->
<select id="queryArea" resultType="com.mckf.myshop.entity.Area">
select * from tb_area order by priority DESC
</select>
</mapper>
二.AreaService接口与实现类
AreaService接口:
public interface AreaService {
List<Area> getAreaList();
}
AreaServiceImpl 实现类
@Service注解会将这个类注入Spring容器中进行管理
@Autowired让Spring将合适的bean(通过类型选择)装配到变量中。
@Service
public class AreaServiceImpl implements AreaService {
@Autowired
AreaDao areaDao;
public List<Area> getAreaList() {
return areaDao.queryArea();
}
}
三.AreaController类
@Controller的作用与@Service,@Repository,@Component相同,都是将当前类注入Spring容器中进行管理,只是为了方便阅读才按照三层架构分成了三种形态,实际上并没有什么区别,都是@Component。
@RequestMapping表示当前Controller处理哪些来自前端的请求,如这个listArea()方法处理的请求路径为 “/superadmin/listarea"
@ResponseBody表示将方法的返回值转换为json对象
@Controller
//涉及前端的都用小写
@RequestMapping("/superadmin")
public class AreaController {
@Autowired
AreaService areaService;
@RequestMapping(value = "/listarea",method = RequestMethod.GET)
//将返回结果转换为json对象
@ResponseBody
private Map<String,Object> listArea()
{
Map<String,Object> modelMap=new HashMap<String,Object>();
List<Area> areaList=new ArrayList<Area>();
try
{
areaList=areaService.getAreaList();
modelMap.put("rows",areaList);
modelMap.put("total",areaList.size());
}catch (Exception e)
{
e.printStackTrace();
modelMap.put("success",false);
modelMap.put("errMsg",e.toString());
}
return modelMap;
}
}
四.测试
启动Tomcat,访问对应路径,成功。