MyBatis3.2.2+SpringMVC3.0 简单实现(增删改查)

jopen 9年前

实现具体的增删改查,不去部署Web war的时候我们用Junit单元测试CRUD功能。代码如下:

 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:p="http://www.springframework.org/schema/p"   xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"   xmlns:context="http://www.springframework.org/schema/context"   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd                http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">   <!-- 引入jdbc.properties -->   <context:property-placeholder location="classpath:jdbc.properties"/>      <!-- 扫描文件  自动将service层和dao层组件注入 -->   <context:component-scan base-package="com.clark.service"></context:component-scan>   <context:component-scan base-package="com.clark.dao"></context:component-scan>  </beans>
jdbc.properties配置文件
jdbc_driverClassName=oracle.jdbc.driver.OracleDriver  jdbc_url=jdbc:oracle:thin:@172.30.0.125:1521:oradb01  jdbc_username=settlement  jdbc_password=settlement
mybatis-config.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE configuration  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-config.dtd">  <configuration>   <typeAliases>    <!-- give a alias for model -->    <typeAlias alias="goods" type="com.clark.model.Goods"></typeAlias>   </typeAliases>   <mappers>    <!-- <mapper resource="com/clark/model/goodsMapper.xml" /> -->   </mappers>  </configuration>
spring-mybatis.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:p="http://www.springframework.org/schema/p"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:aop="http://www.springframework.org/schema/aop"    xmlns:tx="http://www.springframework.org/schema/tx"    xmlns:util="http://www.springframework.org/schema/util"    xsi:schemaLocation="http://www.springframework.org/schema/beans      http://www.springframework.org/schema/beans/spring-beans-3.2.xsd      http://www.springframework.org/schema/context      http://www.springframework.org/schema/context/spring-context-3.2.xsd      http://www.springframework.org/schema/tx      http://www.springframework.org/schema/tx/spring-tx-3.2.xsd      http://www.springframework.org/schema/aop      http://www.springframework.org/schema/aop/spring-aop-3.2.xsd      http://www.springframework.org/schema/util      http://www.springframework.org/schema/util/spring-util-3.2.xsd">            <bean id="goodsServiceImpl" class="com.clark.service.impl.GoodsServiceImpl">      </bean>             <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">       <property name="driverClassName">         <value>${jdbc_driverClassName}</value>       </property>       <property name="url">         <value>${jdbc_url}</value>       </property>       <property name="username">         <value>${jdbc_username}</value>       </property>       <property name="password">         <value>${jdbc_password}</value>       </property>       <!-- 连接属性 -->       <property name="connectionProperties">         <value>clientEncoding=UTF-8</value>       </property>     </bean>             <!-- mybatis文件配置,扫描所有mapper文件 -->        <bean id="sqlSessionFactory"            class="org.mybatis.spring.SqlSessionFactoryBean"            p:dataSource-ref="dataSource"            p:configLocation="classpath:mybatis-config.xml"            p:mapperLocations="classpath:mapper/*.xml"/><!-- configLocation为mybatis属性 mapperLocations为所有mapper-->               <!-- spring与mybatis整合配置,扫描所有dao.impl -->     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"           p:basePackage="com.clark.dao.impl"           p:sqlSessionFactoryBeanName="sqlSessionFactory"/>            <!-- 对数据源进行事务管理 -->      <bean id="transactionManager"           class="org.springframework.jdbc.datasource.DataSourceTransactionManager"           p:dataSource-ref="dataSource"/>  </beans>
goodsMapper.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="clark">   <!-- 将db查询出来的结果映射到Model Goods -->   <resultMap type="com.clark.model.Goods" id="t_good">    <id column="id" property="id"/>    <result column="cate_id" property="cateId"/>    <result column="name" property="name"/>    <result column="price" property="price"/>    <result column="description" property="description"/>    <result column="order_no" property="orderNo"/>    <result column="update_time" property="updateTime"/>   </resultMap>   <!-- 根据id查询 返回Goods类型  <typeAlias alias="goods" type="com.clark.model.Goods"></typeAlias>-->   <!--resultMap 和   resultType的使用区别-->   <select id="selectGoodById" parameterType="int" resultMap="t_good">    select id,cate_id,name,price,description,order_no,update_time     from goods where id = #{id}   </select>   <!-- 查询所有Goods 返回resultMap类型-->   <select id="selectAllGoods" resultMap="t_good">    select id,cate_id,name,price,description,order_no,update_time from goods   </select>   <!-- 指定parameterType=map 其中map的形式为Map<String,PageBean> map-->   <select id="selectGoodsByPage" resultMap="t_good" parameterType="map">    <!-- order by id asc是指对查询后的结果进行升序排序 -->    <![CDATA[      select * from      (select g.*,rownum rn from (select * from goods) g where 1=1 and rownum <= #{pageBean.endNumber})      where rn >= #{pageBean.startNumber}     order by id asc    ]]>   </select>   <!-- 新增Goods 参数类型为Goods-->   <insert id="insertGood" parameterType="goods">    insert into goods(id,cate_id,name,price,description,order_no,update_time)      values(#{id},#{cateId},#{name},#{price},#{description},#{orderNo},#{updateTime})   </insert>   <!-- 更新Goods 参数类型为Goods-->   <update id="updateGood" parameterType="goods">    update goods g     set g.name = #{name},g.order_no =#{orderNo}    where g.id = #{id}   </update>   <!-- 删除Goods 参数类型为int-->   <delete id="deleteGood" parameterType="int">    delete from goods g     where g.id = #{id}   </delete>  </mapper>
Model ----Goods.java
package com.clark.model;    import java.util.Date;    public class Goods {   private Integer id;   private Integer cateId;   private String name;   private double price;   private String description;   private Integer orderNo;   private Date updateTime;      public Goods(){       }      public Goods(Integer id, Integer cateId, String name, double price,     String description, Integer orderNo, Date updateTime) {    super();    this.id = id;    this.cateId = cateId;    this.name = name;    this.price = price;    this.description = description;    this.orderNo = orderNo;    this.updateTime = updateTime;   }       public Integer getId() {    return id;   }       public void setId(Integer id) {    this.id = id;   }       public Integer getCateId() {    return cateId;   }       public void setCateId(Integer cateId) {    this.cateId = cateId;   }       public String getName() {    return name;   }       public void setName(String name) {    this.name = name;   }       public double getPrice() {    return price;   }       public void setPrice(double price) {    this.price = price;   }       public String getDescription() {    return description;   }       public void setDescription(String description) {    this.description = description;   }       public Integer getOrderNo() {    return orderNo;   }       public void setOrderNo(Integer orderNo) {    this.orderNo = orderNo;   }       public Date getTimeStamp() {    return updateTime;   }       public void setTimeStamp(Date updateTime) {    this.updateTime = updateTime;   }       @Override   public String toString() {    return "[goods include:Id="+this.getId()+",name="+this.getName()+      ",orderNo="+this.getOrderNo()+",cateId="+this.getCateId()+      ",updateTime="+this.getTimeStamp()+"]";   }  }
PageBean.java
package com.clark.util;  //模拟的一个分页对象PageBean  public class PageBean {   //开始数   private Integer startNumber;   //结束数   private Integer endNumber;      public PageBean(){       }   public PageBean(Integer startNumber, Integer endNumber) {    super();    this.startNumber = startNumber;    this.endNumber = endNumber;   }   public Integer getStartNumber() {    return startNumber;   }   public void setStartNumber(Integer startNumber) {    this.startNumber = startNumber;   }   public Integer getEndNumber() {    return endNumber;   }   public void setEndNumber(Integer endNumber) {    this.endNumber = endNumber;   }  }
GoodsDao.java
package com.clark.dao;    import java.util.List;  import java.util.Map;    import com.clark.model.Goods;  import com.clark.util.PageBean;    public interface GoodsDao {      public int insertGoods(Goods goods);      public int updateGoods(Goods goods);      public int deleteGoods(Integer id);      public Goods findGoodById(Integer id);   //find all   public List<Goods> findAllGoods();      public List<Goods> findGoodsByPage(Map<String,PageBean> map);     }
GoodsDaoImpl.java
package com.clark.dao.impl;    import java.util.List;  import java.util.Map;    import org.apache.ibatis.session.SqlSession;  import org.apache.ibatis.session.SqlSessionFactory;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.stereotype.Service;    import com.clark.dao.GoodsDao;  import com.clark.model.Goods;  import com.clark.util.PageBean;  @Service  public class GoodsDaoImpl implements GoodsDao{   //注意SqlSessionFactory是mybatis操作数据库的session对象   @Autowired   private SqlSessionFactory sessionFactory;      @Override   public int insertGoods(Goods goods) {    //clark--goodsMapper.xml 中命名空间name = clark,insertGood---insert id    int result = sessionFactory.openSession().insert("clark.insertGood", goods);    //mybatis事物需要手动提交,默认为false    sessionFactory.openSession().commit();    return result;   }   @Override   public int updateGoods(Goods goods) {    int result = sessionFactory.openSession().update("clark.updateGood", goods);    //mybatis事物需要手动提交,默认为false    sessionFactory.openSession().commit();    return result;   }   @Override   public int deleteGoods(Integer id) {    int result = sessionFactory.openSession().delete("clark.deleteGood", id);    //mybatis事物需要手动提交,默认为false    sessionFactory.openSession().commit();    return result;   }   @Override   public Goods findGoodById(Integer id) {    Goods goods = sessionFactory.openSession().selectOne("clark.selectGoodById",id);    return goods;   }   @Override   public List<Goods> findAllGoods() {    List<Goods> gg = sessionFactory.openSession().selectList("clark.selectAllGoods");    return gg;   }   @Override   public List<Goods> findGoodsByPage(Map<String, PageBean> map) {    List<Goods> gg = sessionFactory.openSession().selectList("clark.selectGoodsByPage",map);    return gg;   }  }
GoodsService.java
package com.clark.service;    import java.util.List;  import java.util.Map;    import com.clark.model.Goods;  import com.clark.util.PageBean;    public interface GoodsService {   public int insertGoods(Goods goods);      public int updateGoods(Goods goods);      public int deleteGoods(Integer id);      public Goods findGoodById(Integer id);   //find all   public List<Goods> findAllGoods();      public List<Goods> findGoodsByPage(Map<String,PageBean> map);   }
GoodsServiceImpl.java
package com.clark.service.impl;    import java.util.List;  import java.util.Map;    import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.stereotype.Service;    import com.clark.dao.GoodsDao;  import com.clark.model.Goods;  import com.clark.service.GoodsService;  import com.clark.util.PageBean;  @Service  public class GoodsServiceImpl implements GoodsService{   @Autowired   private GoodsDao goodsDao;   @Override   public int insertGoods(Goods goods) {    return goodsDao.insertGoods(goods);   }   @Override   public int updateGoods(Goods goods) {    return goodsDao.updateGoods(goods);   }   @Override   public int deleteGoods(Integer id) {    return goodsDao.deleteGoods(id);   }   @Override   public Goods findGoodById(Integer id) {    return goodsDao.findGoodById(id);   }   @Override   public List<Goods> findAllGoods() {    return goodsDao.findAllGoods();   }   @Override   public List<Goods> findGoodsByPage(Map<String, PageBean> map) {    return goodsDao.findGoodsByPage(map);   }    }
单元测试类如下:
package maven;    import java.util.Date;  import java.util.HashMap;  import java.util.List;  import java.util.Map;    import org.junit.Before;  import org.junit.Test;  import org.springframework.context.ApplicationContext;  import org.springframework.context.support.ClassPathXmlApplicationContext;    import com.clark.model.Goods;  import com.clark.service.GoodsService;  import com.clark.util.PageBean;    public class GoodsTest {   private GoodsService goodsService;            @Before      public void before(){                                                                             @SuppressWarnings("resource")          ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:applicationContext.xml"                  ,"classpath:spring-mybatis.xml"});          //注意此处的beanName 必须与XXXXServiceImpl implements XXXXService的名字相同,而且第一个字母必须小写,否则找不到bean          goodsService = (GoodsService) context.getBean("goodsServiceImpl");      }      @Test      public void testFindGoodsById(){          Goods goods = goodsService.findGoodById(18);          System.out.println(goods.toString());      }      @Test      public void testFindAllGoods(){          List<Goods> goods = goodsService.findAllGoods();          for (Goods goods2 : goods) {           System.out.println(goods2.toString());    }      }      @Test      public void testFindGoodsByPage(){       PageBean pageBean = new PageBean(8,20);       Map<String,PageBean> map = new HashMap<String,PageBean>();       map.put("pageBean", pageBean);          List<Goods> goods = goodsService.findGoodsByPage(map);          for (Goods goods2 : goods) {           System.out.println(goods2.toString());    }      }      @Test      public void testAddGoods(){          Goods user = new Goods(20, 23, "oooo", 23.03, "this is one", 5, new Date());          System.out.println("111111111");          System.out.println(goodsService.insertGoods(user));      }      @Test      public void testUpdateGoods(){       Goods goods = goodsService.findGoodById(18);       goods.setName("AOAO");       goods.setOrderNo(26);       System.out.println(goodsService.updateGoods(goods));      }        }
接着将Mybatis集成SpringMVC中,部署成网页版的小功能实现:
spring-mvc.xml配置如下
<?xml version="1.0" encoding="UTF-8"?>  <beans xmlns="http://www.springframework.org/schema/beans"    xmlns:p="http://www.springframework.org/schema/p"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:mvc="http://www.springframework.org/schema/mvc"    xsi:schemaLocation="      http://www.springframework.org/schema/beans      http://www.springframework.org/schema/beans/spring-beans-3.2.xsd      http://www.springframework.org/schema/context      http://www.springframework.org/schema/context/spring-context-3.2.xsd      http://www.springframework.org/schema/mvc      http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">      <mvc:annotation-driven/>   <!-- 扫描组件controller -->   <context:component-scan base-package="com.clark.controller" />   <!-- 配置模型视图添加前后缀 -->   <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"    p:prefix="/jsp/" p:suffix=".jsp" />  </beans>
web.xml配置如下
<!DOCTYPE web-app PUBLIC   "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"   "http://java.sun.com/dtd/web-app_2_3.dtd" >    <web-app>    <display-name>Archetype Created Web Application</display-name>        <!-- 读取spring配置文件 -->      <context-param>          <param-name>contextConfigLocation</param-name>          <param-value>classpath:applicationContext.xml;              classpath:spring-mybatis.xml          </param-value>      </context-param>      <!-- 设计路径变量值 -->      <context-param>          <param-name>webAppRootKey</param-name>          <param-value>springmvc.root</param-value>      </context-param>            <!-- Spring字符集过滤器 -->      <filter>          <filter-name>SpringEncodingFilter</filter-name>          <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>          <init-param>              <param-name>encoding</param-name>              <param-value>UTF-8</param-value>          </init-param>          <init-param>              <param-name>forceEncoding</param-name>              <param-value>true</param-value>          </init-param>      </filter>      <filter-mapping>          <filter-name>SpringEncodingFilter</filter-name>          <url-pattern>/*</url-pattern>      </filter-mapping>         <listener>          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>      </listener>         <!-- springMVC核心配置 -->      <servlet>          <servlet-name>spring</servlet-name>          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>          <init-param>              <param-name>contextConfigLocation</param-name>              <param-value>classpath:spring-mvc.xml</param-value>          </init-param>          <load-on-startup>2</load-on-startup>      </servlet>      <servlet-mapping>          <servlet-name>spring</servlet-name>          <url-pattern>*.do</url-pattern>      </servlet-mapping>         <welcome-file-list>          <welcome-file>index.jsp</welcome-file>      </welcome-file-list>         <!-- 错误跳转页面 -->      <error-page>          <!-- 路径不正确 -->          <error-code>404</error-code>          <location>/WEB-INF/errorpage/404.jsp</location>      </error-page>  </web-app>
简单的Controller类如下:
package com.clark.controller;    import org.springframework.stereotype.Controller;  import org.springframework.web.bind.annotation.RequestMapping;    @Controller  @RequestMapping("/")  public class GoodsController {   @RequestMapping("index")      public String index(){          return "index";      }  }
执行相应的打包操作:maven-install 生成war包部署成功之后:
地址栏输入http://localhost:8080/maven/index.do
页面出现===========

Spring MVC 成功

说明成功完成整合。

来自:http://blog.csdn.net/caolipeng_918/article/details/39373293
</div>