栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

框架整合战斗压缩储备粮-SSH(致敬经典)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

框架整合战斗压缩储备粮-SSH(致敬经典)

看某些同学在那儿做个单表CRUD,半天还不出效果,还那儿调Bug,我的心情啊

 就那么一句话,多练,实现多了自然掌握。针对于总有些自认为基础不好的同学,认为是原理没学透,底层没有掌握,所以代码不能出效果,  这时候,我经常跟这些同学打个比喻,来给我解释解释自行车的平衡原理,为什么两条腿在作圆圈运动,两个车轱辘就往前走,还居然不倒?我相信,你百度半天,肯定能找到对应文章,好,你把这些文章组织组织,找个不会骑自行车的人,你让他看,给他讲这个平衡原理,给他看视频,给他说,让他背原理,然后你让他骑,你看他会不会!!!

所以说其实单表CRUD就是经常操作,多写,多出Bug,多DeBug。边实践边总结,那么废话不多说,下面是一贯的怼代码,咱们的目标:不会写代码的厨子不是好司机。让厨子一看也能实现效果

好先来张图说下最终效果的目录结构,一定要瞧好目录结构!!!

要说传统项目就是配置文件最麻烦,但是谁说让你背下来了!!!哎呦。。。

这个工程可以看到一共4个配置文件,6个类文件,还有pom文件一个

pom坐标,这东西你乐意背,你背吧。



   4.0.0

   cn.wfb.demo
   ssh_demo
   1.0-SNAPSHOT
   war

   
       
       UTF-8
       1.8
       1.8
   

   
       
           com.alibaba
           fastjson
           1.1.37
       
       
       
       
           org.hibernate
           hibernate-core
           5.3.1.Final
       
       
       
       
           org.apache.struts
           struts2-core
           2.5.14.1
       
       
       
       
           org.apache.struts
           struts2-spring-plugin
           2.5.14.1
       
       
           org.apache.struts
           struts2-convention-plugin
           2.5.14.1
       
       
           org.apache.struts
           struts2-json-plugin
           2.5.14.1
       
       
       
       
           org.springframework
           spring-core
           5.0.6.RELEASE
       
       
       
           org.springframework
           spring-context
           5.0.6.RELEASE
       
       
       
           org.springframework
           spring-jdbc
           5.0.6.RELEASE
       
       
       
           org.springframework
           spring-beans
           5.0.6.RELEASE
       
       
       
           org.springframework
           spring-web
           5.0.6.RELEASE
       
       
       
           org.springframework
           spring-expression
           5.0.6.RELEASE
       
       
       
           org.springframework
           spring-orm
           5.0.6.RELEASE
       
       
       
           cglib
           cglib
           3.2.6
       
       
       
       
           org.aspectj
           aspectjrt
           1.9.0
       
       
       
           org.aspectj
           aspectjweaver
           1.9.0
       
       
       
       
           mysql
           mysql-connector-java
           5.1.16
       
       
       
           com.mchange
           c3p0
           0.9.5.1
       

       
           org.springframework
           spring-test
           5.0.6.RELEASE
           test
       

       
           javax.servlet
           servlet-api
           2.5
           provided
       

   

   
       
           
               org.apache.maven.plugins
               maven-compiler-plugin
               2.3.2
               
                   1.8
                   1.8
               
           
           
               org.apache.tomcat.maven
               tomcat7-maven-plugin
               2.2
               
                   
                   8080
                   
                   /
               
           
       
   

其中包括启动就加载的web.xml,




   
   
       org.springframework.web.context.ContextLoaderListener
   
   
       contextConfigLocation
       classpath:applicationContext.xml
   
   

   
       openSessionInView
       org.springframework.orm.hibernate5.support.OpenSessionInViewFilter
   
   
       openSessionInView
       
@Entity   //实体类注解
public class TScore {

   @Id  //主键注解
   private Integer id;
   private String name;
   private String subject;
   private String fraction;

   public Integer getId() {
       return id;
  }

   public void setId(Integer id) {
       this.id = id;
  }

   public String getName() {
       return name;
  }

   public void setName(String name) {
       this.name = name;
  }

   public String getSubject() {
       return subject;
  }

   public void setSubject(String subject) {
       this.subject = subject;
  }

   public String getFraction() {
       return fraction;
  }

   public void setFraction(String fraction) {
       this.fraction = fraction;
  }
}

dao层接口

package cn.wfb.dao;
import cn.wfb.entity.TScore;
import java.util.List;

public interface ScoreDao {
    List findAll();
    void add(TScore score);
}

dao实现类

package cn.wfb.dao.impl;

import cn.wfb.dao.ScoreDao;
import cn.wfb.entity.TScore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateTemplate;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository //这个注解能少吗?
public class ScoreDaoImpl extends HibernateDaoSupport implements ScoreDao {

   @Autowired
   private HibernateTemplate hibernateTemplate;

   @Override
   public List findAll() {
       TScore dept = new TScore(); //可以根据对象条件进行查询
       return hibernateTemplate.findByExample(dept);
  }

   @Override
   public void add(TScore score) {
       hibernateTemplate.save(score);
  }
}

service接口

package cn.wfb.service;
import cn.wfb.entity.TScore;
import java.util.List;

public interface ScoreService {
   List findAll();
   void add(TScore score);
}

service实现类

package cn.wfb.service.impl;

import cn.wfb.dao.ScoreDao;
import cn.wfb.entity.TScore;
import cn.wfb.service.ScoreService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ScoreServiceImpl implements ScoreService {

   @Autowired
   private ScoreDao scoreDao;

   @Override
   public List findAll() {
       return scoreDao.findAll();
  }

   @Override
   public void add(TScore dept) {
       scoreDao.add(dept);
  }
}

controller类

package cn.wfb.controller;//返回jsp页面采用下面配置


import cn.wfb.entity.TScore;
import cn.wfb.service.ScoreService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


@Controller(value = "scoreAction")//用于标注控制层组件(如struts中的action)
@Scope("prototype")//单列模式
@ParentPackage("struts-default")
@Namespace("/")
public class ScoreAction extends ActionSupport {

   // 引入Service
   @Autowired
   private ScoreService scoreService;

   //这个实体类和get,set方法是为了接收到请求传入的对象,关于这个需要研究Struts传值问题
   //前端采用表单提交方式score.name属性,记得几个属性都要赋值啊。因为数据库属性你自己好好看看!!
   private TScore score;

   public TScore getScore() {
       return score;
  }

   public void setScore(TScore score) {
       this.score = score;
  }


   @Action(value = "list")
   public void list() {
       List deptList = scoreService.findAll();
       //已经不用jsp了,所以考虑返回json数据
       write(deptList);
  }

   @Action(value = "add")
   public void add() {
       try {
           scoreService.add(score);
           Map result = new HashMap<>();
           result.put("success",true);
           result.put("message","add ok");
           write(result);
      } catch (Exception e) {
           e.printStackTrace();
           Map result = new HashMap<>();
           result.put("success",false);
           result.put("message","add error");
           write(result);
      }
  }

   
   public void write(Object object) {
       //对象转json,并取消循环引用
       String jsonString = JSON.toJSonString(object, SerializerFeature.DisableCircularReferenceDetect);
       //获取response设置头信息及编码格式
       HttpServletResponse response = ServletActionContext.getResponse();
       response.setHeader("Content-type", "text/html;charset=UTF-8");
       response.setCharacterEncoding("UTF-8");
       try {
           //写出
           response.getWriter().print(jsonString);
      } catch (IOException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
      }
  }
}

效果出来了,Bug不要怕,出了Bug我们就可以Debug,多快乐啊,要没有Bug,我们创造Bug,然后集中力量解决Bug!!!这调调熟悉不?

        查询,新增,亲测效果如图,童叟无欺。赶紧cv大法试一试吧。马上精通SSH,开心不。

 

每日论点:

        我总能听到,前端好还是后端好,(就跟移动端都死翘翘了一样,哎。。。)。好吧,我只能说,没有后端前端做毛逻辑,前端面对的是产品经理,来看一下,产品经理每天都拽着美术设计干嘛呢~。。

当然产品们跑过来让前端来几套皮肤烘托节日气氛,是常有的事,哈哈哈哈。这时候我奉劝做后端的小伙伴,千万不要鲁莽的评论前端效果的好与坏,反正不是后端写的,还是猥琐发育吧,后端同学们。

                折腾完前端的产品经理,碰到出来喝咖啡的后端。。。。

前端光鲜亮丽,后端撅着大腚写逻辑,谁都离不开谁。他们面对产品经理更多一些,毕竟产品耍嘴皮的多不太懂技术。要求图标左右上下的动,有时候还要带旋转效果,再来个奔放红啥的,折腾前端多些。后端被折腾无非就是变态需求来回改,这帮子老改犯的产品。前后端其实都是一帮掉头发的职业玩。。。

支付宝扫一扫得红包

 你的支持是我的动力 

 

 

欢迎关注公众号:魏凡缤Java技术文章

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/308481.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号