使用Mybatis-flex注解和xml方式进行mysql添加,查询,分页
注解开发(博主推荐)
首先我必须声明,注解开发跟xml开发的区别,在实际开发中,可以根据项目的需求和特点来选择使用 XML 映射文件还是注解。对于简单的 CRUD 操作,使用注解可以减少文件数量,使代码更加简洁;而对于复杂的查询逻辑和映射关系,则建议使用 XML 映射文件以保证代码的可读性和可维护性。
对于新手我更为推荐注解开发,因为只要你有的sql语句会写那就都不是问题。
首先我们还是必须要有两个包
entity跟mapper包,entity用来其实就是been包,也叫po包看个人喜好,mapper包是不能更改的,用来存放映射文件。
创建数据库
首先必须要有数据库,以下是我已经建好的数据库
/*
Navicat Premium Data Transfer
Source Server : localhost_3306
Source Server Type : MySQL
Source Server Version : 50732
Source Host : localhost:3306
Source Schema : test
Target Server Type : MySQL
Target Server Version : 50732
File Encoding : 65001
Date: 27/09/2024 16:33:23
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`number` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '你', '123123', '');
INSERT INTO `user` VALUES (2, '是', '321321', '');
INSERT INTO `user` VALUES (3, '哈', '112211', '');
INSERT INTO `user` VALUES (4, '测试', '123', '111');
INSERT INTO `user` VALUES (5, '1', 'aaa', 'bbb');
INSERT INTO `user` VALUES (6, 'demo', '123', '123');
INSERT INTO `user` VALUES (7, 'admin', '110', 'admin');
SET FOREIGN_KEY_CHECKS = 1;
1.检查yml配置文件mysql连接池信息对与否
必须先检查你的yml文件配置对不对
创建实体类和实体类的映射文件
创建实体类
然后创建相关的类,例如我写的是用户,我就在entity包里创建用户类
代码:
package com.waisang.mybatisflex.entity;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import lombok.Data;
//提供get,set,tostring方法
@Data
//应与数据库的表名一致
@Table("user")
public class User {
//主键类型=主键类型.自增
@Id(keyType = KeyType.Auto)
private int id;
private String user_name;
private String password;
private String number;
}
数据库里有多少字段就要声明多少变量
创建相关的映射文件
在mapper文件下创建
代码:
package com.waisang.mybatisflex.mapper;
import com.mybatisflex.core.BaseMapper;
import com.waisang.mybatisflex.entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface UserMapper extends BaseMapper<User> {
// 注解开发
@Select("select * from user where id = #{id}")
User selectById(@Param("id") int id);
// 注解开发
@Insert("insert into user values (null,#{user_name},#{number},#{password})")
int insertUser(@Param("user_name")String user_name,@Param("number") String number,@Param("password") String password);
// xml映射文件开发
User selectUserByUserName(@Param("user_name") String user_name);
// xml映射文件开发
long selectAll_COUNT();
// xml映射文件开发
List<User> selectAll();
}
根据自己的业务需求返回相对应的类型。
测试
打开测试类,声明映射文件,加上自动装配
编写测试类:
@Autowired
private UserMapper userMapper;
@Test
void test2(){
User u = userMapper.selectById(1);
System.out.println(u);
}
结果:
Xml映射文件开发:
创建xml管理包
在resources下面创建mapper包
创建UserMapper.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="com.waisang.mybatisflex.mapper.UserMapper">
<!-- selectByName -->
<select id="selectUserByUserName" resultType="com.waisang.mybatisflex.entity.User">
select * from `user` where `user_name` = #{user_name}
</select>
<!-- 分页查询-->
<select id="selectAll" resultType="com.waisang.mybatisflex.entity.User">
select * from `user` ${qwSql} limit ${pageOffset}, ${pageSize}
</select>
<!-- 需要写对应的count查询-->
<select id="selectAll_COUNT" resultType="long">
select count(*) from `user` ${qwSql}
</select>
</mapper>
在UserMapper接口映射文件添加相对应的方法
如果你有安装mybatisX插件,那就可以点击小鸟快速到达接口
测试
结果
分页
分页使用到了mysql的limit,
Xml代码:
<!-- 分页查询-->
<select id="selectAll" resultType="com.waisang.mybatisflex.entity.User">
select * from `user` ${qwSql} limit ${pageOffset}, ${pageSize}
</select>
<!-- 需要写对应的count查询-->
<select id="selectAll_COUNT" resultType="long">
select count(*) from `user` ${qwSql}
</select>
UserMapper接口映射文件创建相对应的方法;
测试:
QueryWrapper是刚刚xml预留的写sql语句条件查询的地方,也就是qw这段代码springBoot会自动把我们加入到这里,我这里的查询条件是Id值>0的,你可以根据你的实际情况做调整。
Page.of(当前也没,每页条数)
如果qw内的查询条件需要,大于,等于,小于等条件可以参考以下文章
mybatis plus 条件构造器queryWrapper学习_querywapper是什么-CSDN博客
来到测试类测试大功告成。
代码:
QueryWrapper qw = QueryWrapper.create()
.where(User::getId).gt(0);
Page<User> page = Page.of(1,3);
//如果你的查询表数量不是标准命名,就需要在dataSelectId后面加上加上"selectAll_COUNT"你定义的查询数量的xmlID
page = userMapper.xmlPaginate("selectAll",page,qw);
System.out.println(page);
一键三连给你解决问题