Skip to content

如何进行 CURD 操作

下面介绍在xbase里面如何完成CURD操作

CURD操作步骤

  1. api层创建Controller,在Controller里面创建自己的接口

    java
    package cn.xplaza.portal.api.my;
    
    import org.springframework.web.bind.annotation.CrossOrigin;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.xingkong1983.star.biz.BizTool;
    import com.xingkong1983.star.biz.vo.BizResponseVo;
    
    import cn.xplaza.common.tool.MyTool;
    import cn.xplaza.service.db.user.service.UserService;
    import cn.xplaza.service.db.user.vo.UserVo;
    import lombok.RequiredArgsConstructor;
    import lombok.extern.slf4j.Slf4j;
    
    /**
     * 我的接口
     */
    @RestController
    @CrossOrigin
    @RequiredArgsConstructor
    @Slf4j
    @RequestMapping("/my")
    public class MyApi {
    
    	private final UserService userService;
    
    	/**
    	 * 查看我基本信息
    	 * @return
    	 */
    	@RequestMapping(value = "/viewInfo")
    	public BizResponseVo<UserVo> viewInfo() {
    		Long uid = MyTool.getMyUid();
    		BizTool.ASSERT_NOLOGIN.notNull(uid, "用户尚未登录");
    		UserVo vo = userService.viewInfo(uid);
    		return BizTool.OK.success("查看用户基本信息成功", vo);
    	}
    }
    package cn.xplaza.portal.api.my;
    
    import org.springframework.web.bind.annotation.CrossOrigin;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.xingkong1983.star.biz.BizTool;
    import com.xingkong1983.star.biz.vo.BizResponseVo;
    
    import cn.xplaza.common.tool.MyTool;
    import cn.xplaza.service.db.user.service.UserService;
    import cn.xplaza.service.db.user.vo.UserVo;
    import lombok.RequiredArgsConstructor;
    import lombok.extern.slf4j.Slf4j;
    
    /**
     * 我的接口
     */
    @RestController
    @CrossOrigin
    @RequiredArgsConstructor
    @Slf4j
    @RequestMapping("/my")
    public class MyApi {
    
    	private final UserService userService;
    
    	/**
    	 * 查看我基本信息
    	 * @return
    	 */
    	@RequestMapping(value = "/viewInfo")
    	public BizResponseVo<UserVo> viewInfo() {
    		Long uid = MyTool.getMyUid();
    		BizTool.ASSERT_NOLOGIN.notNull(uid, "用户尚未登录");
    		UserVo vo = userService.viewInfo(uid);
    		return BizTool.OK.success("查看用户基本信息成功", vo);
    	}
    }
  2. service层创建service,在service里面创建接口并实现相关的业务,并调用数据层接口操作数据

    java
    package cn.xplaza.service.db.user.service;
    
    import org.springframework.stereotype.Service;
    
    import com.xingkong1983.star.biz.BizTool;
    
    import cn.xplaza.common.framework.service.impl.BaseServiceImpl;
    import cn.xplaza.service.db.user.mapper.UserMapper;
    import cn.xplaza.service.db.user.mo.UserMo;
    import cn.xplaza.service.db.user.vo.UserVo;
    import lombok.RequiredArgsConstructor;
    import lombok.extern.slf4j.Slf4j;
    
    @Slf4j
    @Service
    @RequiredArgsConstructor
    public class UserService extends BaseServiceImpl<UserMapper, UserMo> {
    
    	private final UserMapper userMapper;
    
    	/**
    	 * 查看用户基本信息
    	 *
    	 * @return
    	 */
    	public UserVo viewInfo(Long uid) {
    		UserVo userVo = userMapper.selectInfoById(uid);
    		BizTool.ASSERT_FORM.notNull(userVo, "该用户[" + uid + "]不存在");
    		return userVo;
    	}
    }
    package cn.xplaza.service.db.user.service;
    
    import org.springframework.stereotype.Service;
    
    import com.xingkong1983.star.biz.BizTool;
    
    import cn.xplaza.common.framework.service.impl.BaseServiceImpl;
    import cn.xplaza.service.db.user.mapper.UserMapper;
    import cn.xplaza.service.db.user.mo.UserMo;
    import cn.xplaza.service.db.user.vo.UserVo;
    import lombok.RequiredArgsConstructor;
    import lombok.extern.slf4j.Slf4j;
    
    @Slf4j
    @Service
    @RequiredArgsConstructor
    public class UserService extends BaseServiceImpl<UserMapper, UserMo> {
    
    	private final UserMapper userMapper;
    
    	/**
    	 * 查看用户基本信息
    	 *
    	 * @return
    	 */
    	public UserVo viewInfo(Long uid) {
    		UserVo userVo = userMapper.selectInfoById(uid);
    		BizTool.ASSERT_FORM.notNull(userVo, "该用户[" + uid + "]不存在");
    		return userVo;
    	}
    }
  3. db层创建Mapper,在Mapper里面创建接口,如果是自定义操作还需要在Mapper的xml里面配置相关的sql

    java
    package cn.xplaza.service.db.user.mapper;
    
    import org.springframework.stereotype.Repository;
    
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    
    import cn.xplaza.service.db.user.mo.UserMo;
    import cn.xplaza.service.db.user.vo.UserVo;
    
    /**
     * @desc 用户DAO类
     */
    @Repository
    public interface UserMapper extends BaseMapper<UserMo> {
    
        UserVo selectInfoById(Long uid);
    
    }
    package cn.xplaza.service.db.user.mapper;
    
    import org.springframework.stereotype.Repository;
    
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    
    import cn.xplaza.service.db.user.mo.UserMo;
    import cn.xplaza.service.db.user.vo.UserVo;
    
    /**
     * @desc 用户DAO类
     */
    @Repository
    public interface UserMapper extends BaseMapper<UserMo> {
    
        UserVo selectInfoById(Long uid);
    
    }
    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.xplaza.service.db.user.mapper.UserMapper">
        <sql id="Base_Column_List">
            uid, user_name, nick_name, real_name, user_name as space_name, mobile, email, password, avatar, sex, status, id_code, id_img_a, id_img_b, id_auth_status, bank_name, bank_code, source, province, ip, city, profile, photo, address, creator_id, create_time, update_time, last_login_time, theme, avatar_update_time, school, major, education, political_status, work_unit, duty, website
        </sql>
    
    
        <select id="selectInfoById" resultType="cn.xplaza.service.db.user.vo.UserVo">
            select <include refid="Base_Column_List" /> from `user` where uid = #{uid}
        </select>
    </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="cn.xplaza.service.db.user.mapper.UserMapper">
        <sql id="Base_Column_List">
            uid, user_name, nick_name, real_name, user_name as space_name, mobile, email, password, avatar, sex, status, id_code, id_img_a, id_img_b, id_auth_status, bank_name, bank_code, source, province, ip, city, profile, photo, address, creator_id, create_time, update_time, last_login_time, theme, avatar_update_time, school, major, education, political_status, work_unit, duty, website
        </sql>
    
    
        <select id="selectInfoById" resultType="cn.xplaza.service.db.user.vo.UserVo">
            select <include refid="Base_Column_List" /> from `user` where uid = #{uid}
        </select>
    </mapper>

在对单表进行代码生成时,form、mo、vo也同时生成了,如果有自定义操作也需要在对应的package里面创建

单表CURD操作

创建数据库表

使用 Navicate 或其他工具连接数据库,建立表。

例如角色表

sql
CREATE TABLE `role` (
  `role_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `org_id` bigint(20) DEFAULT NULL COMMENT '公司编号',
  `role` varchar(255) DEFAULT NULL COMMENT '角色编码',
  `name` varchar(255) DEFAULT NULL COMMENT '角色名称',
  `remark` varchar(512) DEFAULT NULL COMMENT '备注',
  `sys_type` tinyint(3) DEFAULT 0 COMMENT '系统类型',
  `creator_id` bigint(20) DEFAULT NULL COMMENT '创建人编号',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`role_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='角色表';
CREATE TABLE `role` (
  `role_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `org_id` bigint(20) DEFAULT NULL COMMENT '公司编号',
  `role` varchar(255) DEFAULT NULL COMMENT '角色编码',
  `name` varchar(255) DEFAULT NULL COMMENT '角色名称',
  `remark` varchar(512) DEFAULT NULL COMMENT '备注',
  `sys_type` tinyint(3) DEFAULT 0 COMMENT '系统类型',
  `creator_id` bigint(20) DEFAULT NULL COMMENT '创建人编号',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`role_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='角色表';

使用代码生成器(xbase-code)生成api与service层及db层

具体操作请参考代码生成器(xbase-code)的使用章节

代码生成器生成了api,form,mapper接口,mo,vo,service

代码生成器生成的代码都是针对的单表操作

自定义操作

例如我们需要根据用户名查询用户信息,可以使用下面的方式:

  1. 使用LambdaQueryWrapper的方式(推荐)
java
public UserMo getUserMoByUserName(final String username) {
	LambdaQueryWrapper<UserMo> queryWrapper = new LambdaQueryWrapper<UserMo>();
	queryWrapper.eq(UserMo::getUserName, username).or().eq(UserMo::getMobile, username).or().eq(UserMo::getEmail, username);
	UserMo userMo = userMapper.selectOne(queryWrapper);
	return userMo;
}
public UserMo getUserMoByUserName(final String username) {
	LambdaQueryWrapper<UserMo> queryWrapper = new LambdaQueryWrapper<UserMo>();
	queryWrapper.eq(UserMo::getUserName, username).or().eq(UserMo::getMobile, username).or().eq(UserMo::getEmail, username);
	UserMo userMo = userMapper.selectOne(queryWrapper);
	return userMo;
}
  1. 使用QueryWrapper的方式
java
public UserMo getUserMoByUserName(final String username) {
	QueryWrapper<UserMo> queryWrapper = new QueryWrapper<UserMo>();
	queryWrapper.eq("user_name", username).or().eq("mobile", username).or().eq("email", username);
	UserMo userMo = userMapper.selectOne(queryWrapper);
	return userMo;
}
public UserMo getUserMoByUserName(final String username) {
	QueryWrapper<UserMo> queryWrapper = new QueryWrapper<UserMo>();
	queryWrapper.eq("user_name", username).or().eq("mobile", username).or().eq("email", username);
	UserMo userMo = userMapper.selectOne(queryWrapper);
	return userMo;
}
  1. 在UserMapper里面自定义的方式

首页在UserMapper.java里面定义一个接口

java
package cn.xplaza.service.db.user.mapper;

import org.springframework.stereotype.Repository;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import cn.xplaza.service.db.user.mo.UserMo;

/**
 * @desc 用户DAO类
 */
@Repository
public interface UserMapper extends BaseMapper<UserMo> {

	UserMo selectByUserName(String userName);

}
package cn.xplaza.service.db.user.mapper;

import org.springframework.stereotype.Repository;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import cn.xplaza.service.db.user.mo.UserMo;

/**
 * @desc 用户DAO类
 */
@Repository
public interface UserMapper extends BaseMapper<UserMo> {

	UserMo selectByUserName(String userName);

}

然后在UserMapper.xml里面定义查询语句

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.xplaza.service.db.user.mapper.UserMapper">
    <sql id="Base_Column_List">
        uid, user_name, nick_name, real_name, user_name as space_name, mobile, email, password, avatar, sex, status, id_code, id_img_a, id_img_b, id_auth_status, bank_name, bank_code, source, province, ip, city, profile, photo, address, creator_id, create_time, update_time, last_login_time, theme, avatar_update_time, school, major, education, political_status, work_unit, duty, website
    </sql>
    <select id="selectByUserName" resultType="cn.xplaza.service.db.user.mo.UserMo">
        SELECT <include refid="Base_Column_List" />
        FROM user WHERE (mobile = #{userName} or email = #{userName} or user_name = #{userName} ) and status = 0  limit 1
    </select>
</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="cn.xplaza.service.db.user.mapper.UserMapper">
    <sql id="Base_Column_List">
        uid, user_name, nick_name, real_name, user_name as space_name, mobile, email, password, avatar, sex, status, id_code, id_img_a, id_img_b, id_auth_status, bank_name, bank_code, source, province, ip, city, profile, photo, address, creator_id, create_time, update_time, last_login_time, theme, avatar_update_time, school, major, education, political_status, work_unit, duty, website
    </sql>
    <select id="selectByUserName" resultType="cn.xplaza.service.db.user.mo.UserMo">
        SELECT <include refid="Base_Column_List" />
        FROM user WHERE (mobile = #{userName} or email = #{userName} or user_name = #{userName} ) and status = 0  limit 1
    </select>
</mapper>

最后在service里面调用UserMapper里面定义的查询接口

java
public UserMo getUserMoByUserName(final String username) {
	UserMo userMo = userMapper.selectByUserName(username);
	return userMo;
}
public UserMo getUserMoByUserName(final String username) {
	UserMo userMo = userMapper.selectByUserName(username);
	return userMo;
}

mybatispuls官方网站 mybatisplus相关操作学习文档可以来这