spring+springMvc+Mybatis简单案例超详细

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/NiQinGe/article/details/79745470

上一篇文章介绍了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的类,内容如下所示:

扫描二维码关注公众号,回复: 3229274 查看本文章

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显示浏览器控制台,如果看看如下图则表示成功啦。当然你的数据库用户表中必须有这个用户才会显示这样,如果没有这个用户后台会返回来另一些信息。


如果过程中发生问题,有不懂的地方可以给我留言。

猜你喜欢

转载自blog.csdn.net/NiQinGe/article/details/79745470
今日推荐