简单的SSH项目案例增删查,使用注解开发

项目未动,数据库先搭,MySQL数据库名称为s

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for classes
-- ----------------------------
DROP TABLE IF EXISTS `classes`;
CREATE TABLE `classes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cname` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of classes
-- ----------------------------
INSERT INTO `classes` VALUES ('1', 'Java');
INSERT INTO `classes` VALUES ('2', 'C#/.Net');
INSERT INTO `classes` VALUES ('3', 'C语言');
INSERT INTO `classes` VALUES ('4', '数据库');

-- ----------------------------
-- Table structure for faqs
-- ----------------------------
DROP TABLE IF EXISTS `faqs`;
CREATE TABLE `faqs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
  `createdate` datetime DEFAULT NULL,
  `content` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
  `classid` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- ----------------------------
-- Records of faqs
-- ----------------------------
INSERT INTO `faqs` VALUES ('1', '如何安装配置IIS', '2012-10-19 00:00:00', '放假啊浪费大家阿里山扩大发生快递费', '2');
INSERT INTO `faqs` VALUES ('2', '如何理解指针', '2012-12-17 00:00:00', '放假啊浪费大家阿里山扩大发生快递费', '3');
INSERT INTO `faqs` VALUES ('3', 'JavaWeb开发的常用服务器有哪些', '2009-10-15 00:00:00', '放假啊浪费大家阿里山扩大发生快递费', '1');
INSERT INTO `faqs` VALUES ('4', 'javaOOP', '2021-10-22 11:53:01', 'dfada', '1');
INSERT INTO `faqs` VALUES ('5', 'javaee', '2021-10-22 12:00:18', '          ee', '3');

web图

 先导入lib的包:百度网盘 请输入提取码        提取码:3j4x

web=>WEB-INF=>web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--监听器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!--交给spring托管-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

web=>index.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<%--
  Created by IntelliJ IDEA.
  User: 小米2020
  Date: 2021/10/21
  Time: 19:43
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>
  <head>
    <title>$Title$</title>
    <%--bootstrap框架--%>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"/>
  </head>
  <body>
    <h1 style="text-align: center">常见问题检索</h1>
    <div style="text-align: center"><a  href="add.jsp" class="btn btn-default" role="button">添加常见问题</a></div>
    <table class="table table-bordered">
      <thead>
        <th>编号</th>
        <th>标题</th>
        <th>创建时间</th>
        <th>分类</th>
        <th>操作</th>
      </thead>
      <tbody>
      <s:iterator status="status" value="list">

        <tr>
          <td><s:property value="id"/></td>
          <td><s:property value="title"/></td>
          <td><s:property value="createdate"/></td>
          <td><s:property value="classidToString"/></td>
          <td><input type="button" id="delete" class="btn btn-danger" onclick="e(<s:property value="id"/>)" value="删除"></td>
        </tr>

      </s:iterator>
      </tbody>
    </table>
  </body>

  <script type="text/javascript" src="js/jquery-1.8.3.js"></script>
  <script>
    function e(e){
      if (confirm("确认删除?")){
        window.location.href="/delete?id="+e;
      }
    }
  </script>
</html>

web=>add.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <script src="js/jquery-1.8.3.js"></script>
  <script>
    function index(){
      window.location.href="list";
    }

    function myFunction(){
      //name获取的是数组,所以得获取0下标的值
      var classid=document.getElementsByName('classid')[0].value;
      var title=document.getElementsByName('title')[0].value;
      var content=document.getElementsByName('content')[0].value;
      if (classid==null||classid==0){
        alert('请选择分类');
        return false;
      }else if(title==null||title==""){
        alert('请填写标题');
        return false
      }else if(content==null||content==""){
        alert('请填写内容');
        return false;
      }
      return true;
    }
  </script>
  <body>
  <form action="/add" onsubmit="return myFunction()" method="post">
    <table align="center">
      <tr>
        <td></td>
        <td><h2>添加常见问题</h2></td>
      </tr>
      <tr>
        <td>
          <h4>分类:</h4>
        </td>
        <td>
          <select name="classid">
            <option value="0">--请选择分类--</option>
            <option value="1">Java</option>
            <option value="2">C语言</option>
            <option value="3">C#/.NET</option>
            <option value="4">PHP</option>
          </select>
        </td>
      </tr>
      <tr>
        <td>
          <h4>标题:</h4>
        </td>
        <td>
          <input name="title" type="text"/>
        </td>
      </tr>
      <tr>
        <td>
          <h4>内容:</h4>
        </td>
        <td>
          <textarea cols="20" rows="4" name="content">
          </textarea>
        </td>
      </tr>
      <tr>
        <td>
          <button type="submit">保存</button>
        </td>
        <td>
          <button type="reset">重置</button>
          <button type="button" onclick="index()">放弃</button>
        </td>
      </tr>
    </table>
  </form>
  </body>
</html>

启动配置tomcat,启动项目看能否正常运行


resource文件图

 applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop.xsd
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx.xsd">

    <context:component-scan base-package="com.tang.dao.impl,com.tang.service.impl,com.tang.controller"/>

    <!--配置sessionFactory-->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
    </bean>

    <!--配置hibernateTemplate-->
    <bean name="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <!-- 开启事务管理器,用注解方式使用事务 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <!-- 开启事务,记得在需要开启事务的类上 使用@Transaction-->
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

 hibernate.cfg.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <!-- 数据库连接配置 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/s?serverTimezone=UTC&amp;characterEncoding=utf-8</property>
        <property name="connection.username">root</property>
        <property name="connection.password"></property>
        <!-- 每个数据库都有1个,针对特定的关系型数据库生成优化的SQL -->
        <property name="dialect">org.hibernate.dialect.SQLServer2008Dialect</property>

        <!-- 设置默认的数据库连接池 -->
        <property name="connection.pool_size">5</property>

        <!-- 显示SQL -->
        <property name="show_sql">true</property>

        <!-- 格式化SQL -->
        <property name="format_sql">true</property>

        <!-- 根据schema更新数据表的工具 -->
        <property name="hbm2ddl.auto">update</property>

        <!-- 数据表映射配置文件 -->
        <mapping resource="classes.hbm.xml"/>

        <mapping resource="faqs.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

 classes.hbm.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

    <class name="com.tang.pojo.Classes" table="classes">
        <id name="id" column="id">
            <generator class="native"></generator>
        </id>
        <property name="cname" column="cname" type="string"/>
     </class>

</hibernate-mapping>

faqs.hbm.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

    <class name="com.tang.pojo.Faqs" table="faqs">
        <id name="id" column="id">
            <generator class="native"></generator>
        </id>
        <property name="title" column="title" type="string"/>
        <property name="createdate" column="createdate"/>
        <property name="content" column="content" type="string"/>
        <property name="classid" column="classid" type="int"/>
<!--        <one-to-one name="classid" constrained="true"></one-to-one>-->
     </class>

</hibernate-mapping>

log4j.properties

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=info, stdout

java代码图

com.tang.pojo.Classes.java

package com.tang.pojo;

/**
 * @version 1.0
 * @Author Tang
 * @Date 2021/10/21 18:56
 * @注释
 */
public class Classes {

    private int id;

    private String cname;

    public Classes() {
    }

    public Integer getId() {
        return id;
    }

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

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    @Override
    public String toString() {
        return "Classes{" +
                "id=" + id +
                ", cname='" + cname + '\'' +
                '}';
    }
}

 com.tang.pojo.Faqs.java

package com.tang.pojo;

import java.util.Date;

/**
 * @version 1.0
 * @Author Tang
 * @Date 2021/10/21 18:57
 * @注释
 */
public class Faqs {

    private int id;

    private String title;

    private String createdate;

    private String content;

    private Integer classid;

    private String classidToString;

    public Faqs() {
    }

    public Integer getId() {
        return id;
    }

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

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getCreatedate() {
        return createdate;
    }

    public void setCreatedate(String createdate) {
        this.createdate = createdate;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public Integer getClassid() {
        return classid;
    }

    public void setClassid(Integer classid) {
        if (classid==1){
            this.classidToString="Java";
        }else if (classid==2){
            this.classidToString="C#.Net";
        }else if (classid==3){
            this.classidToString="C语言";
        }else if (classid==4){
            this.classidToString="数据库";
        }

        this.classid = classid;
    }

    public String getClassidToString() {
        return classidToString;
    }

    @Override
    public String toString() {
        return "Faqs{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", createdate=" + createdate +
                ", content='" + content + '\'' +
                ", classidToString='" + classidToString + '\'' +
                '}';
    }
}

com.tang.controller.action.FaqsController.java

package com.tang.controller.action;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.tang.pojo.Faqs;
import com.tang.service.FaqsService;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * @version 1.0
 * @Author Tang
 * @Date 2021/10/21 19:28
 * @注释
 */
@Namespace("/")
@ParentPackage("struts-default")
@Controller
public class FaqsController extends ActionSupport implements ModelDriven<Faqs> {

    private List<Faqs> list;

    public List<Faqs> getList() {
        return list;
    }

    @Autowired
    private FaqsService faqsService;

    private Faqs faqs=new Faqs();

    @Override
    public Faqs getModel() {
        return faqs;
    }

    /**
     * 主页面查询
     * @return
     */
    @Action(value = "list",results = {@Result(name = "success",location = "/index.jsp")})
    public String faqsList(){
        System.out.println("FaqsController=>faqsList()");
        list = faqsService.faqsList();
        return SUCCESS;
    }

    @Action(value = "delete",results = {@Result(name = "success",location = "list",type ="chain")})
    public String delete(){
        System.out.println("FaqsController=>delete()");
        faqsService.deleteFaqs(faqs.getId());
        return SUCCESS;
    }

    @Action(value = "add",results = {@Result(name = "success",location = "list",type = "chain")})
    public String addFags(){
        System.out.println("FaqsController=>addFags()");
        SimpleDateFormat sdf = new SimpleDateFormat();// 格式化时间
        sdf.applyPattern("yyyy-MM-dd HH:mm:ss");// a为am/pm的标记
        Date date = new Date();// 获取当前时间
        faqs.setCreatedate(sdf.format(date));
        faqsService.addFaqs(faqs);
        return SUCCESS;
    }

}

com.tang.service.FaqsService.java

package com.tang.service;

import com.tang.pojo.Faqs;

import java.util.List;

/**
 * @version 1.0
 * @Author Tang
 * @Date 2021/10/21 19:32
 * @注释
 */
public interface FaqsService {

    void addFaqs(Faqs faqs);

    List<Faqs> faqsList();

    void deleteFaqs(int id);

}

 com.tang.service.impl.FaqsServiceImpl.java

package com.tang.service.impl;

import com.tang.dao.FaqsDao;
import com.tang.pojo.Faqs;
import com.tang.service.FaqsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @version 1.0
 * @Author Tang
 * @Date 2021/10/21 19:33
 * @注释
 */
@Service("faqsService")
@Transactional
public class FaqsServiceImpl implements FaqsService {

    @Autowired
    private FaqsDao faqsDao;

    @Override
    public void addFaqs(Faqs faqs) {
        faqsDao.addFaqs(faqs);
    }

    @Override
    public List<Faqs> faqsList() {
        return faqsDao.faqsList();
    }

    @Override
    public void deleteFaqs(int id) {
        faqsDao.deleteFaqs(id);
    }
}
com.tang.dao.FaqsDao.java
package com.tang.dao;

import com.tang.pojo.Faqs;

import java.util.List;

/**
 * @version 1.0
 * @Author Tang
 * @Date 2021/10/21 19:10
 * @注释
 */
public interface FaqsDao {

    void addFaqs(Faqs faqs);

    List<Faqs> faqsList();

    void deleteFaqs(int id);
}
com.tang.dao.impl.FaqsDaoImpl.java
package com.tang.dao.impl;

import com.tang.dao.FaqsDao;
import com.tang.pojo.Faqs;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.classic.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @version 1.0
 * @Author Tang
 * @Date 2021/10/21 19:12
 * @注释
 */
@Repository("faqsDao")
public class FaqsDaoImpl implements FaqsDao {

    @Autowired
    private HibernateTemplate hibernateTemplate;

    @Autowired
    private SessionFactory sessionFactory;

    @Override
    public void addFaqs(Faqs faqs) {
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        session.save(faqs);
        tx.commit();
    }


    @Override
    public List<Faqs> faqsList() {
        Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
            Query query = session.createQuery("from Faqs");
            List<Faqs> list = query.list();
            tx.commit();
            return list;
    }

    @Override
    public void deleteFaqs(int id) {
        Session session = sessionFactory.openSession();
        Transaction ts = session.beginTransaction();
        Faqs faqs = (Faqs) session.get(Faqs.class, id);
        session.delete(faqs);
        ts.commit();
    }
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值