springboot+mybatis+security(三)代码结构优化调整

继前一篇讲到spirngboot+mybatis+security整合从数据库获取用户登录账号密码之后,我们这里将代码结构调整下,总体流程没有什么变化,主要在查询数据库的基本结构修改了下,方便后续工作。
先大概讲下总体修改内容。
1.修改数据库字段ID为varchar类型
2.新建一个BaseEntity,设置设置ID字段
3.新建BaseParam抽象类作为查询类公共抽象类型
4.新建BaseMapper接口
5.新建IBaseService接口
6.新建UUIDGenerator工具类
7.新建BaseService抽象类
8.修改其他entity对象,去掉ID字段,改为继承自BaseEntity类,并使用BaseEntity的ID
9.修改SysUserMapper.xml文件

修改后的目录结构总览:
在这里插入图片描述

1.修改数据库ID

将上篇中的数据库表的ID全部修改为varchar类型,前面的全部设置的是int类型。这个地方有点疏忽。如图:
在这里插入图片描述

2.创建BaseEntity.java

BaseEntity.java

import java.io.Serializable;

public abstract class BaseEntity implements Serializable{
	
	private static final long serialVersionUID = 1L;
	
	protected String id;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

}
3.新建BaseParam.java
import java.io.Serializable;

public abstract class BaseParam<E> implements Serializable{

	private static final long serialVersionUID = 1L;

	protected String id;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}
	
	
}
4.新建BaseMapper.java

import java.util.List;

public interface BaseMapper<E, P extends BaseParam> {

List<E> query(P param);

void insert(E entity);

void update(E entity);

void delete(String id);

}

5.新建IBaseService.java
import java.util.List;

public interface IBaseService<E extends BaseEntity, P extends BaseParam<E>> {

	List<E> find(P param);
	
	List<E> findAll();
	
	E findFirst(P param);
	
	E get(String id);
	
	E save(E entity);
	
	void delete(String id);
}
6.新建UUIDGenerator.java

这是一个自动生成32不重复ID的工具类,工具类都放到utils包下面。

import java.util.UUID;

public class UUIDGenerator {

	/**
	 * 生成32位随机UUID,不带横杠
	 */
	public static String gen() {
		String uuid = UUID.randomUUID().toString();
		return uuid.substring(0, 8) + uuid.substring(9, 13) + uuid.substring(14, 18) 
		+ uuid.substring(19, 23) + uuid.substring(24);
	}
}
7.新建BaseService.java
import java.lang.reflect.ParameterizedType;
import java.util.List;

import com.alibaba.druid.util.StringUtils;

import cn.zoulang.frame.common.utils.UUIDGenerator;

public abstract class BaseService<E extends BaseEntity, P extends BaseParam<E>
		,M extends BaseMapper<E, P>> implements IBaseService<E, P> {
	
	@SuppressWarnings("unchecked")
    private Class<P> paramClass = (Class<P>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1];
	
	protected abstract M getMapper();
	
	/**
	 * 根据param查询符合条件的entity
	 */
	public List<E> find(P param) {
		return getMapper().query(param);
	}
	
	/**
	 * 查询所有entity
	 */
	public List<E> findAll() {
		return find(null);
	}
	
	/**
	 * 根据param获取第一个查询到的entity
	 */
	public E findFirst(P param) {
		List<E> list = find(param);
		return list.isEmpty() ? null : list.get(0);
	}
	
	/**
	 * 根据ID获取entity
	 */
	public E get(String id) {
		if(StringUtils.isEmpty(id)){
			return null;
		}
		try {
			P param = paramClass.newInstance();
			param.setId(id);
			return findFirst(param);
		} catch (IllegalAccessException | InstantiationException e) {
			throw new RuntimeException(e);
		}
	}
	
	/**
	 * 保存/更新
	 */
	public E save(E entity) {
		if(isNew(entity)) {
			entity.setId(UUIDGenerator.gen());
			getMapper().insert(entity);
		} else {
			getMapper().update(entity);
		}
		return entity;
	}
	
	/**
	 * 删除
	 */
	public void delete(String id) {
		getMapper().delete(id);
	}
	
	/**
     * 是否是新项(ID 为空). 需要在 BaseService::save 之前判断.
     */
    protected boolean isNew(E entity) {
        return StringUtils.isEmpty(entity.getId());
    }
}
8.修改其他entity对象

其实就是去掉了ID字段,并继承了BaseEntity.java
修改SysUser.java.
说明“7.修改其他entity对象均在service包里面”

import java.util.List;

import cn.zoulang.frame.common.crud.BaseEntity;

public class SysUser extends BaseEntity{

	private static final long serialVersionUID = 1L;
	
	private String username;
	private String password;
	
	private List<SysRole> roles;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public List<SysRole> getRoles() {
		return roles;
	}

	public void setRoles(List<SysRole> roles) {
		this.roles = roles;
	}
}

修改SysRole.java

import cn.zoulang.frame.common.crud.BaseEntity;

public class SysRole extends BaseEntity{

	private static final long serialVersionUID = 1L;
	
	private String name;	// 角色名称
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

修改SysPermissiong.java

import cn.zoulang.frame.common.crud.BaseEntity;

public class SysPermission extends BaseEntity{

	private static final long serialVersionUID = 1L;
	
	private String name;			// 权限名称
	private String description;		// 权限描述
	private String url;				// 授权连接
	private Integer pid;			// 父节点ID
	private String method;			// 请求方式

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public Integer getPid() {
		return pid;
	}
	public void setPid(Integer pid) {
		this.pid = pid;
	}
	public String getMethod() {
		return method;
	}
	public void setMethod(String method) {
		this.method = method;
	}
}

新建SysUserParam.java

import cn.zoulang.frame.common.crud.BaseParam;

public class SysUserParam extends BaseParam<SysUser>{

	private static final long serialVersionUID = 1L;
	
	private String userName;

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}
}

新建ISysUserService.java接口

import java.util.List;

import cn.zoulang.frame.common.crud.IBaseService;
import cn.zoulang.frame.modules.sys.model.SysUser;
import cn.zoulang.frame.modules.sys.model.SysUserParam;

public interface ISysUserService extends IBaseService<SysUser, SysUserParam> {

	/**
	 * 按用户名查询用户
	 */
	default SysUser findUserByName(String userName) {
		SysUserParam param = new SysUserParam();
		param.setUserName(userName);
		return findFirst(param);
	}
	
	/**
	 * 查询所有用户
	 */
	default List<SysUser> findAll() {
		return find(null);
	}
	
}

修改SysUserService.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.zoulang.frame.common.crud.BaseService;
import cn.zoulang.frame.modules.sys.mapper.SysUserMapper;
import cn.zoulang.frame.modules.sys.model.SysUser;
import cn.zoulang.frame.modules.sys.model.SysUserParam;

@Service
public class SysUserService extends BaseService<SysUser, SysUserParam, SysUserMapper>
		implements ISysUserService{

	@Autowired
	SysUserMapper sysUserMapper;
	
	@Override
	protected SysUserMapper getMapper() {
		return sysUserMapper;
	}


}

修改SysUserMapper.java

import org.apache.ibatis.annotations.Mapper;

import cn.zoulang.frame.common.crud.BaseMapper;
import cn.zoulang.frame.modules.sys.model.SysUser;
import cn.zoulang.frame.modules.sys.model.SysUserParam;

@Mapper
public interface SysUserMapper extends BaseMapper<SysUser, SysUserParam>{

}

9.修改SysUserMapper.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="cn.zoulang.frame.modules.sys.mapper.SysUserMapper">

	<resultMap id="SysUser" type="cn.zoulang.frame.modules.sys.model.SysUser">
        <result column="ID" property="id"/>
        <result column="USERNAME" property="username"/>
        <result column="PASSWORD" property="password"/>
    </resultMap>

    <select id="findAll" resultMap="SysUser">
    	SELECT 
    		id,
        	userName,
        	password 
        FROM 
        	sys_user
    </select>
    
    <select id="query" resultMap="SysUser">
    	SELECT 
    		id,
        	userName,
        	password  
        FROM 
        	sys_user
        WHERE 1 = 1
        <if test="id != null and id != ''">
        	AND ID = #{id}
        </if>
        <if test="userName != null and userName != ''">
        	AND USERNAME = #{userName}
        </if>
    </select>
    
    <insert id="insert">
    	INSERT INTO SYS_USER (ID,
    						  USERNAME,
    						  PASSWORD)
    	VALUES (#{id},
    			LOWER(#{userName}),
    			#{password})
    </insert>
    
    <update id="update">
    	UPDATE SYS_USER
        SET
        	<if test="password != null and password != ''">
        		PASSWORD = #{password},
        	</if>
        	USERNAME = LOWER(#{userName})
        	WHERE ID = #{id}
    </update>
    
    <delete id="delete">
    	DELETE FROM SYS_USER
        WHERE ID = #{id}
    </delete>
    
</mapper>     
        
 

测试:
重启项目,输入网址http://localhost:8899/user/query进行测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值