使用Mybatis-flex注解和xml方式举行mysql添加,查询,分页 ...

打印 上一主题 下一主题

主题 895|帖子 895|积分 2685


  使用Mybatis-flex注解和xml方式举行mysql添加,查询,分页



  • 一、注解开发(博主推荐)
首先我必须声明,注解开发跟xml开发的区别,在实际开发中,可以根据项目标需求和特点来选择使用 XML 映射文件还是注解。对于简朴的 CRUD 操作,使用注解可以镌汰文件数量,使代码更加简洁;而对于复杂的查询逻辑和映射关系,则建议使用 XML 映射文件以包管代码的可读性和可维护性。
对于新手我更为推荐注解开发,由于只要你有的sql语句会写那就都不是题目。
首先我们还是必须要有两个包

entity跟mapper包,entity用来其实就是been包,也叫po包看个人喜好,mapper包是不能更改的,用来存放映射文件。


  • 1.创建数据库
首先必须要有数据库,以下是我已经建好的数据库
  1. /*
  2.  Navicat Premium Data Transfer
  3.  Source Server         : localhost_3306
  4.  Source Server Type    : MySQL
  5.  Source Server Version : 50732
  6.  Source Host           : localhost:3306
  7.  Source Schema         : test
  8.  Target Server Type    : MySQL
  9.  Target Server Version : 50732
  10.  File Encoding         : 65001
  11.  Date: 27/09/2024 16:33:23
  12. */
  13. SET NAMES utf8mb4;
  14. SET FOREIGN_KEY_CHECKS = 0;
  15. -- ----------------------------
  16. -- Table structure for user
  17. -- ----------------------------
  18. DROP TABLE IF EXISTS `user`;
  19. CREATE TABLE `user`  (
  20.   `id` int(11) NOT NULL AUTO_INCREMENT,
  21.   `user_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  22.   `number` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  23.   `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  24.   PRIMARY KEY (`id`) USING BTREE
  25. ) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
  26. -- ----------------------------
  27. -- Records of user
  28. -- ----------------------------
  29. INSERT INTO `user` VALUES (1, '你', '123123', '');
  30. INSERT INTO `user` VALUES (2, '是', '321321', '');
  31. INSERT INTO `user` VALUES (3, '哈', '112211', '');
  32. INSERT INTO `user` VALUES (4, '测试', '123', '111');
  33. INSERT INTO `user` VALUES (5, '1', 'aaa', 'bbb');
  34. INSERT INTO `user` VALUES (6, 'demo', '123', '123');
  35. INSERT INTO `user` VALUES (7, 'admin', '110', 'admin');
  36. SET FOREIGN_KEY_CHECKS = 1;
复制代码



  • 2.查抄yml设置文件mysql连接池信息对与否
必须先查抄你的yml文件设置对不对



  • 3.创建实体类和实体类的映射文件
创建实体类

然后创建相干的类,比方我写的是用户,我就在entity包里创建用户类

代码:
  1. package com.waisang.mybatisflex.entity;
  2. import com.mybatisflex.annotation.Id;
  3. import com.mybatisflex.annotation.KeyType;
  4. import com.mybatisflex.annotation.Table;
  5. import lombok.Data;
  6. //提供get,set,tostring方法
  7. @Data
  8. //应与数据库的表名一致
  9. @Table("user")
  10. public class User {
  11. //主键类型=主键类型.自增
  12.     @Id(keyType = KeyType.Auto)
  13.     private int id;
  14.     private String user_name;
  15.     private  String password;
  16.     private String number;
  17. }
复制代码
数据库里有多少字段就要声明多少变量
⚠️⚠️⚠️⚠️创建实体类内里的字段得跟数据库表内里字段的名字一样!
创建相干的映射文件

在mapper文件下创建,注意,你的实体类叫什么你的映射文件就得以实体文件

代码:
  1. package com.waisang.mybatisflex.mapper;
  2. import com.mybatisflex.core.BaseMapper;
  3. import com.waisang.mybatisflex.entity.User;
  4. import org.apache.ibatis.annotations.Insert;
  5. import org.apache.ibatis.annotations.Param;
  6. import org.apache.ibatis.annotations.Select;
  7. import java.util.List;
  8. public interface UserMapper extends BaseMapper<User> {
  9. //    注解开发
  10.     @Select("select * from user where id = #{id}")
  11.     User selectById(@Param("id") int id);
  12. //    注解开发
  13.     @Insert("insert into user values (null,#{user_name},#{number},#{password})")
  14.     int insertUser(@Param("user_name")String user_name,@Param("number") String number,@Param("password") String password);
  15. //    xml映射文件开发
  16.     User selectUserByUserName(@Param("user_name") String user_name);
  17.     //    xml映射文件开发
  18.     long selectAll_COUNT();
  19. //    xml映射文件开发
  20.     List<User> selectAll();
  21. }
复制代码

根据本身的业务需求返回相对应的范例。

  • 测试
打开测试类,声明映射文件,加上主动装配

编写测试类:
  1. @Autowired
  2. private UserMapper userMapper;
  3. @Test
  4. void test2(){
  5.     User u = userMapper.selectById(1);
  6.     System.out.println(u);
  7. }
复制代码
结果:



  • Xml映射文件开发:

  • 创建xml管理包
在resources下面创建mapper包


  • 创建UserMapper.xml文件
代码:
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  4. <mapper namespace="com.waisang.mybatisflex.mapper.UserMapper">
  5.     <!-- selectByName -->
  6.     <select id="selectUserByUserName" resultType="com.waisang.mybatisflex.entity.User">
  7.         select * from `user` where `user_name` = #{user_name}
  8.     </select>
  9. <!--    分页查询-->
  10.     <select id="selectAll" resultType="com.waisang.mybatisflex.entity.User">
  11.         select * from `user` ${qwSql} limit ${pageOffset}, ${pageSize}
  12.     </select>
  13. <!--    需要写对应的count查询-->
  14.     <select id="selectAll_COUNT" resultType="long">
  15.         select count(*) from `user` ${qwSql}
  16.     </select>
  17. </mapper>
复制代码

在UserMapper接口映射文件添加相对应的方法

假如你有安装mybatisX插件,那就可以点击小鸟快速到达接口


  • 测试

结果




  • 分页
分页使用到了mysql的limit,

Xml代码:
  1. <!--    分页查询-->
  2.     <select id="selectAll" resultType="com.waisang.mybatisflex.entity.User">
  3.         select * from `user` ${qwSql} limit ${pageOffset}, ${pageSize}
  4.     </select>
  5. <!--    需要写对应的count查询-->
  6.     <select id="selectAll_COUNT" resultType="long">
  7.         select count(*) from `user` ${qwSql}
  8.     </select>
复制代码




UserMapper接口映射文件创建相对应的方法;


测试:


QueryWrapper是刚刚xml预留的写sql语句条件查询的地方,也就是qw这段代码springBoot会主动把我们加入到这里,我这里的查询条件是Id值>0的,你可以根据你的实际情况做调解。
Page.of(当前也没,每页条数)

假如qw内的查询条件必要,大于,等于,小于等条件可以参考以下文章
mybatis plus 条件构造器queryWrapper学习_querywapper是什么-CSDN博客
来到测试类测试大功告成。

代码:
  1. QueryWrapper qw = QueryWrapper.create()
  2.                 .where(User::getId).gt(0);
  3.         Page<User> page = Page.of(1,3);
  4. //如果你的查询表数量不是标准命名,就需要在dataSelectId后面加上加上"selectAll_COUNT"你定义的查询数量的xmlID
  5.         page = userMapper.xmlPaginate("selectAll",page,qw);
  6.         System.out.println(page);
复制代码
一键三连给你办理题目

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

圆咕噜咕噜

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表