上一篇文章介绍了spring+springMvc+Mybatis的搭建,地址https://blog.csdn.net/niqinge/article/details/79280204
现在来仔细介绍一个简单的案例。
在搭建完ssm框架之后,不懂搭建的朋友可以先看看我的上一篇文章地址https://blog.csdn.net/niqinge/article/details/79280204
1、先建立一些必要的文件夹,如下图,其中base文件是存放一些公共常用到的接口/类等,controller文件夹主要用来存放controller类,dao文件夹主要用来存放dao文件(包括dao层的xml文件的dao接口),model主要是用来存放一些实体类,service文件夹用来存放service层类,utils文件夹用来存放工具类;当然这些文件夹可以视情况而建。在webapp下新建一个testPages文件夹,用于存放我们的测试页面文件。
2、新建完文件夹后,我们开始新建文件。
2.1、在刚才新建的dao文件夹中 新建一个名为TMgtUserDAO的接口和一个名为TMgtUserDAO.xml的文件,两个名称要一样哦,TMgtUserDAO.java的内容如下:
package manage.dao; import manage.model.TMgtUser; import java.util.Map; public interface TMgtUserDAO { public TMgtUser login(Map<String, Object> map); }
package manage.utils; /** * Created by Novice on 2017/12/13. * * 静态常量 */ public class ConstantSrting { public static String STATUS_SUCCESS = "S00001"; //成功状态 public static String STATUS_FAIL = "S00002"; //失败状态 public static String STATUS_other = "S00003"; //其他状态 }
TMgtUserDAO.xml的文件的内容如下所示:当然BaseResultMap
<?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="manage.dao.TMgtUserDAO"> <resultMap id="BaseResultMap" type="manage.model.TMgtUser"> <id column="USER_ID" jdbcType="VARCHAR" property="userId"/> <result column="USER_NAME" jdbcType="VARCHAR" property="userName"/> <result column="EN_NAME" jdbcType="VARCHAR" property="enName"/> <!--<result column="PASSWORD" jdbcType="VARCHAR" property="pw"/> 不查密码--> <result column="SEX" jdbcType="VARCHAR" property="sex"/> <result column="BIRTHDAY" jdbcType="VARCHAR" property="birthday"/> <result column="EMAIL" jdbcType="VARCHAR" property="email"/> <result column="PHONE" jdbcType="VARCHAR" property="phone"/> <result column="ADDR" jdbcType="VARCHAR" property="addr"/> <result column="HOME_TOWN" jdbcType="VARCHAR" property="homeTown"/> <result column="CHANESE_ID" jdbcType="VARCHAR" property="chaneseId"/> <result column="DEPT_ID" jdbcType="VARCHAR" property="deptId"/> <result column="JOB_ID" jdbcType="VARCHAR" property="jobId"/> <result column="USER_LEVEL" jdbcType="VARCHAR" property="userLevel"/> <result column="STATUS" jdbcType="VARCHAR" property="status"/> <result column="IMG" jdbcType="VARCHAR" property="img"/> <result column="CREATOR" jdbcType="VARCHAR" property="creator"/> <result column="CREATE_TIME" jdbcType="VARCHAR" property="createTime"/> <result column="MENDER" jdbcType="VARCHAR" property="mender"/> <result column="MEND_TIME" jdbcType="VARCHAR" property="mendTime"/> <result column="REMARK" jdbcType="VARCHAR" property="remark"/> <result column="SEX_NAME" jdbcType="VARCHAR" property="sexName"/> <result column="DEPT_NAME" jdbcType="VARCHAR" property="deptName"/> <result column="JOB_NAME" jdbcType="VARCHAR" property="jobName"/> </resultMap> <sql id="Base_Column_List"> USER.USER_ID USER_ID, USER_NAME, /*PASSWORD, 不查密码*/ EN_NAME, SEX, BIRTHDAY, EMAIL, PHONE, USER.ADDR ADDR, HOME_TOWN, CHANESE_ID, USER.DEPT_ID DEPT_ID, USER.JOB_ID JOB_ID, USER_LEVEL, USER.STATUS STATUS, IMG, USER.CREATOR, USER.CREATE_TIME, USER.MENDER, USER.MEND_TIME, USER.REMARK </sql> <sql id="order_Column_List"> CD.VALUE_NAME AS SEX_NAME, DEPT.DEPT_NAME AS DEPT_NAME, JOB.JOB_NAME AS JOB_NAME </sql> <!-- 登录 --> <select id="login" parameterType="java.util.Map" resultMap="BaseResultMap"> select <include refid="Base_Column_List"/> from t_mgt_user USER where (USER_NAME = #{userName,jdbcType=VARCHAR} || EN_NAME = #{userName,jdbcType=VARCHAR} ) AND PASSWORD = #{pw,jdbcType=VARCHAR} </select> <!-- 根据主键查询用户信息 --> <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap"> select <include refid="Base_Column_List"/>, <include refid="order_Column_List"/> FROM t_mgt_user USER LEFT JOIN t_mgt_department DEPT ON DEPT.DEPT_ID = USER.DEPT_ID LEFT JOIN t_mgt_job JOB ON JOB.JOB_ID = USER.JOB_ID LEFT JOIN codedata CD ON CD.CODE_VALUE = USER.SEX where USER_ID = #{userId,jdbcType=VARCHAR} </select> <!-- 根据主键删除用户 --> <delete id="deleteByPrimaryKey" parameterType="java.lang.String"> delete from t_mgt_user where USER_ID = #{userId,jdbcType=VARCHAR} </delete> </mapper>
2.2、在刚才新建的model文件夹中新建一个类名为TMgtUser的类,内容如下所示:
package manage.model; public class TMgtUser { private String userId; //用户编号 private String userName; //用户名称 private String enName; //英文名字 private String pw; //密码 private String sex; //性别 private String birthday; //出生日期 private String email; //邮箱 private String phone; //联系方式 private String addr; //现住址 private String homeTown; //家乡 private String chaneseId; //身份证号 private String deptId; //部门编号 private String jobId; //岗位编号 private String userLevel; //用户等级 private String status; //状态 private String img; //图片地址 private String creator; private String createTime; private String mender; private String mendTime; private String remark; /* 其它表字段 */ private String sexName; //性别名称 private String deptName; //部门名称 private String jobName; //岗位名称 public String getSexName() { return sexName; } public void setSexName(String sexName) { this.sexName = sexName; } public String getDeptName() { return deptName; } public void setDeptName(String deptName) { this.deptName = deptName; } public String getJobName() { return jobName; } public void setJobName(String jobName) { this.jobName = jobName; } public String getPw() { return pw; } public void setPw(String pw) { this.pw = pw; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId == null ? null : userId.trim(); } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName == null ? null : userName.trim(); } public String getEnName() { return enName; } public void setEnName(String enName) { this.enName = enName == null ? null : enName.trim(); } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex == null ? null : sex.trim(); } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday == null ? null : birthday.trim(); } public String getEmail() { return email; } public void setEmail(String email) { this.email = email == null ? null : email.trim(); } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone == null ? null : phone.trim(); } public String getAddr() { return addr; } public void setAddr(String addr) { this.addr = addr == null ? null : addr.trim(); } public String getHomeTown() { return homeTown; } public void setHomeTown(String homeTown) { this.homeTown = homeTown == null ? null : homeTown.trim(); } public String getChaneseId() { return chaneseId; } public void setChaneseId(String chaneseId) { this.chaneseId = chaneseId == null ? null : chaneseId.trim(); } public String getDeptId() { return deptId; } public void setDeptId(String deptId) { this.deptId = deptId == null ? null : deptId.trim(); } public String getJobId() { return jobId; } public void setJobId(String jobId) { this.jobId = jobId == null ? null : jobId.trim(); } public String getUserLevel() { return userLevel; } public void setUserLevel(String userLevel) { this.userLevel = userLevel == null ? null : userLevel.trim(); } public String getStatus() { return status; } public void setStatus(String status) { this.status = status == null ? null : status.trim(); } public String getImg() { return img; } public void setImg(String img) { this.img = img == null ? null : img.trim(); } public String getCreator() { return creator; } public void setCreator(String creator) { this.creator = creator == null ? null : creator.trim(); } public String getCreateTime() { return createTime; } public void setCreateTime(String createTime) { this.createTime = createTime == null ? null : createTime.trim(); } public String getMender() { return mender; } public void setMender(String mender) { this.mender = mender == null ? null : mender.trim(); } public String getMendTime() { return mendTime; } public void setMendTime(String mendTime) { this.mendTime = mendTime == null ? null : mendTime.trim(); } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark == null ? null : remark.trim(); } }2.3、在service文件夹中新建一个serviceInterface文件夹,在serviceInterface文件夹里新建一个接口名为
IUserService,这个接口的内容如下所示:
package manage.service.serviceInterface; import manage.model.TMgtUser; /** * Created by Novice on 2017/12/12. */ public interface IUserService { public TMgtUser login (String userName, String pw) throws Exception; }
新建完service层的接口以后,在service文件夹中新建一个名为UserService的类,UserService类实现刚才你新建的
IUserService接口,UserService内容如下所示:
package manage.service; import manage.dao.TMgtUserDAO; import manage.model.TMgtUser; import manage.service.serviceInterface.IUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.Map; /** * Created by Novice on 2017/12/12. */ @Service public class UserService implements IUserService { @Autowired private TMgtUserDAO tMgtUserMapper; @Override public TMgtUser login(String userName, String pw) throws Exception { Map<String, Object> map = new HashMap<String, Object>(); map.put( "userName", userName); map.put( "pw", pw ); return tMgtUserMapper.login( map ); } }
2.4、在刚才新建的controller文件中新建一个名为UserController的类,内容如下所示:
package manage.controller; import manage.model.TMgtUser; import manage.utils.resultUtils.BaseResult; import manage.service.serviceInterface.IUserService; import manage.utils.ConstantSrting; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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.ResponseBody; /** * Created by Novice on 2017/12/12. */ @Controller @RequestMapping(value = "/manage/user/") public class UserController { @Autowired private IUserService userService; private static Logger logger = LoggerFactory.getLogger(UserController.class); /** * 登录 * * @param userName 用户名 * @param pw 密码 * @return */ @ResponseBody @RequestMapping(value = "login") public BaseResult<TMgtUser> login(String userName, String pw) { BaseResult<TMgtUser> br = new BaseResult<TMgtUser>(); if (userName == null || userName.length() == 0 || pw == null || pw.length() == 0) { logger.error("用户名和密码不能为空!"); br.setStatus(ConstantSrting.STATUS_FAIL); br.setMessage("用户名和密码不能为空!"); return br; } if( userName.length() < 3 || userName.length() > 16 ){ br.setStatus(ConstantSrting.STATUS_FAIL); br.setMessage("用户名只能包含中文、英文字符、数字和下横线,且长度在4~16字符之间!"); return br; } if( userName.length() < 6 || userName.length() > 16 ){ br.setStatus(ConstantSrting.STATUS_FAIL); br.setMessage("密码只能包含英文字符和数字,且长度在6~16字符之间!"); return br; } try { TMgtUser user = userService.login(userName, pw); if (user == null) { br.setStatus(ConstantSrting.STATUS_FAIL); br.setMessage("用户名或密码不正确!"); return br; } br.setEntity(user); br.setStatus(ConstantSrting.STATUS_SUCCESS); } catch (Exception e) { logger.error("登录时发生异常:" + e); e.printStackTrace(); br.setStatus(ConstantSrting.STATUS_FAIL); br.setMessage("登录时发生异常!"); } return br; } }
3、新建完这些类后你可能会发现一些错误,可能是因为有些工具类找不到导致的,下面我们来新建工具类。
在刚才新建的utils文件夹中新建名为resultUtils的文件夹,然后再这个刚建的文件夹中新建一个名为BaseResult的类,其内容如下所示:
package manage.utils.resultUtils; import java.util.List; /** * Created by Novice on 2017/12/13. * * 返回结果类 * * 包含一个List<T> * 状态status * 某个类对象 T * */ public class BaseResult<T> { private String status; //处理结果状态 private String message; //返回信息 private T entity; //返回实体对象 private List<T> list; //返回结果集 public BaseResult(String status, String message) { this.status = status; this.message = message; } public BaseResult(String status, String message, T entity, List<T> list) { this.status = status; this.message = message; this.entity = entity; this.list = list; } public BaseResult(String status, T entity, List<T> list) { this.list = list; this.status = status; this.entity = entity; } public BaseResult( String status,List<T> list) { this.list = list; this.status = status; } public BaseResult(String status, T entity) { this.status = status; this.entity = entity; } public BaseResult() { } public BaseResult(String status) { this.status = status; } public List<T> getList() { return list; } public void setList(List<T> list) { this.list = list; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public T getEntity() { return entity; } public void setEntity(T entity) { this.entity = entity; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }新建完这个类后,在utils这哥文件夹中新建ConstantString类和StringUtils类,ConstantString其内容如下所示
package manage.utils; /** * Created by Novice on 2017/12/13. * * 静态常量 */ public class ConstantSrting { public static String STATUS_SUCCESS = "S00001"; //成功状态 public static String STATUS_FAIL = "S00002"; //失败状态 public static String STATUS_other = "S00003"; //其他状态 }StringUtils类的内容如下:
package manage.utils; import java.util.ArrayList; import java.util.List; import java.util.UUID; /** * 字符串工具类 * Created by Novice on 2018/2/1. */ public class StringUtil { /** * 判断是否为空或者为null * @param str * @return 如果是空或者null,则返回true;否则返回false */ public static boolean isEmptyOrNull( String str){ if( str == null || "".equals( str ) ) { return true; } return false; } /** * 判断List是否为空或者为null * @param list * @return 如果是空或者null,则返回true;否则返回false */ public static boolean listIsEmptyOrNull( List list){ if( list == null || list.size()==0 ) { return true; } return false; } /** * 获取UUID随机数 * * @return 36位的UUID,带有-分割 */ public static String getUUID36 ( ) { return UUID.randomUUID().toString(); } /** * 获取UUID随机数 * * @return 32位的UUID,不带-分割 */ public static String getUUID32 ( ) { return getUUID36().replace( "-", "" ); } /** * 数组转换为List * * @param objArray * 数组 * @return List */ public static List<String> arryToList (String[] objArray ) { List<String> objList = new ArrayList<String>(); if ( null == objArray || 0 == objArray.length ) { return objList; } for ( String obj : objArray ) { objList.add( obj ); } return objList; } /** * 判断字符串是否全为数字 * * @param strSource 原始字符串 * @return 是返回true,否则返回false */ public static boolean msIsNum(String strSource) { if ((strSource == "")) return false; for (int i = 0; i < strSource.length(); i++) { if (!Character.isDigit(strSource.charAt(i))) return false; } return true; } /** * 判断字符串是否全为数字(包括点) * * @param strSource 原始字符串 * @return 是返回true,否则返回false */ public static boolean msIsNumeric(String strSource) { if ((strSource == "")) return false; for (int i = 0; i < strSource.length(); i++) { if (strSource.charAt(i) == ('.') || strSource.charAt(i) == (',')) { continue; } else if (!Character.isDigit(strSource.charAt(i))) { return false; } } return true; } }
至此,后端的java代码已经写完了;接下来我们要保证你的数据库能连上,可以查看下图箭头所指的文件信息.
这个文件的内容如下:
# mysql数据库 jdbc.driver=com.mysql.jdbc.Driver # 本地mysql数据库
# 数据库地址,此处默认本地地址,hotel表示数据库名 # jdbc.url=jdbc:mysql://localhost:3306/hotel?characterEncoding=utf-8
# 数据库用户名称 #jdbc.username=root
# 数据库密码 #jdbc.password=
配置这些数据库相关信息。
4、在testPages文件夹中新建test.html页面文件
其内容如下所示:
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="https://cdn.bootcss.com/jquery/1.6.4/jquery.min.js"></script> <title>登录</title> <script type="text/javascript"> function test() { $.ajax({ url: "/wdkj/manage/user/login", type: "post", async: false, data: { "userName":$("#userName").val(), "pw":$("#pw").val(), }, success: function (data) { console.log(data); if (data.status == 'S00001') { $("#centerText").html(data.entity.userName); } else { $("#centerText").html(data.message); } }, error: function (data) { alert("请求失败!"); } }); }; </script> </head> <body> <form> <input type="text" name="userName" id="userName" placeholder="用户名"/> <input type="text" name="pw" id="pw" placeholder="密码"/> <input type="button" onclick="test()" value="登录"/> </form> <!--用于显示结果--> <div id="centerText"></div> </body> </html>
5、新建完所有页面之后,在找到web.xml文件中修改默认页testPages文件夹下的test.html页面,即修改web.xml文件的相应内容为:
<welcome-file-list> <welcome-file>testPages/test.html</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list>
6、配置好你的tomcat服务器,如果不会配置tomcat,在下一篇文章我将会介绍。
7、启动你的tomcat服务器,会自动打开到你的test.html页面,输入用户名和密码后点击登录,在浏览器中可以按F12或者fn+f12显示浏览器控制台,如果看看如下图则表示成功啦。当然你的数据库用户表中必须有这个用户才会显示这样,如果没有这个用户后台会返回来另一些信息。
如果过程中发生问题,有不懂的地方可以给我留言。