spring、spring mvc、mybatis框架(ssm)整合实战,实现登录(myeclipse版)

这是一篇myeclipse版的利用注解整合ssm实现登录的教程

大纲:1.数据库设计
           2.ssm搭建
           3.实现登录
          4.总结


一、数据库设计
设计数据库,建立一个数据库,名字这里我用pro,建立一张表users,该表一共有三个字段

二、ssm搭建
1.创建动态web项目
右击项目空白处--new--project

选择Dynamic Web Project,点击next,如果没有的话勾选下面的Show All Wizards,然后在上面搜索就可以找到了
Project Name:项目名称,填写好后点finish
之后如果弹出一个框你不用管,点取消就行,如果点了也没事,就是视图切换而已,在右上角如图所示点击选择java就行
2.导入jar包
我将jar包整理好定义了一个library,要用的时候导入可以了。
jar如下:
3.搭建项目架构,如下所示(为了包分开建了一个实体类)
4.编写ssm配置文件
4.1编写与数据库相关的jdbc.properties
在src根目录新建配置文件 jdbc.properties,内容如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/pro?useUnicode=true&characterEncoding=utf-8
username=root
password=root
#定义初始连接数
initialSize=0
#定义最大连接数
maxActive=20
#定义最大空闲
maxIdle=20
#定义最小空闲
minIdle=1
#定义最大等待时间(毫秒)
maxWait=60000

4.2编写mybatis配置文件 mybatis_config.xml,在src根目录下新建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>
</configuration>

4.3编写spring-mybatis.xml配置文件,在src根目录下新建 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:tx="http://www.springframework.org/schema/tx"     xmlns:aop="http://www.springframework.org/schema/aop"     xsi:schemaLocation="http://www.springframework.org/schema/beans         http://www.springframework.org/schema/beans/spring-beans-4.3.xsd         http://www.springframework.org/schema/tx         http://www.springframework.org/schema/tx/spring-tx-4.3.xsd         http://www.springframework.org/schema/aop         http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">  
 <!-- 引入配置文件 -->     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">         <property name="location" value="classpath:jdbc.properties" />     </bean>      <!-- 配置连接池,以dbcp为例 -->  <bean id="dataSourcePool" class="org.apache.commons.dbcp.BasicDataSource">   <property name="driverClassName" value="${driver}" />         <property name="url" value="${url}" />         <property name="username" value="${username}" />         <property name="password" value="${password}" />         <!-- 初始化连接大小 -->         <property name="initialSize" value="${initialSize}"></property>         <!-- 连接池最大数量 -->         <property name="maxActive" value="${maxActive}"></property>         <!-- 连接池最大空闲 -->         <property name="maxIdle" value="${maxIdle}"></property>         <!-- 连接池最小空闲 -->         <property name="minIdle" value="${minIdle}"></property>         <!-- 获取连接最大等待时间 -->         <property name="maxWait" value="${maxWait}"></property>  </bean>    <!-- 配置sessionFactory -->  <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">   <property name="configLocation" value="classpath:mybatis_config.xml"/>   <property name="dataSource" ref="dataSourcePool" />   <!-- 自动扫描mapping.xml文件 -->   <property name="mapperLocations" value="classpath:cn/syy/ssmdemo2/mapping/*.xml"></property>  </bean>    <!-- 声明事务管理器 -->  <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">   <property name="dataSource" ref="dataSourcePool"></property>  </bean>  <!-- 声明事务增强处理 -->  <tx:advice id="txAdvice" transaction-manager="txManager">   <!-- 声明事务属性 -->   <tx:attributes>    <tx:method name="*" propagation="REQUIRED" isolation="DEFAULT"     read-only="false" />   </tx:attributes>  </tx:advice>  <!-- 配置切面 -->  <aop:config>   <!-- 定义切入点 -->   <aop:pointcut expression="execution(* cn.syy.ssmdemo2.service.*.*(..))"    id="pointCut" />   <!-- 将切入点和增强处理组合,构成切面 -->   <aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut" />  </aop:config> </beans>

4.4编写springmvc-servlet.xml,在WEB-INF根目录下创建springmvc-servlet.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:mvc="http://www.springframework.org/schema/mvc"     xmlns:context="http://www.springframework.org/schema/context"     xsi:schemaLocation="http://www.springframework.org/schema/beans         http://www.springframework.org/schema/beans/spring-beans-4.3.xsd         http://www.springframework.org/schema/mvc         http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd         http://www.springframework.org/schema/context         http://www.springframework.org/schema/context/spring-context-4.3.xsd">     <!-- 启动mvc注解驱动 -->     <mvc:annotation-driven/>
     <!-- 自动扫描包,将注解的类加入bean工厂,交由spring管理 -->     <context:component-scan base-package="cn.syy.ssmdemo2"/>     <!-- 配置视图解析器 -->     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">      <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>      <property name="prefix" value="/jsp/"/>      <property name="suffix" value=".jsp"/>     </bean>     <!-- 配置静态资源如css -->     <mvc:resources mapping="/resource/**" location="/resource/" /> </beans>

4.5日志属性log4j.properties,在src根目录创建 log4j.properties内容如下:

### direct log messages to stdout ###
log4j.rootLogger=warn, stdout, file
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file ssm1.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=ssm1.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

4.6编写web.xml,在WEB-INF下新建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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	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>ssmdemo2</display-name>
	<!-- spring和mybatis配置文件 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
  		classpath:spring-mybatis.xml
  		</param-value>
	</context-param>
	
	<!-- 配置log4j配置文件 -->
	<context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:jdbc.properties</param-value>
    </context-param>
    
    <!-- 设定刷新日志配置文件的时间间隔,这里设置为10s -->
    <context-param>
        <param-name>log4jRefreshInterval</param-name>
        <param-value>10000</param-value>
    </context-param>
    
    <!-- 为避免项目间冲突,定义唯一的 webAppRootKey -->
    <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>scheduleProject</param-value>
    </context-param>
    
	<!-- 配置springmvc编码过滤器,防止页面传值乱码 -->
	<filter>
		<filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<!-- Spring监听器 ApplicationContext 载入 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<!-- 加载Spring框架中的log4j监听器Log4jConfigListener -->
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
	
	<!-- 配置spring核心控制器 -->
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
</web-app>
5.用mybatis-generator 代码自动生成工具自动生成dao、entity、mapping文件映射,具体有兴趣可以去百度,很简单
generator.xml
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">  
<generatorConfiguration>  
    <!-- 数据库驱动包位置 -->  
    <classPathEntry location="D:\generator\mysql-connector-java-5.1.18-bin.jar" />   
    <!-- <classPathEntry location="C:\oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar" />-->  
    <context id="DB2Tables" targetRuntime="MyBatis3">  
        <commentGenerator>  
            <property name="suppressAllComments" value="true" />  
        </commentGenerator>  
        <!-- 数据库链接URL、用户名、密码 -->  
         <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/pro?characterEncoding=utf8" userId="root" password="root">   
        <!--<jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@localhost:1521:orcl" userId="msa" password="msa">-->  
        </jdbcConnection>  
        <javaTypeResolver>  
            <property name="forceBigDecimals" value="false" />  
        </javaTypeResolver>  
        <!-- 生成模型的包名和位置 -->  
        <javaModelGenerator targetPackage="cn.syy.ssmdemo2.entity" targetProject="D:\generator\src">  
            <property name="enableSubPackages" value="true" />  
            <property name="trimStrings" value="true" />  
        </javaModelGenerator>  
        <!-- 生成的映射文件包名和位置 -->  
        <sqlMapGenerator targetPackage="cn.syy.ssmdemo2.mapping" targetProject="D:\generator\src">  
            <property name="enableSubPackages" value="true" />  
        </sqlMapGenerator>  
        <!-- 生成DAO的包名和位置 -->  
        <javaClientGenerator type="XMLMAPPER" targetPackage="cn.syy.ssmdemo2.dao" targetProject="D:\generator\src">  
            <property name="enableSubPackages" value="true" />  
        </javaClientGenerator>  
        <!-- 要生成那些表(更改tableName和domainObjectName就可以) -->  
        <table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
    </context>  
</generatorConfiguration>  

接着将这些文件复制到项目路径里就可以了,要简单修改一下,如果不改的话可能映射文件里就把你自增的字段给insert进去了,当然没有注释的啦,自己加。
接着我们在web.controller新建个controller,如LoginController
package cn.syy.ssmdemo2.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping(value="/")
public class LoginController {
	@RequestMapping(value="/")
	@ResponseBody
	public String hello(){
		return "hello";
	}
}

然后将项目运行在tomcat,接着输入: http://localhost:8080/ssmdemo2/
出现这样就代表搭建完成了。

三、实现登录

我的登录逻辑是这样的:根据用户名判断用户是否存在,再根据查到用户的密码与页面密码相比较。不多说上代码。
1.实体类
User.java
package cn.syy.ssmdemo2.entity;

public class User {
    private Integer id;

    private String username;

    private String password;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username == null ? null : username.trim();
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password == null ? null : password.trim();
    }
}
2.dao层(为方便起见把多余的代码都删了)
UserMapper.java
package cn.syy.ssmdemo2.dao;

import cn.syy.ssmdemo2.entity.User;

public interface UserMapper {
	/**
	 * 根据username查数据
	 */
	User getByName(String username);
}

impl:UserMapperImpl.java


package cn.syy.ssmdemo2.dao.impl;

import javax.annotation.Resource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.stereotype.Repository;

import cn.syy.ssmdemo2.dao.UserMapper;
import cn.syy.ssmdemo2.entity.User;
@Repository
public class UserMapperImpl implements UserMapper {
	@Resource
	private SqlSessionFactory sqlSessionFactory;

	/**
	 * 根据username查User对象
	 */
	@Override
	public User getByName(String username) {
		User user = sqlSessionFactory.openSession()
				.selectOne("cn.syy.ssmdemo2.dao.UserMapper.getByName",username);
		return user;
	}
}
3.映射文件包mapping
UserMapper.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 -->
<mapper namespace="cn.syy.ssmdemo2.dao.UserMapper">
	<!-- 创建与数据库的关系映射 -->
	<resultMap type="cn.syy.ssmdemo2.entity.User" id="userMap">
		<!-- 配置主键映射 -->
		<id property="id" column="ID"></id>
		<result property="username" column="USERNAME"/>
		<result property="password" column="PASSWORD"/>
	</resultMap>
	<select id="getByName" parameterType="string" resultMap="userMap">
		SELECT ID,USERNAME,PASSWORD FROM users WHERE USERNAME=#{username}
	</select>
</mapper>
4.service层
ILoginService.java
package cn.syy.ssmdemo2.service;

import cn.syy.ssmdemo2.entity.User;

public interface ILoginService {
	/**
	 * 登录逻辑:根据用户名判断用户是否存在,再根据查到用户的密码与页面密码相比较
	 */
	User isLogin(String username,String password);
}
impl: ILoginServiceImpl.java
package cn.syy.ssmdemo2.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import cn.syy.ssmdemo2.dao.UserMapper;
import cn.syy.ssmdemo2.entity.User;
import cn.syy.ssmdemo2.service.ILoginService;
@Service
public class ILoginServiceImpl implements ILoginService {
	@Resource
	private UserMapper userDao;

	/**
	 * 登录逻辑:根据用户名判断用户是否存在,再根据查到用户的密码与页面密码相比较
	 */
	@Override
	public User isLogin(String username,String password) {
		User user = userDao.getByName(username);
		if(user!=null){
			return password.equals(user.getPassword())?user:null;
		}
		return null;
	}

}
5.controller
修改LoginController
package cn.syy.ssmdemo2.web.controller;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import cn.syy.ssmdemo2.entity.User;
import cn.syy.ssmdemo2.service.ILoginService;

@Controller
@RequestMapping(value="login")
@Scope("prototype")
public class LoginController {
	@Resource
	private ILoginService loginService;
	/**
	 * 登录:判断登录是否成功,成功存入session,并打印成功信息,失败提示失败,并打印失败信息
	 */
	@RequestMapping(value="login")
	public String login(String username,String password,HttpServletRequest request){
		User user = loginService.isLogin(username, password);
		if(user!=null){
			System.out.println(username+"登录成功!");
			request.getSession().setAttribute("logined",user);
			return "login/success";
		}
		System.out.println(username+"登录失败");
		return "login/fail";
	}
}

结果如下:
fail.jsp就一个“登录失败”,success.jsp就一个“登录成功”。
login.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>登录</title>
</head>
<body>
<form action="/ssmdemo2/login/login" method="post">
用户名:<input name="username" type="text">
密码:<input name="password" type="password">
<input type="submit" value="登录">
</form>
</body>
</html>

好了一切搞定,启动tomcat,浏览器输入: http://localhost:8080/ssmdemo2/jsp/login/login.jsp

事先写入数据表的内置用户:admin 密码:admin

后台:

直接回车,由于没有传username,查到user对象为null
好了,教程到此结束,现在你已经知道如何搭建ssm了,快去自己动手搭建一个吧。

四、总结:

搭建ssm步骤如下:
1.新建一个web项目
2.导入jar
3.搭建网站基本架构(dao、service、entity、controller、utils、mapping)
4. 编写与数据库相关的jdbc.properties
5.编写mybatis.xml配置文件
6.编写spring-mybatis.xml配置文件
7.在web/info下编写spingmvc-servlet.xml配置文件
8.编写日志属性log4j.properties
9.编写配置文件web.xml

实现登录步骤如下:
1.设计数据库
2.用代码自动生成工具 mybatis-generator
3.复制和修改文件
(2.3步也可以自己写,顺序:1.实体类--2.实体类映射--3.dao--4.daoimpl)
4.为dao增加方法
5.编写service
6.编写controller
7.编写页面

猜你喜欢

转载自blog.csdn.net/qq_33719636/article/details/80330107