欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SSM框架中entity mapper dao service controller層的使用

 更新時間:2023年11月03日 16:43:51   作者:勞心  
這篇文章主要介紹了SSM框架中entity mapper dao service controller層的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1、entity:實體層

用戶實現對數據庫表的映射

package com.fq.entity;
 
import java.io.Serializable;
 
public class User implements Serializable {
    private static final long serialVersionUID = 1;
 
    private int uid;
    private String username;//uname
    private String upassword;
    private String usex;
    private String ustatus;
    private String code;
    private String email;
    private int urole;//角色
 
    public String getUsername() {
        return username;
    }
 
    public int getUid() {
        return uid;
    }
 
    public void setUid(int uid) {
        this.uid = uid;
    }
 
    public String getUpassword() {
        return upassword;
    }
 
    public void setUpassword(String upassword) {
        this.upassword = upassword;
    }
 
    public String getUsex() {
        return usex;
    }
 
    public void setUsex(String usex) {
        this.usex = usex;
    }
 
    public String getUstatus() {
        return ustatus;
    }
 
    public void setUstatus(String ustatus) {
        this.ustatus = ustatus;
    }
 
    public int getUrole() {
        return urole;
    }
 
    public void setUrole(int urole) {
        this.urole = urole;
    }
 
    public String getCode() {
        return code;
    }
 
    public String getEmail() {
        return email;
    }
 
    public void setUsername(String username) {
        this.username = username;
    }
 
    public void setCode(String code) {
        this.code = code;
    }
 
    public void setEmail(String email) {
        this.email = email;
    }
 
    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", username='" + username + '\'' +
                ", upassword='" + upassword + '\'' +
                ", usex='" + usex + '\'' +
                ", ustatus='" + ustatus + '\'' +
                ", code='" + code + '\'' +
                ", email='" + email + '\'' +
                ", urole=" + urole +
                '}';
    }
}

2、dao:數據訪問對象層

對數據庫的增刪改查,因為有entity層,dao層實際上就是對entity進行各種操作,但這里的增刪改查相對來說與業(yè)務模型是分離的(但也只是相對來說,因為一切Dao層的操作本職上還是為了業(yè)務),所以Dao層實際上是提供更上層(service層)基礎的增刪改查方法的,dao是data access object,即數據訪問對象。

數據可能保存到各種數據庫,或者各種文件,或者內存。dao層隱藏了這種實現細節(jié),更換數據庫或者文件或者內存,對調用dao的更高層來說不受影響。

mapper和dao不同,mapper的目的是為了把關系數據庫映射成java類(對象)。

因此,如果只有mapper沒有dao層,那么一旦項目需要把數據保存到文件或者內存,那么調用mapper的高層就會受到影響。

一般的項目可能只會使用數據庫作為數據存儲,所以mapper和dao可以說上就是一個東西了。

2.1 例如:dao

package com.fq.dao;
 
import com.fq.entity.User;
import org.apache.ibatis.jdbc.SQL;
 
import java.sql.SQLException;
 
/*用戶模塊數據庫訪問接口*/
public interface UserDao {
    User selectUserByUname(String username) throws SQLException;
 
    int insertUser(User user) throws SQLException;
 
    User selectUserByCode(String code)throws SQLException;
 
    int updateStatusByUid(int uid)throws SQLException;
 
}

impl

package com.fq.dao.impl;
 
import com.fq.dao.UserDao;
import com.fq.entity.User;
import com.fq.utils.C3P0Utils;
import com.fq.utils.Constants;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
 
import javax.jws.soap.SOAPBinding;
import java.sql.SQLException;
/*用戶模塊數據庫訪問實現類*/
public class UserDaoImpl implements UserDao {
    @Override
    public User selectUserByUname(String username) throws SQLException {
        QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
        String sql = "select u_id as uid , u_name as username , u_password as upassword , u_sex as usex , u_status as ustatus , u_code as code , u_email as email , u_role as urole from user where u_name = ?";
        User user = queryRunner.query(sql,new BeanHandler<User>(User.class),username);
        return user;
    }
 
    @Override
    public int insertUser(User user) throws SQLException {
        QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
        String sql = "insert into user (u_name,u_password,u_sex,u_status,u_code,u_email,u_role) value (?,?,?,?,?,?,?)";
        int rows = queryRunner.update(sql,user.getUsername(),user.getUpassword(),user.getUsex(),user.getUstatus(),user.getCode(),user.getEmail(),user.getUrole());
        return rows;
    }
 
    @Override
    public User selectUserByCode(String code) throws SQLException {
        QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
        String sql = "select u_id as uid , u_name as username , u_password as upassword , u_sex as usex , u_status as ustatus , u_code as code , u_email as email , u_role as urole from user where u_code = ?";
        User user = queryRunner.query(sql,new BeanHandler<User>(User.class),code);
 
        return user;
    }
 
    @Override
    public int updateStatusByUid(int uid) throws SQLException {
        QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
        String sql = "update user set u_status = ? where u_id = ?";
        int row  = queryRunner.update(sql, Constants.USER_ACTIVE,uid);
 
        return row;
    }
}

2.2 例如:

public interface QuestionDao {
 
    int save(Question question);
 
    int delete(Question question);
 
    int update(Question question);
 
    Question findById(String id);
 
    List<Question> findAll();
}

mapper

<?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="com.itheima.dao.store.QuestionDao">
    <!--配置實體類屬性和數據庫表中列的對應關系-->
    <resultMap id="BaseResultMap" type="com.itheima.domain.store.Question">
        <id column="id" jdbcType="VARCHAR" property="id"/>
        <result column="company_id" jdbcType="VARCHAR" property="companyId"/>
        <result column="catalog_id" jdbcType="VARCHAR" property="catalogId"/>
        <result column="remark" jdbcType="VARCHAR" property="remark"/>
        <result column="subject" jdbcType="VARCHAR" property="subject"/>
        <result column="analysis" jdbcType="VARCHAR" property="analysis"/>
        <result column="type" jdbcType="VARCHAR" property="type"/>
        <result column="difficulty" jdbcType="VARCHAR" property="difficulty"/>
        <result column="is_classic" jdbcType="VARCHAR" property="isClassic"/>
        <result column="state" jdbcType="VARCHAR" property="state"/>
        <result column="review_status" jdbcType="VARCHAR" property="reviewStatus"/>
        <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
        <result column="picture" jdbcType="VARCHAR" property="picture"/>
 
        <association
            property="company"
            column="company_id"
            javaType="com.itheima.domain.store.Course"
            select="com.itheima.dao.store.CompanyDao.findById"/>
 
        <association
            property="catalog"
            column="catalog_id"
            javaType="com.itheima.domain.store.Course"
            select="com.itheima.dao.store.CatalogDao.findById"
            />
 
    </resultMap>
 
    <!--配置查詢的列名公共SQL語句-->
    <sql id="Base_Column_List">
        id, catalog_id, company_id, remark,subject,analysis,type, difficulty, is_classic,
        state, review_status, create_time, picture
    </sql>
 
    <!--配置查詢所有,帶條件-->
    <select id="findAll" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from st_question
        order by create_time desc
    </select>
 
    <!--配置根據ID查詢-->
    <select id="findById" parameterType="java.lang.String" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from st_question
        where id = #{id,jdbcType=VARCHAR}
    </select>
 
    <!--配置根據id刪除-->
    <delete id="delete" parameterType="java.lang.String">
        delete from st_question where id = #{id,jdbcType=VARCHAR}
    </delete>
 
    <!--配置全字段插入,當某個字段沒有值時,插入null-->
    <insert id="save" parameterType="com.itheima.domain.store.Question">
        insert into st_question(id, company_id, catalog_id, remark, subject, analysis, type,
                difficulty, is_classic, state, review_status, create_time ,picture )
            values (#{id,jdbcType=VARCHAR}, #{companyId,jdbcType=VARCHAR}, #{catalogId,jdbcType=VARCHAR},
                #{remark,jdbcType=VARCHAR}, #{subject,jdbcType=VARCHAR}, #{analysis,jdbcType=VARCHAR},
                #{type,jdbcType=VARCHAR}, #{difficulty,jdbcType=VARCHAR}, #{isClassic,jdbcType=VARCHAR},
                #{state,jdbcType=VARCHAR}, #{reviewStatus,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP},
                #{picture,jdbcType=VARCHAR} )
    </insert>
 
    <!--配置全字段更新,當提供的數據為null時,數據庫數據會被更新為null-->
    <update id="update" parameterType="com.itheima.domain.store.Question">
        update
            st_question
        set
            company_id = #{companyId,jdbcType=VARCHAR},
            catalog_id = #{catalogId,jdbcType=VARCHAR},
            remark = #{remark,jdbcType=VARCHAR},
            subject = #{subject,jdbcType=VARCHAR},
            analysis = #{analysis,jdbcType=VARCHAR},
            difficulty = #{difficulty,jdbcType=VARCHAR},
            is_classic = #{isClassic,jdbcType=VARCHAR},
            picture = #{picture,jdbcType=VARCHAR},
            state = #{state,jdbcType=VARCHAR}
        where
            id = #{id,jdbcType=VARCHAR}
    </update>
 
</mapper>

3、service層:業(yè)務邏輯層

這層主要實現業(yè)務真正的邏輯

例如:

package com.fq.service;
 
import com.fq.entity.User;
 
import java.sql.SQLException;
/*用戶模塊對應的接口*/
public interface UserService {
    /*檢測用戶名是否存在*/
    boolean checkedUser(String username) throws SQLException;
    /*注冊新用戶*/
    int registerUser(User user) throws SQLException;
    /*激活用戶*/
    int activeUser(String code) throws SQLException;
    /*登錄*/
    User login(String username,String password) throws SQLException;
}

impl

package com.fq.service.impl;
 
import com.fq.dao.UserDao;
import com.fq.dao.impl.UserDaoImpl;
import com.fq.entity.User;
import com.fq.service.UserService;
import com.fq.utils.Constants;
import com.fq.utils.MD5Utils;
 
import java.sql.SQLException;
/*用戶模塊接口實現類*/
public class UserServiceImpl implements UserService {
    @Override
    public boolean checkedUser(String username) throws SQLException {
        UserDao userDao = new UserDaoImpl();
        User user = userDao.selectUserByUname(username);
        if (user != null){
            return true;
        }
 
        return false;
    }
 
    @Override
    public int registerUser(User user) throws SQLException {
        UserDao userDao = new UserDaoImpl();
        int row = userDao.insertUser(user);
        //發(fā)郵件
//        EmailUtils.sendEmail(user);
        return 0;
    }
 
    @Override
    public int activeUser(String code) throws SQLException {
        UserDao userDao = new UserDaoImpl();
        User user = userDao.selectUserByCode(code);
        if (user == null){
            return Constants.ACTIVE_FAIL;//激活失敗
        }
        if (user.getUstatus().equals(Constants.USER_ACTIVE)){
            return Constants.ACTIVE_ALREADY;//判斷是否激活
        }
        int i = userDao.updateStatusByUid(user.getUid());
        if (i>0){
            return Constants.ACTIVE_SUCCESS;
 
        }
        return Constants.ACTIVE_FAIL;
    }
 
    @Override
    public User login(String username, String password) throws SQLException {
        String md5password = MD5Utils.md5(password);
        UserDao userDao = new UserDaoImpl();
        User user = userDao.selectUserByUname(username);
        if (user != null && user.getUpassword().equals(md5password)){
            return user;
        }
 
        return null;
    }
}

4、controller層:控制層

實現請求和相應的控制。

package com.fq.controller;
 
import com.fq.entity.User;
import com.fq.service.UserService;
import com.fq.service.impl.UserServiceImpl;
import com.fq.utils.Base64Utils;
import com.fq.utils.Constants;
import com.fq.utils.MD5Utils;
import com.fq.utils.RandomUtils;
import org.apache.commons.beanutils.BeanUtils;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.SQLException;
import java.util.Map;
 
@WebServlet("/user")
public class UserController extends BaseSevlet {
 
    public String check(HttpServletRequest request,HttpServletResponse response) throws SQLException {
        String username = request.getParameter("username");//獲取參數
        if (username == null){
            return Constants.HAS_USER;//判空,不能注冊
        }
        //判斷用戶名是否存在
        UserService userService = new UserServiceImpl();
        boolean b = userService.checkedUser(username);
        if (b){
            return Constants.HAS_USER;
        }
        return Constants.NOT_HAS_USER;
    }
    public String register(HttpServletRequest request, HttpServletResponse response){
        //1.獲取用戶信息
        Map<String, String[]> parameterMap = request.getParameterMap();
        User user = new User();
        try {
            BeanUtils.populate(user,parameterMap);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
 
        //2.完善用戶信息
        //已經賦值: 用戶名 密碼 郵箱 性別
        //沒有賦值: 激活狀態(tài) 賬號類型 激活碼
        user.setUstatus(Constants.USER_NOT_ACTIVE); //未激活狀態(tài) 0 激活 1
        user.setUrole(Constants.ROLE_CUSTOMER); //普通客戶0  管理員1
        user.setCode(RandomUtils.createActive());
 
        //需要處理的屬性:密碼 md5進行加密處理
        user.setUpassword(MD5Utils.md5(user.getUpassword()));
 
        //3.調用用戶的業(yè)務邏輯進行注冊
        UserService userService = new UserServiceImpl();
        try {
            userService.registerUser(user);
        } catch (SQLException e) {
            e.printStackTrace();
 
            request.setAttribute("registerMsg","注冊失?。?);
 
            return Constants.FORWARD+"/register.jsp";
        }
 
        //4.響應
        return Constants.FORWARD + "/registerSuccess.jsp";
    }
 
    /**
     * 激活方法!
     * @param request
     * @param response
     * @return
     */
    public String active(HttpServletRequest request,HttpServletResponse response) throws SQLException {
        //1.獲取激活碼
        //已經轉成base64
        String c = request.getParameter("c");
        //base64翻轉
        String code = Base64Utils.decode(c);
        //2.調用激活的業(yè)務邏輯
        UserService userService = new UserServiceImpl();
        int i = userService.activeUser(code);
 
        //3.響應(激活失?。╟ode沒有找到) 已經激活 激活成功)
        if (i == Constants.ACTIVE_FAIL){
            request.setAttribute("msg","未激活成功!");
        }else if(i==Constants.ACTIVE_SUCCESS){
            request.setAttribute("msg","激活成功,請登錄!");
        }else{
            request.setAttribute("msg","已經激活");
        }
 
        return Constants.FORWARD+"/message.jsp";
    }
 
    /**
     * 1.前端提交賬號密碼和驗證碼
     * 2.對比驗證碼 成功 ---》 對比賬號密碼
     * 3.對比賬號密碼
     *   失?。?--》 回到登錄頁面 進行提示
     *   成功: --》 未激活  登錄頁面 進行提示
     *         --》 已激活  程序的首頁  將用戶放入session共享域
     */
    public String login(HttpServletRequest request,HttpServletResponse response) throws SQLException {
 
 
        //1.獲取請求參數(用戶名,密碼,驗證碼)
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String code  = request.getParameter("code");//用戶輸入的驗證碼
        String auto = request.getParameter("auto"); //自動登錄標識
 
        //正確的驗證碼
        HttpSession session = request.getSession();
        String codestr = (String) session.getAttribute("code");
 
        //2.判斷驗證碼是否正確
 
        if (code == null || !code.equalsIgnoreCase(codestr)){
            request.setAttribute("msg","驗證碼錯誤");
            return Constants.FORWARD + "/login.jsp";
        }
        //3.調用業(yè)務邏輯判斷賬號密碼
 
        UserService userService = new UserServiceImpl();
        User user = userService.login(username, password);
 
        //4.響應
        //user 等于null證明賬號或者密碼錯誤
        //user 不為null 但是user的狀態(tài)是未激活狀態(tài)
 
        if (user == null) {
            request.setAttribute("msg","賬號或者密碼錯誤");
            return Constants.FORWARD +"/login.jsp";
        }
 
        if (user.getUstatus().equals(Constants.USER_NOT_ACTIVE))
        {
            request.setAttribute("msg","賬號未激活!");
            return Constants.FORWARD +"/login.jsp";
        }
 
        session.setAttribute("loginUser",user);
 
        //autoUser
        //判斷是否勾選自動登錄
        if (auto == null){
            //沒有勾選!
            //將本地瀏覽器的存儲的cookie'清空'
            Cookie cookie = new Cookie(Constants.AUTO_NAME,"");
            cookie.setPath("/");
            cookie.setMaxAge(0);
            response.addCookie(cookie);
        }else{
            //自定登錄數據庫存儲 2周
            String content = username+Constants.FLAG+password;
            content = Base64Utils.encode(content);
            Cookie cookie = new Cookie(Constants.AUTO_NAME,content);
            cookie.setPath("/");
            cookie.setMaxAge(14*24*60*60);
            response.addCookie(cookie);
        }
 
 
        return Constants.REDIRECT + "/index.jsp";
    }
 
    /**
     * 注銷登錄!清空數據!跳轉到登錄頁面
     * @param request
     * @param response
     * @return
     */
    public String logOut(HttpServletRequest request,HttpServletResponse response){
 
        //1.清空session中的用戶數據
        HttpSession session = request.getSession();
        session.removeAttribute("loginUser");
 
        //2.清空和覆蓋cookie存儲的自動登錄信息
 
        Cookie cookie = new Cookie(Constants.AUTO_NAME,"");
        cookie.setPath("/");
        cookie.setMaxAge(0);
        response.addCookie(cookie);
        //3.轉發(fā)到登錄頁面
        request.setAttribute("msg","注銷登錄成功!");
        return  Constants.FORWARD + "/login.jsp";
    }
 
 
}

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java枚舉類接口實例原理解析

    Java枚舉類接口實例原理解析

    這篇文章主要介紹了Java枚舉類接口實例原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • 最長公共子序列問題的深度分析與Java實現方式

    最長公共子序列問題的深度分析與Java實現方式

    本文詳細介紹了最長公共子序列(LCS)問題,包括其概念、暴力解法、動態(tài)規(guī)劃解法,并提供了Java代碼實現,暴力解法雖然簡單,但在大數據處理中效率較低,動態(tài)規(guī)劃解法通過構建DP表,顯著提高了計算效率,適用于大規(guī)模數據處理
    2025-02-02
  • 獲取JsonObject某一未知key的值操作

    獲取JsonObject某一未知key的值操作

    這篇文章主要介紹了獲取JsonObject某一未知key的值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 解讀@RequestBody的正確使用方法

    解讀@RequestBody的正確使用方法

    這篇文章主要介紹了解讀@RequestBody的正確使用方法,具有一定借鑒價值
    2018-01-01
  • Java中MapStruct對象映射的實現

    Java中MapStruct對象映射的實現

    MapStruct是一種Java實體類映射框架,本文就來介紹一下Java中MapStruct對象映射的實現,具有一定的參考價值,感興趣的可以了解一下
    2024-12-12
  • java Spring AOP詳解及簡單實例

    java Spring AOP詳解及簡單實例

    這篇文章主要介紹了java Spring AOP詳解及簡單實例的相關資料,需要的朋友可以參考下
    2017-05-05
  • Java Lambda表達式詳解和實例

    Java Lambda表達式詳解和實例

    這篇文章主要介紹了Java Lambda表達式詳細介紹,從簡單的到復雜的實例講解,需要的朋友可以參考下
    2014-05-05
  • 通過Session案例分析一次性驗證碼登錄

    通過Session案例分析一次性驗證碼登錄

    這篇文章主要介紹了通過Session案例分析一次性驗證碼登錄,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • Java鏈表(Linked List)基本原理與實現方法入門示例

    Java鏈表(Linked List)基本原理與實現方法入門示例

    這篇文章主要介紹了Java鏈表(Linked List)基本原理與實現方法,結合實例形式分析了Java鏈表(Linked List)的功能、原理、實現方法與操作注意事項,需要的朋友可以參考下
    2020-03-03
  • Mybatis動態(tài)元素if的使用方式

    Mybatis動態(tài)元素if的使用方式

    這篇文章主要介紹了Mybatis動態(tài)元素if的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論