005杰信-factory删除数据

factory表的删除分为两种:单行删除,以及批量删除。

过程:在jFactoryCreate.jsp页面上两个按钮,单行删除以及批量删除。

选中好序号后,进入action请求,然后进入Controller控制器(FactoryController.java),进入到FactoryController.java里面的public String deleteById(String id)方法或者public String delete(@RequestParam("id")String[] ids)方法。然后进入里面的Service层,然后进入到Dao层,然后调用Mybatis的FactoyMapper.xml里面的方法。

具体做法:

项目结构:

jFactoryList.jsp代码:

<%@ page language="java" pageEncoding="UTF-8"%>
<hr>
    <font color="blue"><b>引入CSS、JS区域</b></font>
<hr>

<%@ include file="../../baselist.jsp"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>

<body>
<form name="icform" method="post">

<div id="menubar">
<div id="middleMenubar">
<div id="innerMenubar">
  <div id="navMenubar">
<ul>

<hr>
    <font color="blue"><b>按钮区域</b></font>
<hr>

<li id="view"><a href="#" onclick="formSubmit(‘toview.action‘,‘_self‘);this.blur();">查看</a></li>
 <li id="new"><a href="#" onclick="formSubmit(‘factorycreate.action‘,‘_self‘);this.blur();">新增</a></li>
  <li id="update"><a href="#" onclick="formSubmit(‘jfactoryupdate.action‘,‘_self‘);this.blur();">修改</a></li>
   <li id="delete"><a href="#" onclick="formSubmit(‘deleteById.action‘,‘_self‘);this.blur();">删除</a></li>
    <li id="delete"><a href="#" onclick="formSubmit(‘delete.action‘,‘_self‘);this.blur();">批量删除</a></li>
</ul>
  </div>
</div>
</div>
</div>

<!-- 页面主体部分(列表等) -->
<div class="textbox" id="centerTextbox">
  <div class="textbox-header">
  <div class="textbox-inner-header">
  <div class="textbox-title">

<hr>
    <font color="blue"><b>标题</b></font>
<hr>

    生产厂家列表
  </div>
  </div>
  </div>

<div>

<hr>
    <font color="blue"><b>列表区域</b></font>
<hr>

<div class="eXtremeTable" >
<table id="ec_table" class="tableRegion" width="98%" >
    <thead>
    <tr>
        <td class="tableHeader"><input type="checkbox" name="selid" onclick="checkAll(‘id‘,this)"></td>
        <td class="tableHeader">序号</td>
        <td class="tableHeader">厂家全称</td>
        <td class="tableHeader">缩写</td>
        <td class="tableHeader">联系人</td>
        <td class="tableHeader">电话</td>
        <td class="tableHeader">手机</td>
        <td class="tableHeader">传真</td>
        <td class="tableHeader">验货员</td>

    </tr>
    </thead>
    <tbody class="tableBody" >
    <!--var="o"的意思是给datalist取个别名,之后用起来就简单了-->
    <c:forEach items="${datalist}" var="o" varStatus="status">
    <tr class="odd" onmouseover="this.className=‘highlight‘" onmouseout="this.className=‘odd‘" >
    <!-- 做了一个选择框 -->
        <td><input type="checkbox" name="id" value="${o.id}"/></td>
        <td>${status.index+1}</td>
        <td><a href="toview.action?id=${o.id}">${o.fullName}</a></td>
        <td>${o.factoryName}</td>
        <td>${o.contacts}</td>
        <td>${o.phone }</td>
         <td>${o.mobile }</td>
         <td>${o.fax }</td>
         <td>${o.inspector }</td>

    </tr>
    </c:forEach>

    </tbody>
</table>
</div>

</div>

</form>
</body>
</html>

点击删除按钮,执行formSubmit(‘jfactoryupdate.action‘,‘_self‘)请求。来到FactoryContrall.java。

FactoryContrall.java代码如下:

package cn.itcast.jk.controller.basicinfo.factory;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import cn.itcast.jk.controller.BaseController;
import cn.itcast.jk.domain.Factory;
import cn.itcast.jk.service.FactoryService;
@Controller
public class FactoryController extends BaseController {
  @Resource
    FactoryService factoryService;

    //列表
    @RequestMapping("/basicinfo/factory/list.action")
    public String list(Model model)
    {

        List<Factory> datalist=factoryService.find(null);
        model.addAttribute("datalist", datalist);//将我的数据传递到页面;

        return "/basicinfo/factory/jFactoryList.jsp";

    }

    //删除一个
    @RequestMapping("/basicinfo/factory/deleteById.action")
    public String deleteById(String id)
    {

        factoryService.deleteById(id);
         return "redirect:/basicinfo/factory/list.action";

    }

    //删除多个
    @RequestMapping("/basicinfo/factory/delete.action")
    //@RequestParam("id")String[] ids 表示在页面上叫做id,但是我封装的时候封装成ids
    //因为声明的是数组所以会自动的拆分 这里不同的话参考Springmvc专辑的文章23各种参数绑定方式
    public String delete(@RequestParam("id")String[] ids)
    {

        factoryService.delete(ids);
         return "redirect:/basicinfo/factory/list.action";

    }

}

然后执行里面的factoryService的方法。

FactoryServiceImpl的代码如下:

package cn.itcast.jk.service.impl;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import cn.itcast.jk.dao.FactoryDao;
import cn.itcast.jk.domain.Factory;
import cn.itcast.jk.pagination.Page;
import cn.itcast.jk.service.FactoryService;

@Service
public class FactoryServiceImpl implements FactoryService{

    @Resource
    FactoryDao factoryDao;

    @Override
    public List<Factory> findPage(Page page) {
        return null;
    }

    @Override
    public List<Factory> find(Map paraMap) {
        return factoryDao.find(paraMap);

    }

    @Override
    public Factory get(Serializable id) {
        return factoryDao.get(id);
    }

    @Override
    public void insert(Factory factory) {
        factory.setId(UUID.randomUUID().toString());
        factoryDao.insert(factory);

    }

    @Override
    public void update(Factory factory) {
        factoryDao.update(factory);

    }

    //删除一条记录
    @Override
    public void deleteById(Serializable id) {
        factoryDao.deleteById(id);
    }

    //删除多条记录
    @Override
    public void delete(Serializable[] ids) {
        factoryDao.delete(ids);
    }

}

然后执行factoryDao里面的方法。

而通过spring,其实factoryDao就是FactoryDaoImpl的实例。

我们看一下FactoryDaoImpl的代码:

package cn.itcast.jk.dao.impl;

import org.springframework.stereotype.Repository;

import cn.itcast.jk.dao.FactoryDao;
import cn.itcast.jk.domain.Factory;

/*
 * @Repository这注册了才能在包扫面的时候把这个实例注册进bean容器。
 *
 */
@Repository
public class FactoryDaoImpl extends BaseDaoImpl<Factory> implements FactoryDao {
/**
 *
 */
public FactoryDaoImpl() {
//设置命名空间
super.setNs("cn.itcast.jk.mapper");
}
}

我们再来看BaseDaoImpl的方法:

package cn.itcast.jk.dao.impl;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.beans.factory.annotation.Autowired;

import cn.itcast.jk.dao.BaseDao;
import cn.itcast.jk.pagination.Page;

public abstract class BaseDaoImpl<T> extends SqlSessionDaoSupport implements BaseDao<T>{
    @Autowired
    //mybatis-spring 1.0无需此方法;mybatis-spring1.2必须注入。
    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){
        super.setSqlSessionFactory(sqlSessionFactory);
    }
     private String ns;        //命名空间
    public String getNs() {
        return ns;
    }
    public void setNs(String ns) {
        this.ns = ns;
    }

    public void deleteById(Serializable id) {
        this.getSqlSession().delete(ns + ".deleteById", id);
    }

    public void delete(Serializable[] ids) {
        this.getSqlSession().delete(ns + ".delete", ids);
    }
}

最后来看Mybatis的配置文件FactoryMapper.xml的代码:

<?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">
<mapper  namespace="cn.itcast.jk.mapper">
<!-- factory_c表的映射 -->
 <resultMap type="cn.itcast.jk.domain.Factory" id="factoryRM" >
    <id property="id" column="FACTORY_ID"/>
    <result property="fullName" column="FULL_NAME"/>
      <result property="factoryName" column="FACTORY_NAME"/>
      <result property="contacts" column="CONTACTS"/>
      <result property="phone" column="PHONE"/>
      <result property="mobile" column="MOBILE"/>
      <result property="fax" column="FAX"/>
      <result property="cnote" column="CNOTE"/>
      <result property="inspector" column="INSPECTOR"/>
      <result property="orderNo" column="ORDER_NO"/>
      <result property="createBy" column="CREATE_BY"/>
      <result property="createDept" column="CREATE_DEPT"/>
      <result property="createTime" column="CREATE_TIME"/>

 </resultMap>
 <select id="find" parameterType="map"  resultMap="factoryRM"  >

 select * from factory_c where 1=1
 </select>

<!--
当数据库是Oracle时,如果插入的数据是空时,必须是要指定默认的参数。所以这里的设置要这么写:jdbcType=VARCHAR。
-->
<insert id="insert" parameterType="cn.itcast.jk.domain.Factory">

insert into factory_c(FACTORY_ID,FULL_NAME,FACTORY_NAME,CONTACTS,PHONE,MOBILE,FAX,CNOTE,INSPECTOR,ORDER_NO,CREATE_BY,CREATE_DEPT,CREATE_TIME) values(
#{id,jdbcType=VARCHAR},
#{fullName,jdbcType=VARCHAR},
#{factoryName,jdbcType=VARCHAR},
#{contacts,jdbcType=VARCHAR},
#{phone,jdbcType=VARCHAR},
#{mobile,jdbcType=VARCHAR},
#{fax,jdbcType=VARCHAR},
#{cnote,jdbcType=VARCHAR},
#{inspector,jdbcType=VARCHAR},
#{orderNo,jdbcType=INTEGER},
#{createBy,jdbcType=VARCHAR},
#{createDept,jdbcType=VARCHAR},
#{createTime,jdbcType=TIMESTAMP}
)
</insert>
<!-- 修改 动态的sql语句-->
<update id="update" parameterType="cn.itcast.jk.domain.Factory">
update factory_c
<set>
<!-- 如果 fullName不为空,就修改。-->
<if test="fullName!=null">FULL_NAME=#{fullName,jdbcType=VARCHAR},</if>
<if test="factoryName!=null">FACTORY_NAME=#{factoryName,jdbcType=VARCHAR},</if>
<if test="contacts!=null">CONTACTS=#{contacts,jdbcType=VARCHAR},</if>
<if test="phone!=null">PHONE=#{phone,jdbcType=VARCHAR},</if>
<if test="mobile!=null">MOBILE=#{mobile,jdbcType=VARCHAR},</if>
<if test="fax!=null">FAX=#{fax,jdbcType=VARCHAR},</if>
<if test="cnote!=null">CNOTE=#{cnote,jdbcType=VARCHAR},</if>
<if test="inspector!=null">INSPECTOR=#{inspector,jdbcType=VARCHAR},</if>
<if test="orderNo!=null">ORDER_NO=#{orderNo,jdbcType=INTEGER},</if>
<if test="createBy!=null">CREATE_BY=#{createBy,jdbcType=VARCHAR},</if>
<if test="createDept!=null">CREATE_DEPT=#{createDept,jdbcType=VARCHAR},</if>
<if test="createTime!=null">CREATE_TIME=#{createTime,jdbcType=TIMESTAMP},</if>
</set>
where FACTORY_ID=#{id}
</update>

<!-- 查询一个数据 -->
<select id="get" parameterType="string" resultMap="factoryRM">
<!--
注意我这里写了一个factory_id=#{pid},我这么写主要是为了说明这里要传入的值并不是
factory这个类里面的属性,可以是随意的,只要是String就好。
 -->
select * from  factory_c where factory_id=#{pid}
</select>

<!-- 删除一条的 -->

<delete id="deleteById" parameterType="string">
delete  from factory_c where FACTORY_ID=#{pid}

</delete>

<!-- 删除多条的记录 -->
<delete id="delete"  parameterType="string">
delete from factory_c
where FACTORY_ID in
<foreach collection="array" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
</mapper>

到这里就结束了。

执行OK.

时间: 2024-12-09 20:35:50

005杰信-factory删除数据的相关文章

004杰信-关于formSubmit(&#39;toview.action&#39;,&#39;_self&#39;)路径的疑惑

本文材料来源于传智播客,在此说明. 整个项目结构: 问题: JFactoryList.jsp代码如下: <ul> <hr> <font color="blue"><b>按钮区域</b></font> <hr> <li id="view"><a href="#" onclick="formSubmit('toview.action','_

主题:Mybatis3.0查询,保存,更新,删除数据。

近来打算开发一个技术框架,并应用此框架开发出一个论坛,开始打算用sturts2+spring+hibernate+jquery为基础,然后再进行封装,最后形成技术框架,但通过此网站获知mybatis比hibernate更灵活,实用.因此开始逐步接触mybatis. 以下是mybatis3.0的开发实例,使用的java环境jdk5.0,ide为eclipse3.7,数据库是oracle11g. 1.数据环境配置 Xml代码   <?xml version="1.0" encodin

android 添加手机短信,获取手机短信,删除手机短信和修改手机短信

注意添加权限: <uses-permission android:name="android.permission.READ_SMS"></uses-permission> <uses-permission android:name="android.permission.WRITE_SMS"></uses-permission> 代码如下: //更新短信 private void UpdateSMS() { /* u

Influx Sql系列教程七:delete 删除数据

前面介绍了使用insert实现新增和修改记录的使用姿势,接下来我们看一下另外一个简单的使用方式,如何删除数据 1. delete 语句 delete的官方语法如下 DELETE FROM <measurement_name> WHERE [<tag_key>='<tag_value>'] | [<time interval>] delete语句和我们常见sql语法有点像,但是注意一下上面的where中的条件,只允许根据tag和时间来进行删除操作 下面给出几个

ODI中删除数据的处理

一.前提知识:数据从源数据库向数据仓库抽取时,一般采用以下几种方式: 全抽取模式如果表的数据量较小,则可以采取全表抽取方式,以TRUNCATE/INSERT方式进行数据抽取. 基于时间戳的抽取模式如果源数据表是不可更新的数据(如大多数事务处理数据)或者是不可删除数据(只能失效历史记录的情况),则根据变更时间戳,抽取最新变更的数据进行同步. 日志分析如果没有更新时间戳,或者源数据存在删除的情况,则可以进行日志分析,来执行最新数据变更的同步. 说明:时间戳的方式如果要处理删除数据的情况,需要在源表创

mysql优化, 删除数据后物理空间未释放(转载)

OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTIMIZE TABLE 是指对表进行优化.如果已经删除了表的一大部分数据,或者如果已经对含有可变长度行的表(含有 VARCHAR . BLOB 或 TEXT 列的表)进行了很多更改,就应该使用 OPTIMIZE TABLE 命令来进行表优化.这个命令可以将表中的空间碎片进行合并,并且可以消除由于删除或者更新造成的空间浪费 .OPTIMIZE TABLE

PostgreSQL删除数据

到目前为止我们已经解释了如何向表中增加数据以及如何改变数据.剩下的是讨论如何删除不再需要的数据.和前面增加数据一样,删除数据也必须是从表中整行整行地删除.在上一节里我们提到了 SQL没有提供直接指定某一行的方法.因此,删除行只能是通过声明被删除行必须匹配的条件进行.如果你在表上有一个主键,那么你可以声明准确的行.当然,你也可以删除匹配条件的一组行,或者一次删除表中的所有行. 我们使用DELETE命令删除行.它的语法和UPDATE 命令非常类似.用: DELETE FROM Sites WHERE

第七章 插入、更新与删除数据

插入数据 1.为表左右字段插入数据 insert into 表名 values (值1,值2,……) 或 insert into 表名 (属性1,属性2,……) values (值1,值2……) 2.为指定字段插入数据 insert into 表名 (属性1,属性2,……) values (值1,值2……) 3.同时插入多条记录 insert into 表名 [(属性列表)] values(取值列表),(取值列表2),……: 4.将查询结果插入到表中 insert into 表名1 (属性列表1

解决sqlite删除数据后,文件大小不变问题(VACUUM)

删除表格的全部数据: DELETE FROM [Name] 当在sqlite中删除了大量数据后,数据库文件的大小还是那样,没有变.原因是:从Sqlite删除数据后,未使用的磁盘空间被添加到一个内在的”空闲列表”中用于存储你下次插入的数据.磁盘空间并没有丢失.但是也不向操作系统返回磁盘空间. 解决方法有以下两种:1,在数据删除后,手动执行SQL"VACUUM"命令,执行方式很简单.推荐使用.2,在数据库文件建成中,将auto_vacuum设置成“1”.但是第二个方法同样有缺点,只会从数据