MyBatis3.2.2+SpringMVC3.0 簡單實現(增刪改查)

jopen 10年前發布 | 173K 次閱讀 Spring MVC Web框架 SpringMVC3

實現具體的增刪改查,不去部署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
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!