这是一篇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.编写页面