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

时间:2023-01-25 22:42:09
MyBatis3.2.2+SpringMVC3.0 简单实现(增删改查,Web版实现)
  首先,需要知道Eclipse如何创建Dynamic Web Project for Maven,我们首先需要知道如何用Eclipse创建动态部署的Maven Web-app 项目.参考以下链接的博客:http://blog.csdn.net/smilevt/article/details/8215558.

  构建完之后:实现具体的增删改查,不去部署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 成功

说明成功完成整合。