本博客的内容全部来自于传智播客,特在此说明。

业务要求如下:在jsp页面(jFactoryCreate.jsp)上输入数据时,转到后台,并输入到数据库。

jFactoryCreate.jsp页面:

003杰信-在jsp页面输入数据,然后在oracle数据库中插入factory数据,当字段允许为空时要特殊处理

 

 

 

 

数据库的字段设计:

003杰信-在jsp页面输入数据,然后在oracle数据库中插入factory数据,当字段允许为空时要特殊处理

 

 项目结构:

003杰信-在jsp页面输入数据,然后在oracle数据库中插入factory数据,当字段允许为空时要特殊处理

003杰信-在jsp页面输入数据,然后在oracle数据库中插入factory数据,当字段允许为空时要特殊处理

运行过程:在jFactortList页面上,点击新建按钮,根据action请求,然后进入到jFactoryCreate.jsp页面,输入要新增加的数据,然后在根据action请求来到Controller控制器类

的FactoryController.java代码。根据前面的action请求执行里面的 public String insertfactory(Factory factory )方法,在执行 public String insertfactory(Factory factory )里面Service方法,再进入到Service里面的Dao层,再执行Mybatis的配置文件的方法。

 

 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>

点击新增按钮后根据'factorycreate.action'请求来到FactoryControll.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/factorycreate.action")
    public String factorycreate(Factory factory )
    {
        
        return "/basicinfo/factory/jFactoryCreate.jsp";
      
    }
    //保存新增加的数据
    
    @RequestMapping("/basicinfo/factory/insertfactory.action")
    public String insertfactory(Factory factory )
    {
        factoryService.insert(factory);
        return "redirect:/basicinfo/factory/list.action";
       
    }
    
    

   
     
    
}

 跳转到jFactoryCreate.jsp页面:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ include file="../../base.jsp"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
    <form method="post">
        <div id="menubar">
            <div id="middleMenubar">
                <div id="innerMenubar">
                    <div id="navMenubar">
                        <ul>
                            <li id="save"><a href="#"
                                onclick="formSubmit('insertfactory.action','_self');">确定</a></li>
                            <li id="back"><a href="list.action">返回</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">新增厂家信息</div>
                </div>
            </div>
            <div>



                <div>
                    <table class="commonTable" cellspacing="1">
                        <tr>
                            <td class="columnTitle_mustbe">厂家名称:</td>
                            <td class="tableContent"><input type="text" name="fullName" /></td>
                            <td class="columnTitle_mustbe">厂家简称</td>
                            <td class="tableContent"><input type="text"
                                name="factoryName" /></td>
                        </tr>

                        <tr>
                            <td class="columnTitle_mustbe">联系人:</td>
                            <td class="tableContent"><input type="text" name="contacts" /></td>
                            <td class="columnTitle_mustbe">电话</td>
                            <td class="tableContent"><input type="text" name="phone" /></td>
                        </tr>
                        <tr>
                            <td class="columnTitle_mustbe">手机</td>
                            <td class="tableContent"><input type="text" name="mobile" /></td>
                            <td class="columnTitle_mustbe">传真</td>
                            <td class="tableContent"><input type="text" name="fax" /></td>
                        </tr>



                        <tr>
                            <td class="columnTitle_mustbe">验货员</td>
                            <td class="tableContent"><input type="text" name="inspector" /></td>
                            <td class="columnTitle_mustbe">排序号</td>
                            <td class="tableContent"><input type="text" name="orderNo" /></td>
                        </tr>
                        <tr>
                            <td class="columnTitle_mustbe">备注</td>
                            <td class="tableContent"><textarea    name="cnote" style="height:120px;" ></textarea></td>
                            
                        </tr>
                    </table>
                </div>
            </div>
    </form>
</body>
</html>

在jFactoryCreate.jsp页面上输入好信息后按确定发出'insertfactory.action'请求,再来到FactoryControll.java。执行里面的public String insertfactory(Factory factory )方法,

 也就是执行FactoryServiceImpl.java里面的insert方法:

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) {
//我们在jsp页面输入factory数据时不可能输入主键的啊,所以主键的值我们要自己单独输入,我们用UUID作为主键。 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.insert(factory);也就是BaseDaoImpl.java里面的insert方法。代码如下:

BaseDaoImpl.java代码:

 

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 List<T> findPage(Page page){
        List<T> oList = this.getSqlSession().selectList(ns + ".findPage", page);
        return oList;
    }

    public List<T> find(Map map) {
        List<T> oList = this.getSqlSession().selectList(ns + ".find", map);
        return oList;
    }
    public T get(Serializable id) {
        return this.getSqlSession().selectOne(ns + ".get", id);
    }

    public void insert(T entity) {
        this.getSqlSession().insert(ns + ".insert", entity);
    }

    public void update(T entity) {
        this.getSqlSession().update(ns + ".update", entity);
    }

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

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

 

最后再来看FactoryMapper.xml代码,执行里面的<insert id="insert" parameterType="cn.itcast.jk.domain.Factory">

<?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>

 

 

 

 操作完成。

 

 

 

 

 

 

 

 --------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

 

注意:

当jsp页面上有些字段内容为空,因为数据库那些字段允许为空,所以以为这样做不会有错,其实Mysql开发时是可以的,但是用oracle时不行。

 

在用Mybatis时,在写Mybatis的配置文件时要这么写:

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

 

怕以后用oracle开发时,碰到这个问题,所以写这篇博客。

相关文章: