本人也是才开始学习,写博客记录学习过程以及记录一些注意关键点。
环境不是本人搭建的,我就直接记录SSM框架下主包要写什么,以下是我学习的理解,有不对的地方可以指正出来:
项目主包:
controller——控制层,连接后台和前台的数据操作(各种逻辑判断)
mapper——用于映射
entity——定义对应数据库内容的实体类
service——服务层,实现具体功能
要完成一个功能:
1、先写实体类entity,定义对象的属性,(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码开始之前)。
2、写Mapper.xml(Mybatis),其中定义你的功能,对应要对数据库进行的那些操作,比如 insert、selectAll、selectByKey、delete、update等。
3、写Mapper.java,将Mapper.xml中的操作按照id映射成Java函数。
4、写Service.java,为控制层提供服务,接受控制层的参数,完成相应的功能,并返回给控制层。
5、写Controller.java,连接页面请求和服务层,获取页面请求的参数,通过自动装配,映射不同的URL到相应的处理函数,并获取参数,对参数进行处理,之后传给服务层。
6、写JSP页面调用,请求哪些参数,需要获取什么数据。
DataBase ===> Entity ===> Mapper.xml ===> Mapper.Java ===> Service.java => Serviceimpl.java=> Controller.java ===> Jsp
以下代码都只是表达基本意思,导入包我没有显示,一般IDE编辑器会自动导入存在的包,在我认为重要的地方写中文注释:
一、写实体类entity,定义对象的属性:
public class TB_AD {
//最主要就是与数据库中内容的表头相对应
private int id;
private int fromdev;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getFromdev() {
return fromdev;
}
public void setFromdev(int fromdev) {
this.fromdev = fromdev;
}
}
二、写Mapper.xml(Mybatis),其中定义你的功能,对应要对数据库进行的那些操作,比如 insert、select、delete、update等。
id——给这个命一个名字以供mapper.java定义接口时的函数名
parameterType——这个是传入数据的类型定义(普通类型int、String、double…)(还有就是调用unity层定义的封装类)
resultType——这个是对输出函数类型的定义,同上。
<!-- 增加 -->
<!--parameterType是实体类dao的绝对路径,但是我在xml中配置开启了别名,就省略了前面,写的相对于xingluo.navigate.entity的路径-->
<insert id="addAd" parameterType="TB_AD">
<!-- 默认参数 -->
insert into tb_ad(id,fromdev,destID,px) values(#{param1},#{param2},#{param3},#{param4})
<!--
固定参数名
insert into tb_dev(id,fromdev,destID,px) values(#{id},#{fromdev},#{destID},#{px})
-->
</insert>
<!-- 删除 -->
<delete id="deleteAd" parameterType="int">
delete from tb_ad where id=#{id}
</delete>
<!-- 修改 -->
<update id="updateAd" parameterType="TB_AD" >
update tb_ad set id=#{id},fromdev=#{fromdev},destID=#{destID},px=#{px} where id=#{id}
</update>
<!-- 查询 -->
<select id="selectById" parameterType="int" resultType="TB_AD">
SELECT * FROM tb_ad where id=#{id}
</select>
<select id="list" parameterType="String" resultType="TB_AD">
SELECT * FROM tb_ad
</select>
三、写Mapper.java,将Mapper.xml中的操作按照id映射成Java函数。
@Param——可以将传进的数据进行固定参数名,以便xml中轻松辨认
public interface TB_DESTMapper {
//增加
void addDest(int id,String destname,double lng,double lat);
//可以注释,将id,destname,lng,lat固定
//void addDest(@Param("id")int id,@Param("destname")String destname,@Param("lng")double lng,@Param("lat")double lat);
//删除
void deleteDest(@Param("id")int id);
//修改
void updateDest(@Param("id")int id,@Param("destname")String destname,@Param("lng")double lng,@Param("lat")double lat);
//查询
List<TB_DEST> selectByName(@Param("destname")String destname);
List<TB_DEST> list();
}
四、写Service.java,为控制层提供服务,接受控制层的参数,完成相应的功能,并返回给控制层。
这个主要就是定义service的接口,一般函数名与mapper.java中函数名一样,方便对应
public interface TB_DESTService {
//增加
void addDest(int id, String destname, double lng, double lat);
//删除
void deleteDest(int id);
//修改
void updateDest(int id, String destname, double lng, double lat);
//查询
List<TB_DEST> getDestByName(String destName);
List<TB_DEST> list();
}
五、写Serviceimpl.java, service的具体实现
@Service——用于标注业务层组件,如果一个类自动带了@Service注解,将自动注册到Spring容器,不需要再在application.xml文件定义bean了
@Autowired—— @Autowired注解的作用是解决对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
@Override—— 1、可以当注释用,方便阅读;
2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。
@Service
public class TB_DESTServiceimpl implements TB_DESTService {
@Autowired
TB_DESTMapper tbdest;
//添加数据
@Override
public void addDest(int id,String destname,double lng,double lat) {
tbdest.addDest(id,destname,lng,lat);
}
//删除
@Override
public void deleteDest(int id) {
tbdest.deleteDest(id);
}
//修改
@Override
public void updateDest(int id, String destname, double lng, double lat) {
tbdest.updateDest(id, destname, lng, lat);
}
//各种查找数据
@Override
public List<TB_DEST> getDestByName(String destname) {
return tbdest.selectByName(destname);
}
@Override
public List<TB_DEST> list() {
return tbdest.list();
}
}
六、写Controller.java,连接页面请求和服务层,获取页面请求的参数,通过自动装配,映射不同的URL到相应的处理函数,并获取参数,对参数进行处理,之后传给服务层。
@Controller——Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了RequestMapping 注解。Controller 只是定义了一个控制器类,而使用RequestMapping 注解的方法才是真正处理请求的处理器。
@RequestMapping——RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
@Controller
public class DestinationControl {
@Autowired
TB_DESTService tbdest;
//查询
//跳转到destination页面,列出设备名称
@RequestMapping("/destination")
public String destination(Model model) {
List<TB_DEST> list = tbdest.list();
model.addAttribute("list",list);
return "destination";
}
@RequestMapping("/selectByDestName")
public String destinationUpdate(HttpServletRequest req,HttpServletResponse resq,Model model)throws ServletException, IOException{
req.setCharacterEncoding("UTF-8");
String destname=req.getParameter("destname");
List<TB_DEST> list = tbdest.getDestByName(destname);
model.addAttribute("list",list);
return "destination";
}
@RequestMapping("/routeSelectByDestName")
public String routeSelectByDestName(HttpServletRequest req,HttpServletResponse resq,Model model)throws ServletException, IOException{
req.setCharacterEncoding("UTF-8");
String destname=req.getParameter("destname");
List<TB_DEST> list = tbdest.getDestByName(destname);
model.addAttribute("list",list);
return "route-selectDest";
}
//跳转到destination-add界面
@RequestMapping("/destination-add")
public String destinationAdd(Model model){
return "destination-add";
}
//增加
@RequestMapping("/addDest")
public String add(HttpServletRequest req,HttpServletResponse resq,Model model) throws ServletException, IOException{
req.setCharacterEncoding("UTF-8");
//获取前台数据,强制转换类型
int id=Integer.parseInt(req.getParameter("id"));
String destname=req.getParameter("destname");
double lng=Double.parseDouble(req.getParameter("lng"));
double lat=Double.parseDouble(req.getParameter("lat"));
tbdest.addDest(id,destname,lng,lat);
List<TB_DEST> list = tbdest.list();
model.addAttribute("list",list);
return "destination";
}
//删除
@RequestMapping("/deleteDest")
protected String deleteDest(HttpServletRequest request, HttpServletResponse response,Model model) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
//接受前端传来的id
int id=Integer.parseInt(request.getParameter("id"));
tbdest.deleteDest(id);
List<TB_DEST> list = tbdest.list();
model.addAttribute("list",list);
return "destination";
}
//修改
@RequestMapping("/destUpdate")
public String update(HttpServletRequest req,HttpServletResponse resq,Model model)throws ServletException, IOException{
req.setCharacterEncoding("UTF-8");
String destname=req.getParameter("destname");
List<TB_DEST> list = tbdest.getDestByName(destname);
model.addAttribute("list",list);
return "destination-update";
}
@RequestMapping("/updateDest")
public String updateDest(HttpServletRequest req,HttpServletResponse resq,Model model) throws ServletException, IOException{
req.setCharacterEncoding("UTF-8");
//获取前台数据,强制转换类型
int id=Integer.parseInt(req.getParameter("id"));
String destname=req.getParameter("destname");
double lng=Double.parseDouble(req.getParameter("lng"));
double lat=Double.parseDouble(req.getParameter("lat"));
tbdest.updateDest(id, destname, lng, lat);
List<TB_DEST> list = tbdest.list();
model.addAttribute("list",list);
return "destination";
}
}
七、写JSP页面调用,请求哪些参数,需要获取什么数据。
这个主要是前台编写,我只是实现 增、删、改、查 基本功能只能大概看一下。。。。。
最后附上几张截图: