博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring整合MyBatis
阅读量:6906 次
发布时间:2019-06-27

本文共 12459 字,大约阅读时间需要 41 分钟。

hot3.png

心血来潮就想自己搭建一个框架,我所使用的开发工具是MyEclipse2013,单击右键New->Other->Maven Project,如下所示:

174609_IYq2_1770476.png

接着点击"Next",选择默认至出现如下:

175000_aeME_1770476.png

选择"maven-archetype-webapp",接着点击"Next",填写:Group Id、Artifact Id,选择0.0.1-SNAPSHOT项的Version,填写完成后再点击"Finish",至此创建Maven项目已完成。我的文件目录是:

112019_cmCf_1770476.png

但是该项目中的web.xml文件的头文件出现的声明是:

 

强烈不建议使用2.3,应使用2.4、3.0等,我使用的声明就是3.0的:

web.xml的DOCTYPE声明告诉服务器使用Servlet规范的版本,如果是2.3,JSP页面极大可能无法使用EL取到Cntroller层返回的数据。你就可以接着使用2.3声明,但你将犯下跟我同样的错误。

使用Maven,就必须配置pom.xml文件。Spring整合MyBatis,以下两个链接和链接到的文档或许可以在我们遇到问题的情况下,让我们得到启示。具体pom.xml的配置如下:

  
4.0.0
  
com.jianming.buildIntegrationFramework
  
UseSpringIntegrationMyBatis
  
war
  
0.0.1-SNAPSHOT
  
UseSpringIntegrationMyBatis
  
http://maven.apache.org
  
    
      
junit
      
junit
      
3.8.1
      
test
    
             
    
      
org.mybatis
      
mybatis-spring
      
1.2.2
      
compile
    
        
    
      
org.mybatis
      
mybatis
      
3.2.8
      
compile
    
        
    
        
org.springframework
        
spring-core
        
4.1.2.RELEASE
    
    
        
org.springframework
        
spring-context
        
4.1.2.RELEASE
        
runtime
    
    
       
org.springframework
       
spring-web
       
4.1.2.RELEASE
    
    
       
org.springframework
       
spring-orm
       
4.1.2.RELEASE
    
    
       
org.springframework
       
spring-jdbc
       
4.1.2.RELEASE
    
    
       
org.springframework
       
spring-tx
       
4.1.2.RELEASE
    
    
       
org.springframework
       
spring-webmvc
       
4.1.2.RELEASE
    
        
    
        
org.apache.commons
        
commons-dbcp2
        
2.0.1
        
compile
    
    
        
commons-dbcp
        
commons-dbcp
        
20030825.184428
        
compile
    
        
    
        
commons-pool
        
commons-pool
        
1.4
    
        
    
        
mysql
        
mysql-connector-java
        
5.1.34
        
compile
    
      
      
    
UseSpringIntegrationMyBatis
  

常用检索你所需引入的dependency,打开会有些慢,建议翻下墙,使用查询将会发现该服务器在美国。配置完pom.xml,就省去了在lib中添加jar的过程,不得不佩服Maven的强悍!接着配置web.xml文件,具体配置如下:

      
UseSpringIntegrationMyBatis
    
  
     
org.springframework.web.context.ContextLoaderListener
  
    
        
org.springframework.web.context.request.RequestContextListener
    
   
  
      
contextConfigLocation
      
classpath:spring/applicationContext.xml
  
      
  
       
dispatcherServlet
      
org.springframework.web.servlet.DispatcherServlet
      
        
contextConfigLocation
        
classpath:spring/mvcContext.xml
    
  
  
      
dispatcherServlet
      
*.do
  
    
   
      
MyJsp.jsp
  
      
  
     
encodingFilter
     
org.springframework.web.filter.CharacterEncodingFilter
     
         
encoding
         
UTF-8
     
     
         
forceEncoding
         
true
     
   
   
     
encodingFilter
     
/*
   
   

web.xml配置完毕之后,接着配置applicatiopnContext.xml文件,可以帮组我们copy我们所需要XML Schema。具体applicationContext.xml文件内容如下:

            
        
        
        
        
        
        
            
      
      
             
      
      
            
        
        

以下代码引入config.properties文件,config.properties文件内容为:

jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc\:mysql\://192.168.0.253\:3307/jianming?characterEncoding\=utf-8&autoReconnect\=true&autoReconnectForPools\=truejdbc.username=rootjdbc.password=123456

MySql中创建表的SQL语句为:

CREATE TABLE IF NOT EXISTS `tbl_vip_info` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '编号',  `vip_name` varchar(50) NOT NULL DEFAULT '' COMMENT 'VIP名称',  `identity_card_number` varchar(20) NOT NULL COMMENT '身份证编号',  `vip_password` varchar(50) NOT NULL DEFAULT '' COMMENT 'VIP密码',  `create_time` datetime NOT NULL COMMENT '创建时间',  `update_time` datetime NOT NULL COMMENT '更新时间',  PRIMARY KEY (`id`),  UNIQUE KEY `name_identity_index` (`vip_name`,`identity_card_number`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

以上配置了数据源等。现在配置mvcContext.xml,具体如下:

    
    
    
    
        
        
        
        
        

为了测试所搭建的环境是否正常,写一个简单的程序进行测试。创建实体类TblVipInfo类,具体代码如下:

package com.jianming.domain;import java.util.Date;public class TblVipInfo {    private long id;        private String vipName;        private String vipPassword;        private Date createTime;        private Date updateTime;    public long getId() {        return id;    }    public String getVipName() {        return vipName;    }    public String getVipPassword() {        return vipPassword;    }    public Date getCreateTime() {        return createTime;    }    public Date getUpdateTime() {        return updateTime;    }    public void setId(long id) {        this.id = id;    }    public void setVipName(String vipName) {        this.vipName = vipName;    }    public void setVipPassword(String vipPassword) {        this.vipPassword = vipPassword;    }    public void setCreateTime(Date createTime) {        this.createTime = createTime;    }    public void setUpdateTime(Date updateTime) {        this.updateTime = updateTime;    }}

编写IVipInfoDao接口,具体如下:

package com.jianming.dao;import java.util.Map;public interface IVipInfoDao {    public Map
 selectVipInfo(String vip_name);        public int countAllVipInfo();        public void deleteVipInfo(long id);    }

配置mybatisConfig.xml文件,具体如下:

  
      
  
  
    
  

特别需要注意的地方:<configuration>标签的子标签必须按顺序。可以选中标签<configuration>,然后按“F2”键。出现如下约束,如图:

112828_8PP1_1770476.png

接着编写映射器TblVipInfo.ibt.xml文件,具体如下:

  
    select count(*) from tbl_vip_info       
      insert into tbl_vip_info(vip_name, vip_password, create_time, update_time) value(#{vipName}, #{vipPassword}, #{createTime}, #{updateTime})      
      update tbl_vip_info set vip_name=#{vipName},vip_password=#{vipPassword},create_time=#{createTime},update_time=#{updateTime} where id=#{id}      
      delete from tbl_vip_info where id=#{id}      
      select * from tbl_vip_info where vip_name=#{vipName}    

必须指出TblVipInfo.ibt.xml中的"selectVipInfo"、"countAllVipInfo"等必须与接口相同,切namespace不能省略或者乱写,这跟ibatis有区别。现在开发Service层中的IVipInfoService接口,具体代码如下:

package com.jianming.service;import java.util.Map;public interface IVipInfoService {    public Map
 doSelectOne(String vip_name);        public int countAllVipInfo();        public void deleteOneVipInfo(Long id);}

接着编写实现IVipInfoService接口的实现类:

package com.jianming.service.impl;import java.util.Map;import com.jianming.dao.IVipInfoDao;import com.jianming.service.IVipInfoService;public class VipInfoService implements IVipInfoService{    private  IVipInfoDao vipInfoDao;        public IVipInfoDao getVipInfoDao() {        return vipInfoDao;    }    public void setVipInfoDao(IVipInfoDao vipInfoDao) {        this.vipInfoDao = vipInfoDao;    }    public Map
 doSelectOne(String vip_name) {        Map
 map = vipInfoDao.selectVipInfo(vip_name);        return map;    }    public int countAllVipInfo() {        return vipInfoDao.countAllVipInfo();    }    public void deleteOneVipInfo(Long id) {        vipInfoDao.deleteVipInfo(id);    }}

最后到控制层,编写控制层代码,创建VipInfoController类,具体代码如下:

package com.jianming.web;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import com.jianming.service.IVipInfoService;@Controllerpublic class VipInfoController {    @Autowired    private    IVipInfoService vipInfoService;    @RequestMapping(value="/selectVipInfo")    public String justTest(String vipName,Long id, Model model){        if(vipName==null || id==null){            return "NoParameter";        }        Map
 vipInfoMap = vipInfoService.doSelectOne(vipName);        model.addAttribute("vip_name", vipName);        model.addAttribute("countVipInfo", vipInfoService.countAllVipInfo());        model.addAttribute("vipInfo", vipInfoMap);        vipInfoService.deleteOneVipInfo(id);        return "HaveSuccessPage";    }    }

webapp下的目录下:

113443_qRuU_1770476.png

仅仅为了测试是否成功,就编写简单的页面经常测试,现在编写MyJsp.jsp,具体代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>      
<%=basePath%>">    
My JSP 'MyJsp.jsp' starting page        
    
    
    
        
    
            
        Input VIP's name:         
        Delete :        
        
       

编写HaveSuccessPage.jsp,具体如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>
    
<%=basePath%>">        
My JSP 'HaveSuccessPage.jsp' starting page        
    
    
        
    
    
          Success!传入过来的参数为:${vip_name}

           表tbl_vip_info中共有:${countVipInfo}条数据

          查询得到的数据的id是:${vipInfo.id}

    vip的名称是:${vipInfo['vip_name']}

    vip的密码是:${vipInfo['vip_password']}

  

编写NoParameter.jsp,具体如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>      
<%=basePath%>">        
My JSP 'NoParameter.jsp' starting page        
    
    
        
    
    
              

传入数据失败!

  

使用Maven clean命令之后,出现:

114101_uaAr_1770476.png

如果立刻compile程序,

114215_R91G_1770476.png

会立刻出一些错误如下:

114317_86wM_1770476.png

解决办法也非常简单,就是必须Project->clean,如下:

114445_xIZA_1770476.png

clean之后,问题就会自动解决,我个人认为是MyEclipse自身的缓存引起的问题。然后就可以正常的使用compile命令,package命令亦正常。tomcat-maven-plugin非常好用,直接使用tomcat:run命令就能自动部署项目:

115618_8bLY_1770476.png

点击“Run”之后,运行如下:

115832_prYg_1770476.png

访问http://localhost:8080/UseSpringIntegrationMyBatis/,出现如下页面:120130_1ZHi_1770476.png

如果不填任何信息直接提交,将跳转到如下页面:

143016_knOm_1770476.png

我们填写如下信息,

120322_lN6z_1770476.png

数据库中的表的一些数据如下:

120425_DLvh_1770476.png

提交之后,出现:

120525_maOH_1770476.png

刷新数据库发现编号为"201414"的数据被删除:

120701_JQqf_1770476.png

至此框架搭建OK,并通过测试。

转载于:https://my.oschina.net/dengjianming/blog/354329

你可能感兴趣的文章
架构思维案例:速学正则
查看>>
使用 IntraWeb (11) - 基本控件之 TIWButton
查看>>
Python数据结构——散列表
查看>>
责任链模式
查看>>
Android 仿携程活动列表边框布局
查看>>
Android 实现ActionBar定制
查看>>
Git 子模块 - submodule(转)
查看>>
iPhone开发笔记[12/50]:内存泄漏是新手必然要经历的痛,NSMutableArray的正确使用...
查看>>
MySQL常用命令大全
查看>>
查看Android应用签名信息
查看>>
MVC、MVP、MVVM、Angular.js、Knockout.js、Backbone.js、React.js、Ember.js、Avalon.js、Vue.js 概念摘录...
查看>>
WCF学习之旅—WCF服务的批量寄宿(十三)
查看>>
解决“不是有效的win32应用程序”问题
查看>>
分布拟合——正态/拉普拉斯/对数高斯/瑞利 分布
查看>>
WebStorm for Mac(Web 前端开发工具)破解版安装
查看>>
从0开始--倒序输出。
查看>>
吉特仓库管理系统-.NET打印问题总结
查看>>
sqlplus 返回2 由于命令后没有加分号
查看>>
poj 2155 Matrix
查看>>
shell中(),[]和[[]]的区别
查看>>