spring+springmvc+ibatis框架整合

java相关框架 专栏收录该内容
6 篇文章 0 订阅

由于用的jar包比较旧,这里用的是1.7的jdk
首先创建一个动态web工程,创建时记得选上生成web.xml文件
这是我的项目目录在这里插入图片描述
导入jar包并加载到library中,如果是从其他工程导入的记得复制到lib文件下,避免奇怪的问题,修改编译路径到WEB-INF下classes目录下,spring的配置可以参考这个spring简单入门实例

注意:以下所给的代码都是整个步骤完成后的代码,有些中途测试不需要的先注释掉,不然可能会影响运行

先配置web.xml文件,以下是我的web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>EbizTest1</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <listener>
  <!-- 监听spring上下文容器 -->
    <listener-class>
		org.springframework.web.context.ContextLoaderListener
	</listener-class>
  </listener>
  <!-- 加载spring的xml配置文件到 spring的上下文容器中 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:resource/root-context.xml</param-value>
  </context-param>
  <!-- 配置Spring MVC DispatcherServlet -->
  <servlet>
    <servlet-name>MVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 初始化参数 -->
    <init-param>
    	<!-- 加载SpringMVC的xml到 spring的上下文容器中 -->
      	<param-name>contextConfigLocation</param-name>
     	<param-value>
				/WEB-INF/mvc.xml
		</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <!-- 配置DispatcherServlet所需要拦截的 url -->
  <!-- 一般配置.do,也可自定义,这里我配置的.abc -->
  <servlet-mapping>
    <servlet-name>MVC</servlet-name>
    <url-pattern>*.abc</url-pattern>
  </servlet-mapping>
  
  <!-- 配置webservice -->
  <servlet>
  		<servlet-name>cxf</servlet-name>
  		<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  		<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  		<servlet-name>cxf</servlet-name>
  		<url-pattern>/WebService/*</url-pattern>
  </servlet-mapping>
</web-app>

最后的配置webservice可以先不写,配置webservice时需要。
接着配置mvc.xml,以下是我的mvc.xml配置问件

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:p="http://www.springframework.org/schema/p" 
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc 
					http://www.springframework.org/schema/mvc/spring-mvc.xsd
					http://www.springframework.org/schema/aop
					http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
					http://www.springframework.org/schema/beans 
					http://www.springframework.org/schema/beans/spring-beans.xsd
					http://www.springframework.org/schema/context 
					http://www.springframework.org/schema/context/spring-context.xsd">
	<!-- SpringMVC配置 -->
	
	<!-- 通过component-scan 让Spring扫描org.swinglife.controller下的所有的类,让Spring的代码注解生效 -->
	<context:component-scan base-package="controller"></context:component-scan>
	
	<!-- 配置SpringMVC的视图渲染器, 让其前缀为:/ 后缀为.jsp  将视图渲染到/page/<method返回值>.jsp中 -->
	<beans:bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver"
		p:prefix="/" p:suffix=".jsp">
	</beans:bean>
 
 
</beans:beans>

然后来配置spring的配置文件root-context.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:context="http://www.springframework.org/schema/context"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
		http://www.springframework.org/schema/context  
		http://www.springframework.org/schema/context/spring-context-2.5.xsd  
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
		http://cxf.apache.org/jaxws 
        http://cxf.apache.org/schemas/jaxws.xsd"> 
	<!-- Root Context: defines shared resources visible to all other web components -->
 	<context:component-scan base-package="service"></context:component-scan>
 	<context:component-scan base-package="ws"></context:component-scan>
 	
 	<!-- 读取属性配置文件 -->
    <bean id="propertyManager" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
       <property name="locations">
          <list>
            <value>classpath:resource/db.properties</value>
          </list>
        </property>
    </bean>
 <!-- 配置数据源,并使用属性配置文件中的数据 -->
    <bean id="dataSource"
       class="org.springframework.jdbc.datasource.DriverManagerDataSource">
       <property name="driverClassName" value="${driverClassName}" />
       <property name="url" value="${url}" />
       <property name="username" value="${username}" />
       <property name="password" value="${password}" />
    </bean>
 <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
        <property name="configLocation" value="classpath:resource/SqlMapConfig.xml" />
        <property name="dataSource"><ref bean="dataSource" /></property>  
   </bean>  
	 <bean id="sqlMapClientTemplate"  class="org.springframework.orm.ibatis.SqlMapClientTemplate">
        <property name="sqlMapClient" ref="sqlMapClient"/>
    </bean> 
    
    <!-- 导入cxf的bean定义文件 -->
	<import resource="classpath:META-INF/cxf/cxf.xml" />  
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>  
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
    <!-- 发布webSevice -->
    <jaxws:endpoint 
       id="testWS" 
       implementor="#helloWebServiceImpl"   
       address="/Hello" 
       implementorClass="ws.HelloWebService"
    /> 
    
</beans>

最后的关于cxf和webservice的配置可以先不用
接下来就开始写controller了,我这块写了个HelloController,以下是具体内容

package controller;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import service.HelloService;

@Controller
@RequestMapping("/hello.abc")//要与web.xml中拦截的url相对应,否则会404
public class HelloController {
	@Resource
	public HelloService helloServiceImpl;
	/**
	 * http://localhost:8080/EbizTest/hello.abc?action=showIndex
	 * @return
	 */
	@RequestMapping(params="action=showIndex")
		public ModelAndView showIndex(){
			String msg = helloServiceImpl.sayHello();
			System.out.println(msg);
			ModelAndView mav = new ModelAndView("page/index");//这里和springmvc的视图渲染器的配置结合起来应该是所跳转页面的路径
			return mav;
		}
}

controller需要在mvc.xml中配置扫描才能生效,一般扫描controller包
测试页面index.jsp写的很简单,就一个表单

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="">
		用户名:<input type="text" name="username"/><br/>
		密码:<input type="password" name="password"/><br/>
		<input type="submit" value="提交"/><br/>
	</form>
</body>
</html>

前面的完成后就可以启动服务测试springmvc的配置是否成功了,访问这个地址http://localhost:8080/EbizTest/hello.abc?action=showIndex,如果跳转到index.jsp页面就表明配置成功了
接下来就是集成ibatis了,其中有些操作在前面配置过的配置文件里面已经有了(我直接放的最终的配置文件),需要什么操作就提一下,不再放重复东西了
第一步在root-context.xml里面生成ibatis的操作数据库对象sqlMapClient和sqlMapClientTemplate(spring封装后的),而且,spring提供了datasource读取配置,好吧,读取配置文件资源和连接数据库也做了,这样一来SqlMapConfig.xml里面只剩加载数据库操作的xml文件了,SqlMapConfig.xml文件如下

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE sqlMapConfig        
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"        
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">  
<sqlMapConfig>    
    <sqlMap resource="resource/User.xml" />  
</sqlMapConfig> 

User.xml文件如下

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE sqlMap        
    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"        
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">  
<sqlMap>  
    
    <select id="getUser" resultClass="dto.UserDTO">  
        select *  
        from pf_user
        where username="ww"
    </select>
    
</sqlMap>

可根据数据库适当调整
数据库的db.properties文件如下

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ibatisdemo?autoReconnect=true&useUnicode=true&characterEncoding=utf8
username=root
password=root

根据数据库的不同许进行调整
接着写了个service进行测试,一个HelloService接口

package service;

public interface HelloService {
	public String sayHello();
}

一个实现类

package service.impl;



import javax.annotation.Resource;

import org.springframework.orm.ibatis.SqlMapClientTemplate;
import org.springframework.stereotype.Service;

import dto.UserDTO;
import service.HelloService;

@Service
public class HelloServiceImpl implements HelloService{
	@Resource(name="sqlMapClientTemplate")
	public SqlMapClientTemplate sqlMapClientTemplate;
	
	public String sayHello() {
		UserDTO userDTO = (UserDTO) sqlMapClientTemplate.queryForObject("getUser");
		
		return "hello"+userDTO.getUsername();
	}

}

实现类仍然是用注解来使其可被调用,注意用注解的地方都需要在root-context.xml中添加扫描
同时需要在DTO层创建一个实体类UserDTO

package dto;

public class UserDTO {
	/**
	 * 用户名
	 */
	private String username;
	/**
	 * 密码
	 */
	private String password;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "UserDTO [username=" + username + ", password=" + password + "]";
	}
	
}

至于测试整合ibatis是否成功,也是在controller里调用service中的方法来进行,由于前面给的代码是完整的,就不再给出了。
测试时仍然是访问http://localhost:8080/EbizTest/hello.abc?action=showIndex,看控制台是否输出正确信息,若没输出理想的信息,则要检查与数据库的连接配置,实体类及sql语句的各种对应关系是否正确。

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

generous_F

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值