数据库持久化操作----插入数据库数据及密码加密

dao层和service层

dao层:dao层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表、某个实体的增删改查
DAO接口
为每个DAO声明接口的好处在于:
可以在尚未实现具体DAO的时候编写上层代码,如Service里对DAO的调用
可以为DAO进行多实现,例如有JDBCDAO实现,MyBatisDAO实现,而不需要更改上层代码,只需要简单的在Spring的IoC配置里修改一下注入的DAO实现
service层:service层叫服务层,被称为服务,肯定是相比之下比较高层次的一层结构,相当于将几种操作封装起来
Service接口
可以在尚未实现具体Service情况下编写上层改代码,如Controller对Service的调用
Spring无论是AOP还是事务管理的实现都是基于动态代理的,而动态代理的实现依赖于接口,所以必须有接口的定义才能使用这些功能
可以对Service进行多实现

第一步:

先使用workbench创建数据库

在这里插入图片描述

第二步:

从底层出发把DAO实现功能
package cn.edu.mju.project2.dao;

import cn.edu.mju.project2.entity.Band;
import cn.edu.mju.project2.entity.User;
import cn.edu.mju.project2.utils.Pager;

import java.util.List;

public interface IUserDao{
    public User findByLoginName(String loginName);
    public boolean insert(User user);
    public boolean update(User user);
    public boolean delete(Integer id);
    public User findByid(Integer id);
    public List<User> find(User user);
    public Pager paginate(int page, int pagesize, Band band);
}
package cn.edu.mju.project2.dao.impl;
import cn.edu.mju.project2.dao.IUserDao;
import cn.edu.mju.project2.entity.Band;
import cn.edu.mju.project2.entity.User;
import cn.edu.mju.project2.utils.Pager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;


public class UserDao implements IUserDao {
    @Override
    public User findByLoginName(String loginName) {
        User user = null;
        try {
            Connection conn = MySqlDbUtil.getConnect();
            String sql = "SELECT * FROM user WHERE login_name=?";
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, loginName);
            ResultSet rs = pstmt.executeQuery();
            if (rs.next()) {
                user = new User(rs.getInt("id"), rs.getString("login_name"),
                        rs.getString("login_pwd"), rs.getByte("gender"),
                        rs.getString("phone"), rs.getString("salt"), rs.getByte("status"));
            }
            rs.close();
            pstmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return user;
    }

    @Override
    public boolean insert(User user) {
        boolean result = false;
        try {
            Connection conn = MySqlDbUtil.getConnect();
            String sql = "INSERT INTO user(login_name,login_pwd,salt,gender,phone,status) " +
                    "VALUES(?,?,?,?,?,?)";
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, user.getLoginName());
            pstmt.setString(2, user.getLoginPwd());
            pstmt.setString(3, user.getSalt());
            pstmt.setByte(4, user.getGander());
            pstmt.setString(5, user.getPhone());
            pstmt.setByte(6, user.getStatus());

            int i = pstmt.executeUpdate();
            if (i > 0) {
                return true;
            }
            pstmt.close();
            conn.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    @Override
    public boolean update(User user) {
        return false;
    }

    @Override
    public boolean delete(Integer id) {
        return false;
    }

    @Override
    public User findByid(Integer id) {
        return null;
    }

    @Override
    public List<User> find(User user) {
        return null;
    }

    @Override
    public Pager paginate(int page, int pagesize, Band band) {
        return null;
    }
}

第二步:

在service层实现功能
package cn.edu.mju.project2.service;

import cn.edu.mju.project2.entity.User;

public interface IUserService {
    public User login(String loginName, String loginPwd);
    public boolean save(User user);
    public boolean delete(Integer id);
}

package cn.edu.mju.project2.service.impl;

import cn.edu.mju.project2.dao.IUserDao;
import cn.edu.mju.project2.dao.impl.UserDao;
import cn.edu.mju.project2.entity.User;
import cn.edu.mju.project2.service.IUserService;
import cn.edu.mju.project2.utils.EncrypUtil;
import cn.edu.mju.project2.utils.StrUtil;


public class UserService implements IUserService {
    IUserDao dao = new UserDao();
    @Override
    public User login(String loginName, String loginPwd) {
        User user = dao.findByLoginName(loginName);
        if(user != null) {
            String source = loginPwd + user.getSalt();
            String encryStr = EncrypUtil.md5(source);
            if(encryStr.equals(user.getLoginPwd())){
                user.setLoginPwd(null);
                user.setSalt(null);
                return user;
            }
        }
        return null;
    }

    @Override
    public boolean save(User user) {
        if(user == null){
            return false;
        }
        user.setSalt(StrUtil.randString(32));
        user.setLoginPwd(EncrypUtil.md5(user.getLoginPwd() + user.getSalt()));
        if(user.getId() == null) {
            return dao.insert(user);
        }else{
            return dao.update(user);
        }
    }

    @Override
    public boolean delete(Integer id) {
        return false;
    }


}

第三步:

用户密码加密
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;


public class EncrypUtil {
    public static String md5(String source){
        String ret = null;
        if(source != null && !"".equals(source)) {
            try {
                byte[] secretBytes = MessageDigest.getInstance("md5").digest(source.getBytes());
                String md5Val = new BigInteger(1,secretBytes).toString(16);
                for(int i = 0; i<32 - md5Val.length(); i++){
                    md5Val = "0" + md5Val;
                }
                ret = md5Val;
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        }

        return ret;
    }
}

第四步:

测试,查看是否成功插入数据
package service;
import cn.edu.mju.project2.entity.User;
import cn.edu.mju.project2.service.IUserService;
import cn.edu.mju.project2.service.impl.UserService;
import org.junit.Test;

public class TestUserService {

    @Test
    public void test(){
        IUserService service=new UserService();
        User user=new User();
        user.setLoginName("admin");
        user.setLoginPwd("1234");
        user.setGander((byte)1);
        user.setPhone("138000000");
//        user.setLoginName("loginName");
        user.setStatus((byte)9);
        System.out.println(service.save(user));

    }
}
测试成功

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值