Appearance
如何进行 CURD 操作
下面介绍在xbase里面如何完成CURD操作
CURD操作步骤
api层创建Controller,在Controller里面创建自己的接口
javapackage 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); } }
service层创建service,在service里面创建接口并实现相关的业务,并调用数据层接口操作数据
javapackage 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; } }
db层创建Mapper,在Mapper里面创建接口,如果是自定义操作还需要在Mapper的xml里面配置相关的sql
javapackage 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
代码生成器生成的代码都是针对的单表操作
自定义操作
例如我们需要根据用户名查询用户信息,可以使用下面的方式:
- 使用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;
}
- 使用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;
}
- 在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相关操作学习文档可以来这