SpringMVC+Ibatis简单demo

一、创建项目

1、创建一个Maven项目


  1.1 打开eclipse,选择new ===》 project,之后选择如下图中的Maven Project。
  在这里插入图片描述
  1.2 之后出现,如下图,可以按照图中配置。
  在这里插入图片描述
  1.3 选择Next 进入下一步,填写初始项目的一些信息,如下图。
  在这里插入图片描述
  注意:
     Packaging选择打成war包了。至于Group Id等信息,按照需求自己填写。
    选择Finish,此时一个项目基本上就创建好了。
  
  1.4 生成web.xml文件,此文件的作用主要是用来初始化配置信息,比如Welcome页面(前后端分离开发可能就用不上了)、servlet和servlet-mapping、filter(过滤器配置信息)、listener(监听器配置)、启动加载级别等,web.xml具体配置会在下方有详细介绍,此步只是生成一个web.xml文件,如下图。
  在这里插入图片描述
  注意:
    将新建的项目文件夹展开,按照上图操作,就会在src/main/webapp/WEB-ING文件下生成一个web.xml文件。
   
   1.5 配置项目的运行环境,这里采用的tomcat,具体操作如下图
  在这里插入图片描述
  右键单击项目,选择Properties,之后如下图。
  在这里插入图片描述
  若tomcat不存在,请自行下载,并在eclipse中添加tomcat,在这里此处步骤就不详细介绍了。
  
  1.6 此时,项目就可在放到tomcat上启动了,具体步骤如下图。
   在这里插入图片描述
  按照上图步骤操作,会出现一个弹窗,让你选择tomcat,直接单击Next,出现如下图。        
  在这里插入图片描述
  选中Available列表下的项目(新建的项目名称),单击Add,即可将你新建的项目加入Configured列表下,若Configured列表下有其它的项目最后给Remove掉,省的tomcat启动异常。之后点击Finish,项目也就在tomcat上启动了。
  注意:
    查看console(控制台)是否有报错。下图是启动成功图片,可以作为参考。
   在这里插入图片描述

二 . 增加配置文件,引入jar依赖


  2.1 本项目目录结构如下图
  在这里插入图片描述
  2.2 pom.xml文件如下

		<dependencies>
		  	<dependency>
		      <groupId>org.springframework</groupId>
		      <artifactId>spring-webmvc-portlet</artifactId>
		      <version>4.3.9.RELEASE</version>
		    </dependency>
		    <dependency>
		       <groupId>org.springframework</groupId>
		       <artifactId>spring-web</artifactId>
		       <version>4.3.9.RELEASE</version>
		    </dependency>
		    <dependency>
		      <groupId>junit</groupId>
		      <artifactId>junit</artifactId>
		      <version>4.12</version>
		    </dependency>
		    <dependency>
		      <groupId>commons-dbcp</groupId>
		      <artifactId>commons-dbcp</artifactId>
		      <version>1.4</version>
		    </dependency>
		    <dependency>
		      <groupId>mysql</groupId>
		      <artifactId>mysql-connector-Java</artifactId>
		      <version>5.1.6</version>
		    </dependency>
		    <dependency>
		      <groupId>com.github.linpn</groupId>
		      <artifactId>ibatis</artifactId>
		      <version>2.3.9</version>
		    </dependency>
		    <dependency>
		      <groupId>org.springframework</groupId>
		      <artifactId>spring-ibatis</artifactId>
		      <version>2.0.7</version>
		    </dependency>
		    <dependency>
		      <groupId>jstl</groupId>
		      <artifactId>jstl</artifactId>
		      <version>1.2</version>
		    </dependency>
		    <!--@Data注解依赖,省去大量的get和set-->
		    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
			<dependency>
			    <groupId>org.projectlombok</groupId>
			    <artifactId>lombok</artifactId>
			    <version>1.18.2</version>
			    <scope>provided</scope>
			</dependency>
			<!--解决@ResponseBody 返回对象异常而添加的依赖-->
		    <dependency>
		      <groupId>com.fasterxml.jackson.core</groupId>
		      <artifactId>jackson-core</artifactId>
		      <version>2.5.4</version>
		    </dependency>
		    <dependency>
		      <groupId>com.fasterxml.jackson.core</groupId>
		      <artifactId>jackson-databind</artifactId>
		      <version>2.5.4</version>
		    </dependency>
		  </dependencies>

2.3 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_2_5.xsd" version="2.5">
    <display-name>ssi-project</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>
    
    <!--配置加载spring-dao.xml文件的监听器,当容器启动时自动加载spring-dao.xml文件-->
    <!--spring-dao.xml文件主要配置集成ibatis一些配置信息,包括数据库源的配置-->
    <context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring-dao.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<!-- 配置的中文过滤器,解决中文乱码问题 -->
	<filter>
		<filter-name>encodingFilter</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>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<!-- 配置前端控制器,进行加载spring-mvc.xml文件 -->
	<servlet>
		<servlet-name>dispatcherServlet</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>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>dispatcherServlet</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>
</web-app>

2.4 spring-mvc.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xsi:schemaLocation="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 
	 http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd 
	 http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd 
	 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 
	 http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd 
	 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd 
	 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 
	 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:jee="http://www.springframework.org/schema/jee"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://www.springframework.org/schema/beans" >
	
	<!--配置扫描的基础路径-->	
	<context:component-scan base-package="demo"/>
	<mvc:annotation-driven />

</beans>

2.5 spring-dao.cml文件

<?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:jdbc="http://www.springframework.org/schema/jdbc"
	xmlns:jee="http://www.springframework.org/schema/jee"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	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/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
		http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-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/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
		http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd" >  
		
	<!--将配置数据库连接信息的文件引入到数据库连接池中-->
	<util:properties location="classpath:jdbc.properties" id="dbconf" />
	<!--提供好的数据库链接池类 -->
	<bean id="dataSource"
		class=" org.apache.commons.dbcp.BasicDataSource">
		<property value="#{dbconf.driverClassName}"
			name="driverClassName" />
		<property value="#{dbconf.url}" name="url" />
		<property value="#{dbconf.username}" name="username" />
		<property value="#{dbconf.password}" name="password" />
	</bean>
	
	<!-- 配置SqlMapClient对象 -->
	<bean id="sqlMapClient"
		class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="configLocation" value="classpath:sqlMapConfig.xml" />
		<property name="dataSource" ref="dataSource" />
	</bean>

	<!-- 根据sqlMapClien创建一个SqlMapClient模版类 -->
	<bean id="sqlMapClientTemplate"
		class="org.springframework.orm.ibatis.SqlMapClientTemplate">
		<property name="sqlMapClient" ref="sqlMapClient" />
	</bean>
</beans>

2.6 jdbc.properties文件

driverClassName = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/ssi?useUnicode=true&characterEncoding=utf-8
username = root
password = root

2.7 sqlMapConfig.xml文件

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"   
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">  
<sqlMapConfig>  
  <!-- 配置settings -->  
  <settings lazyLoadingEnabled="true" useStatementNamespaces="false"/>  
      
  <!-- 配置sql映射文件 -->  
  <sqlMap resource="sqlMap/UserLoginSqlMap.xml"/>  
</sqlMapConfig>

此时,spring-mvc集成ibatis的配置文件基本已经完成,下列就是本次demo的测试代码了。

2.8 首先在resources文件夹创建sqlMap文件夹,之后创建UserLoginSqlMap.xml文件,进行书写sql,具体如下:

<?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 namespace="user_login" >
  <select id="selectUserInfoByUserName" resultClass="demo.dto.UserInfoDTO" parameterClass="java.lang.String">
  		SELECT 
  			user_name userName,password password,nick_name nickName,real_name realName
  	    FROM
  	    	user 
  	    WHERE 
  	    	is_delete='0' 
  	    AND 
  	    	user_name =#username#
  	    LIMIT 1;
  </select>
</sqlMap>

2.9 DTO创建
UserInfoDTO实现:

package demo.dto;

import lombok.Data;

@Data
public class UserInfoDTO {
	//用户名
	private String userName;
	//密码
	private String password;
	//真实姓名
	private String realName;
	//昵称
	private String nickName;
}

2.10 创建Dao层代码,具体如下
DAO层接口:

package demo.dao;

import java.util.List;

import demo.dto.UserInfoDTO;

public interface IUserLoginDao {
	UserInfoDTO selectUserInfoByUserName(String userName);
}

DAO层实现类:

package demo.dao.impl;

import java.util.List;

import org.springframework.stereotype.Repository;

import demo.common.BaseMapper;
import demo.dao.IUserLoginDao;

import demo.dto.UserInfoDTO;
@Repository
public class UserLoginDaoImpl extends BaseMapper implements IUserLoginDao {

	public UserInfoDTO selectUserInfoByUserName(String userName) {
		// TODO Auto-generated method stub
		return this.getSqlMapClientTemplate().queryForObject("selectUserInfoByUserName",userName);
	}

}

BaseMapper类的实现:

package demo.common;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import com.ibatis.sqlmap.client.SqlMapClient;

import lombok.Data;

public class BaseMapper extends SqlMapClientDaoSupport {
	    @Resource(name="sqlMapClient")
	    private SqlMapClient sqlMapClient;  
	      
	    @PostConstruct  
	    public void initSqlMapClient(){  
	        super.setSqlMapClient(sqlMapClient);
	    }
	    
}

2.11 service层代码如下
service接口:

package demo.service;

import java.util.List;

import demo.dto.UserInfoDTO;

public interface IUserLoginService {
	
	
	UserInfoDTO toLogin(String userName,String password);
}

service接口实现类:

package demo.service.Impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import demo.dao.IUserLoginDao;
import demo.dto.UserInfoDTO;
import demo.exception.ServiceException;
import demo.service.IUserLoginService;
@Service
public class UserLoginServiceImpl implements IUserLoginService{
	@Autowired
	private IUserLoginDao userLoginDao;

	public UserInfoDTO toLogin(String userName, String password) {
		UserInfoDTO userInfoDTO = null;
		
		try {
			userInfoDTO = userLoginDao.selectUserInfoByUserName(userName);
		}catch(Exception e) {
			
		}
		if(null ==userInfoDTO) {
			throw new ServiceException("001","用户不存在!");
		}
		if(!password.equals(userInfoDTO.getPassword())) {
			throw new ServiceException("002","密码错误!");
		}
		
		return userInfoDTO;
	}
	
	
}

2.12 自定义运行时异常
ServiceException实现:

package demo.exception;

public class ServiceException extends RuntimeException {
	private String errCode ;
	  
    public ServiceException(String errCode, String message){
        super(message);
        this.errCode = errCode ;
    }

    public String getErrCode() {
        return errCode;
    }
}

2.13 controller代码如下
UserLoginController实现:

package demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import demo.common.ResponseBaseDTO;
import demo.dto.UserInfoDTO;
import demo.exception.ServiceException;
import demo.service.IUserLoginService;

@Controller
public class UserLoginController {

	@Autowired
	private IUserLoginService userLoginService;
	
	@RequestMapping("/user/login")
	@ResponseBody
	public ResponseBaseDTO login(String userName,String password) {
		UserInfoDTO userInfoDTO = new UserInfoDTO();
		
		try {
			if(null == userName) {
				throw new ServiceException("003","请输入用户名!");
			}
			if(null == password ) {
				throw new ServiceException("003","请输入密码!");
			}
			userInfoDTO = userLoginService.toLogin(userName, password);
		}catch(ServiceException se) {
			return ResponseBaseDTO.fail(se.getMessage());
		}catch(Exception e) {
			return ResponseBaseDTO.fail("网络异常!");
		}
		
		return ResponseBaseDTO.success(userInfoDTO);
	}
}

2.14 基础的返回类型如下

ResponseBaseDTO实现:

package demo.common;

import lombok.Data;

@Data
public class ResponseBaseDTO {
    private String cole;
    private String message;
    private Object data;

    public static ResponseBaseDTO success(Object data) {
    	ResponseBaseDTO base = new ResponseBaseDTO();
    	base.setCole("1");
    	base.setMessage("");
    	base.setData(data);
    	return base;
    }
    
    public static ResponseBaseDTO fail(String message) {
    	ResponseBaseDTO base = new ResponseBaseDTO();
    	base.setCole("0");
    	base.setMessage(message);
    	return base;
    }
}

2.15 创建数据库和用户表
数据库名为:ssi(若更改,请在jdbc.properties文件下的url等号后中ssi改成相应的库名)
建表语句:

CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `user_name` varchar(255) DEFAULT NULL COMMENT '用户名',
  `password` varchar(255) DEFAULT NULL COMMENT '密码',
  `real_name` varchar(255) DEFAULT NULL COMMENT '真实姓名',
  `nick_name` varchar(255) DEFAULT NULL COMMENT '昵称',
  `is_delete` varchar(1) DEFAULT NULL COMMENT '删除位  0:未删除  1:已经删除',
  `create_date` datetime DEFAULT NULL,
  `create_user` varchar(255) DEFAULT NULL,
  `modify_date` datetime DEFAULT NULL,
  `modify_user` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

此时一个简单登陆demo就已经实现了,接下来就可以进行测试了,由于此次demo并没有写页面,所以就用PostMan来测试接口

三.测试

3.1 启动项目,具体步骤请看上面1.6
3.2 项目启动成功,打开PostMan测试,具体如下

在这里插入图片描述
在<1>中 填写请求路径,请求路径为:
http://ip地址(本机127.0.0.1或如图):端口号(tomcat默认为8080,图中进行修改为8090)/项目名称(ssi-project)/controller中@RequestMapping里填写的uri参数?请求参数,多个用&分隔

在<2>中填写请求头信息Content-Type信息。
单击<3>中单击Send按钮,就会在Body中收到响应的信息。

此时就代表一个简单的登陆接口已经实现,当然这只是一个非常简单的登录demo,也只能作为demo。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值