运行环境
jdk版本:jdk1.8.0_202
springboot版本:2.2.0
mysql版本:5.6.31
启动MySQL
命令:
service mysql start
- 查看防火墙状态
命令:
firewall-cmd --state - 关闭防火墙
命令:
systemctl stop firewalld.service
springboot整合通用Mapper
1、在pom.xml中添加依赖包
<!--通用Mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
2、创建用户信息实体类(SysUser.java)
package com.jeff.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gitee.sunchenbin.mybatis.actable.annotation.Column;
import com.gitee.sunchenbin.mybatis.actable.annotation.Table;
import com.gitee.sunchenbin.mybatis.actable.constants.MySqlTypeConstant;
import com.jeff.utils.DateUtils;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* @author Jeff
* @description 用户实体类
* @date 2019/10/27
*/
@Data
@Table(name = "sys_user")
@EqualsAndHashCode(callSuper = false)
public class SysUser extends BaseEntity{
@Column(name = "login_name", type = MySqlTypeConstant.VARCHAR, length = 64, isNull = false, isUnique = true)
private String loginName;//登陆名
@Column(name = "password", type = MySqlTypeConstant.VARCHAR, length = 64, isNull = false)
private String password;//密码
@Column(name = "salt", type = MySqlTypeConstant.VARCHAR, length = 64, isNull = false)
private String salt;//盐
@Column(name = "sex", type = MySqlTypeConstant.INT)
private Integer sex;//性别
@Column(name = "status", type = MySqlTypeConstant.INT, isNull = false)
private Integer status;//状态
@Column(name = "name", type = MySqlTypeConstant.VARCHAR, length = 64)
private String name;//真实姓名
@Column(name = "nick_name", type = MySqlTypeConstant.VARCHAR, length = 64)
private String nickName;//昵称
@Column(name = "phone", type = MySqlTypeConstant.VARCHAR, length = 64)
private String phone;//手机号
@Column(name = "email", type = MySqlTypeConstant.VARCHAR, length = 64)
private String email;//邮箱
@JsonFormat(pattern = DateUtils.SHORT_TIME_FORMAT, timezone = "GMT+8")
@Column(name = "birthday", type = MySqlTypeConstant.DATETIME)
private Date birthday;//生日
@Column(name = "headimg_url", type = MySqlTypeConstant.VARCHAR, length = 255)
private String headimgUrl;//用户头像
@Column(name = "role_id", type = MySqlTypeConstant.BIGINT)
private Long roleId;//角色id
}
3、创建用户信息controller类(SysUserController.java)
package com.jeff.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.jeff.entity.SysUser;
import com.jeff.entity.request.PageEntity;
import com.jeff.enums.ResponseCodes;
import com.jeff.service.SysUserService;
import com.jeff.utils.Constant;
import com.jeff.utils.ResultsUtils;
import org.apache.commons.lang3.Validate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author Jeff
* @description 用户管理
* @date 2019/10/28
*/
@RestController
public class SysUserController {
@Autowired
private SysUserService sysUserService;
/**
* @description 获取用户列表(分页)
* @author Jeff
* @date 2019/10/30
* @param page
* @return java.lang.Object
*/
@RequestMapping("getUserList")
public Object getUserList1(PageEntity page) {
PageHelper.startPage(page.getPage(), page.getRows());
List<SysUser> list = sysUserService.getUserList();
PageInfo<SysUser> pageInfo = new PageInfo<>(list);
return ResultsUtils.success(pageInfo.getList(), pageInfo.getTotal());
}
/**
* @description 新增用户
* @author Jeff
* @date 2019/10/30
* @param user
* @return java.lang.Object
*/
@PostMapping("add")
public Object add(SysUser user) {
if (sysUserService.isExist(user)) {
return ResultsUtils.error(ResponseCodes.PARAMTER_ERROR, "登录名重复,请重新输入");
}
sysUserService.save(user);
System.out.println(user);
return ResultsUtils.success();
}
/**
* @description 修改用户
* @author Jeff
* @date 2019/10/30
* @param user
* @return java.lang.Object
*/
@PostMapping("update")
public Object update(SysUser user) {
Validate.notNull(user.getId(), Constant.CHECK_MESSAGE, "用户id");
if (sysUserService.isExist(user)) {
return ResultsUtils.error(ResponseCodes.PARAMTER_ERROR, "登录名重复,请重新输入");
}
SysUser u=sysUserService.getUserById(user.getId());
user.setCreateTime(u.getCreateTime());
user.setCreateName(u.getCreateName());
sysUserService.save(user);
return ResultsUtils.success();
}
/**
* @description 删除用户
* @author Jeff
* @date 2019/10/30
* @param id
* @return java.lang.Object
*/
@RequestMapping("delete")
public Object delete(Long id) {
Validate.notNull(id, Constant.CHECK_MESSAGE, "用户id");
sysUserService.delete(id);
return ResultsUtils.success();
}
/**
* @description 查看用户
* @author Jeff
* @date 2019/10/30
* @param id
* @return java.lang.Object
*/
@RequestMapping("getUser")
public Object getUser(Long id) {
Validate.notNull(id, Constant.CHECK_MESSAGE, "用户id");
return ResultsUtils.success(sysUserService.getUserById(id));
}
}
4、创建用户信息service类(SysUserService.java)
package com.jeff.service;
import com.jeff.entity.SysUser;
import com.jeff.mapper.SysUserMapper;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import javax.annotation.Resource;
import java.util.List;
/**
* @author Jeff
* @description 用户管理
* @date 2019/10/28
*/
@Service
public class SysUserService {
@Resource
private SysUserMapper sysUserMapper;
/**
* @description 获取用户列表(分页)
* @author Jeff
* @date 2019/10/30
* @return java.util.List<com.jeff.entity.SysUser>
*/
public List<SysUser> getUserList() {
return sysUserMapper.selectAll();
}
/**
* @description 登录名是否已存在
* @author Jeff
* @date 2019/10/30
* @param user
* @return boolean
*/
public boolean isExist(SysUser user) {
Example example = new Example(SysUser.class);
example.createCriteria().andEqualTo("loginName", user.getLoginName());
if (user.getId() != null) {
example.and().andNotEqualTo("id", user.getId());
}
return sysUserMapper.selectOneByExample(example) != null;
}
/**
* @description 保存或更新,根据id是否为null进行逻辑判断更新还是插入
* @author Jeff
* @date 2019/10/30
* @param user
* @return void
*/
public void save(SysUser user) {
sysUserMapper.save(user);
}
/**
* @description 按主键id删除数据
* @author Jeff
* @date 2019/10/30
* @param id
* @return void
*/
public void delete(Long id) {
sysUserMapper.deleteByPrimaryKey(id);
}
/**
* @description 查看用户
* @author Jeff
* @date 2019/10/30
* @param id
* @return com.jeff.entity.SysUser
*/
public SysUser getUserById(Long id) {
return sysUserMapper.selectByPrimaryKey(id);
}
}
5、创建BaseMapper接口(BaseMapper.java)
package com.jeff.base;
import com.jeff.entity.BaseEntity;
import com.jeff.utils.PersistUtils;
import tk.mybatis.mapper.common.Mapper;
/**
* @author Jeff
* @description BaseMapper
* @date 2019/10/30
*/
public interface BaseMapper<T extends BaseEntity> extends Mapper<T> {
/**
* @description 保存或更新,根据id是否为null进行逻辑判断更新还是插入
* @author Jeff
* @date 2019/10/30
* @param t
* @return boolean
*/
default boolean save(T t) {
return PersistUtils.save(this, t);
}
}
注:Base接口不能放在mapper包下,不要被Mapper组件扫描配置给扫描到
6、创建用户信息mapper接口(SysUserMapper.java)
package com.jeff.mapper;
import com.jeff.base.BaseMapper;
import com.jeff.entity.SysUser;
/**
* @author Jeff
* @description 用户管理
* @date 2019/10/28
*/
public interface SysUserMapper extends BaseMapper<SysUser> {
}
7、创建全局配置文件(application.properties)
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.1.106:3306/jeff?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
# MySql自动建表
#create,系统启动后,会将所有表删除,然后根据路径包中的实体类进行重新建表(会破坏原有数据)
#none,不做任何处理
#update,系统启动是会自动判断哪些表需要新建,哪些字段需要修改(不会破坏原有数据)
mybatis.table.auto=update
#建表的对象包路径
mybatis.model.pack=com.jeff.entity
mybatis.database.type=mysql
8、修改springboot启动类中 @MapperScan 注解的包路径为 import tk.mybatis.spring.annotation.MapperScan;
package com.jeff;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@MapperScan(basePackages = { "com.jeff.mapper" })
public class JfSpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(JfSpringbootApplication.class, args);
}
}