您当前的位置: 首页 >  mybatis

梁云亮

暂无认证

  • 2浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【精品】 自定义MyBatis增强,实现类似MyBatisPlus的功能

梁云亮 发布时间:2022-09-22 15:43:30 ,浏览量:2

本博客中的内容是作者是企业中开发时实际用到的功能,感兴趣的读者可以将代码整合到自己的项目中,然后结合自己身业务进行调整。

表示关系运算的常量
public interface Logic {
    String and = "AND";
    String or = "OR";
}
表示SQL关系运算的注解 Between
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Between {
    /**
     * 逻辑
     *
     * @return
     */
    String logic() default Logic.and;

    String min() default "";

    String max() default "";
}
EQ
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface EQ {
    /**
     * 逻辑
     *
     * @return
     */
    String logic() default Logic.and;

    String value() default "";
}
IN
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface IN {
    /**
     * 逻辑
     *
     * @return
     */
    String logic() default Logic.and;

    String value() default "";
}
Like
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Like {
    /**
     * 逻辑
     *
     * @return
     */
    String logic() default "AND";

    String value() default "";
}
NE
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface NE {
    /**
     * 逻辑
     *
     * @return
     */
    String logic() default Logic.and;

    String value() default "";
}
工具类:SQLUtil
public class SQLUtil {
    public static String getTableName(Class clazz) {
        String className = clazz.getSimpleName();
        String tableName = StringUtil.hump2underscore(className);
        return tableName;
    }

    public static String getTableColumns(Class clazz) {
        Field[] fields = clazz.getDeclaredFields();
        List fieldNames = new ArrayList();
        for (Field field : fields) {
            String fieldName = field.getName();
            if (fieldName.equals("serialVersionUID")) {
                continue;
            }
            String columnName = StringUtil.hump2underscore(fieldName);
            fieldNames.add(columnName);
        }
        String columns = String.join(",", fieldNames);
        return columns;
    }

    public static void main(String[] args) {
        System.out.println(StringUtil.hump2underscore("Project"));
        System.out.println(StringUtil.hump2underscore("SaleGrade"));

        final String tableName = getTableName(Project.class);
        System.out.println(tableName);

        final String tableColumns = getTableColumns(Project.class);
        System.out.println(tableColumns);
    }
}
工具类:MyBatisUtil
public class MyBatisUtil {
    /**
     * 获取Mapper接口对应的实体类的字节码
     *
     * @param context
     * @return
     */
    private static Class getEntityClass(ProviderContext context) {
        //获取Mapper接口名
        final Class mapperType = context.getMapperType();
        //获取带参数化类型的通用Mapper
        final ParameterizedType parameterizedType = (ParameterizedType) (mapperType.getGenericInterfaces()[0]);
        //获取通用mapper的第二个泛型参数的字节码
        final Class clazz = (Class) parameterizedType.getActualTypeArguments()[1];
        return clazz;
    }

    /**
     * 获取表名
     *
     * @param context
     * @return
     */
    public static String getTableName(ProviderContext context) {
        final Class clazz = getEntityClass(context);
        //获取表名
        final String tableName = SQLUtil.getTableName(clazz);
        return "tb_" + tableName;
    }

    /**
     * 获取表字段列表
     *
     * @param context
     * @return
     */
    public static String getTableColumns(ProviderContext context) {
        final Class clazz = getEntityClass(context);
        //获取字段列表
        final String tableColumns = SQLUtil.getTableColumns(clazz);
        return tableColumns;
    }
}
通用接口:BaseMapper.java
/**
 * @param  主键类型类名
 * @param  实体类类名
 * @author hc
 * 

* 通用Mapper */ public interface BaseMapper { /** * 根据ID进行查找 * * @param id * @return */ @SelectProvider(type = BaseMapperProvider.class, method = "selectById") E selectById(K id); /** * 根据条件进行查询 * * @param baseQuery * @return */ @SelectProvider(type = BaseMapperProvider.class, method = "selectByCondition") List selectByCondition(BaseQuery baseQuery); /** * 插入数据 * * @param e * @return */ @InsertProvider(type = BaseMapperProvider.class, method = "insert") @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id") //@Options和@SelectKey都能够实现功能:返回新增记录的自增长主键id字段值 //@SelectKey(statement = "select last_insert_id()",keyProperty = "id",before = false,resultType = Long.class) int insert(E e); /** * 选择性插入数据 * * @param e * @return */ @InsertProvider(type = BaseMapperProvider.class, method = "insertSelective") @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id") int insertSelective(E e); /** * 批量插入数据 * * @param list * @return */ @InsertProvider(type = BaseMapperProvider.class, method = "batchInsert") @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id") int batchInsert(@Param("list") List list); /** * 根据ID更新数据 * * @param e * @return */ @UpdateProvider(type = BaseMapperProvider.class, method = "update") int update(E e); /** * 选择性更新数据 * * @param e * @return */ @UpdateProvider(type = BaseMapperProvider.class, method = "updateSelective") int updateSelective(E e); /** * 批量更新数据 * * @param list * @return */ @UpdateProvider(type = BaseMapperProvider.class, method = "batchUpdate") int batchUpdate(List list); /** * 选择性地批量更新数据 * * @param list * @return */ @UpdateProvider(type = BaseMapperProvider.class, method = "batchUpdateSelective") int batchUpdateSelective(List list); /** * 插入或更新数据 * * @param e * @return */ @InsertProvider(type = BaseMapperProvider.class, method = "insertOrUpdate") int insertOrUpdate(E e); /** * 选择性插入或更新数据 * * @param e * @return */ @InsertProvider(type = BaseMapperProvider.class, method = "insertOrUpdateSelective") int insertOrUpdateSelective(E e); /** * 修改指定ID的记录的状态 * 删除数据为逻辑删除:修改其状态state值为0 * * @param id * @param state * @return */ @UpdateProvider(type = BaseMapperProvider.class, method = "updateStateById") int updateStateById(@Param("id") K id, @Param("state") Integer state); /** * 批量修改指定数据的状态 * * @param idList * @param state * @return */ @UpdateProvider(type = BaseMapperProvider.class, method = "batchUpdateStateById") int batchUpdateStateById(@Param("idList") List idList, @Param("state") Integer state); /** * 根据ID删除:真正的物理删除 * * @param id * @return */ @DeleteProvider(type = BaseMapperProvider.class, method = "deleteById") int deleteById(@Param("id") K id); }

通用接口功能实现:BaseMapperProvider.java
package com.hc.common.mybatisplus;

import com.hc.common.mybatisplus.anno.Between;
import com.hc.common.mybatisplus.anno.EQ;
import com.hc.common.mybatisplus.anno.IN;
import com.hc.common.mybatisplus.anno.Like;
import com.hc.common.mybatisplus.anno.NE;
import com.hc.common.mybatisplus.util.MyBatisUtil;
import com.hc.common.utils.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.builder.annotation.ProviderContext;
import org.apache.ibatis.jdbc.SQL;

import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.List;

/**
 * @author hc
 * 用来生成Mapper的具体实现
 */
@Slf4j
public class BaseMapperProvider {

    private String basePackage = "com.hc.zhaopin";

    /**
     * 根据ID查找
     * 

* SELECT 字段列表 * FROM tb_project * WHERE id = #{id} * * @param context * @return */ public String selectById(ProviderContext context) { //表名 final String tableName = MyBatisUtil.getTableName(context); //列名 final String tableColumns = MyBatisUtil.getTableColumns(context); String cols = ""; for (String field : tableColumns.split(",")) { cols += field+" as "+ StringUtil.underline2hump(field)+", "; } cols = cols.substring(0,cols.length()-2); final String sql = "SELECT " + cols + " FROM " + tableName + " WHERE id = #{id}"; return sql; } /** * 根据条件进行查找 *

*SELECT 字段列表 FROM tb_project * * * and name=#{name} * * * and intro like #{intro} * * * and resume_id in * * #{item} * * * * * ORDER BY ${sorts} * * * @param context * @return */ public String selectByCondition(ProviderContext context) { //表名 final String tableName = MyBatisUtil.getTableName(context); //列名 final String tableColumns = MyBatisUtil.getTableColumns(context); String cols = ""; for (String field : tableColumns.split(",")) { cols += field+" as "+ StringUtil.underline2hump(field)+", "; } cols = cols.substring(0,cols.length()-2); String sql = ""; sql += "SELECT " + cols + " FROM " + tableName + " "; sql += ""; //获取实体类的名称 final String entityName = StringUtil.underline2hump(tableName.substring(3)); Class clazz = null; try { //利用反射获取Query类的字节码 clazz = Class.forName(basePackage + ".domain.query." + StringUtil.first2Upper(entityName) + "Query"); } catch (ClassNotFoundException e) { e.printStackTrace(); } //获取Query类中都有哪些属性 final Field[] declaredFields = clazz.getDeclaredFields(); for (Field field : declaredFields) { //获取Query类属性上的注解 final Annotation[] annotations = field.getAnnotations(); for (Annotation annotation : annotations) { //获取Query类属性上的注解类型的字节码 final Class annotationType = annotation.annotationType(); //获取Query类属性的名称 final String fieldName = field.getName(); //获取Query类对应的表字段名 final String columnName = StringUtil.hump2underscore(fieldName); if (Between.class == annotationType) { Between between = (Between) annotation; sql += ""; sql += between.logic() + " " + columnName + " BETWEEN '" + between.min() + "' AND '" + between.max() + "' "; sql += ""; } else if (EQ.class == annotationType) { EQ eq = (EQ) annotation; sql += ""; sql += eq.logic() + " " + columnName + " = #{" + fieldName + "} "; sql += ""; } else if (IN.class == annotationType) { IN in = (IN) annotation; sql += "0'>"; sql += in.logic() + " " + columnName + " IN "; sql += " "; sql += "#{item} "; sql += " "; sql += ""; } else if (Like.class == annotationType) { Like like = (Like) annotation; sql += ""; sql += like.logic() + " " + columnName + " LIKE CONCAT(CONCAT('%', #{" + fieldName + ",jdbcType=VARCHAR}), '%') "; sql += ""; } else if (NE.class == annotationType) { NE ne = (NE) annotation; sql += ""; sql += ne.logic() + " " + columnName + " != #{" + fieldName + "} "; sql += ""; } } } sql += " "; sql += " "; sql += "ORDER BY ${sorts} "; sql += ""; sql += ""; //System.out.println(sql); return sql; } /** * 插入数据 *

* insert into tb_project (`name`, url, intro ) * values * (#{name}, #{url}, #{intro}}) * * @param context * @return */ public String insert(ProviderContext context) { //表名 final String tableName = MyBatisUtil.getTableName(context); //列名 final String tableColumns = MyBatisUtil.getTableColumns(context); //存放字段列表 String columnStr = " ("; //存放和字段列表相对应的值的列表 String valueStr = " VALUES ("; //获取到数据库表中所有的字段 final String[] columns = tableColumns.split(","); for (String column : columns) { //插入数据时不考虑自动增长的主键id if (!column.equals("id")) { columnStr += column + ", "; //将表字段转换成实体类属性 column = StringUtil.underline2hump(column); valueStr += "#{" + column + "}, "; } } //去除最后的逗号 columnStr = columnStr.substring(0, columnStr.length() - 2) + " )"; valueStr = valueStr.substring(0, valueStr.length() - 2) + " )"; String sql = "INSERT INTO " + tableName + columnStr + valueStr; //System.out.println(sql); return sql; } /** * 修改数据 *

* update tb_project * set `name` = #{name},url = #{url},intro = #{intro} * where id = #{id} * * @param context * @return */ public String update(ProviderContext context) { //表名 final String tableName = MyBatisUtil.getTableName(context); //列名 final String tableColumns = MyBatisUtil.getTableColumns(context); //set子名 String kv = " SET "; //where子句 String where = " WHERE id = "; final String[] columns = tableColumns.split(","); for (String column : columns) { if (!column.equals("id")) { //字段 String field = StringUtil.underline2hump(column); kv += column + "= #{" + field + "}, "; } else { where += "#{" + column + "}"; } } //去除后面的逗号 kv = kv.substring(0, kv.length() - 2); String sql = "UPDATE " + tableName + kv + where; //System.out.println(sql); return sql; } /** * 选择性插入数据 *

*INSERT INTO tb_project * * * `name`, * * * url, * * * intro, * * * * * #{name,jdbcType=VARCHAR}, * * * #{url,jdbcType=VARCHAR}, * * * #{intro,jdbcType=LONGVARCHAR}, * * * @param context * @return */ public String insertSelective(ProviderContext context) { //表名 final String tableName = MyBatisUtil.getTableName(context); //表字段,各字段之间以,分隔 final String tableColumns = MyBatisUtil.getTableColumns(context); String sql = ""; sql += "INSERT INTO " + tableName + " "; //字段列表 sql += ""; final String[] columns1 = tableColumns.split(","); for (String column : columns1) { String field = StringUtil.underline2hump(column); sql += ""; sql += column + ","; sql += ""; } sql += ""; //值列表 sql += ""; final String[] columns = tableColumns.split(","); for (String column : columns) { String field = StringUtil.underline2hump(column); sql += ""; sql += "#{" + field + "},"; sql += ""; } sql += ""; sql += ""; //System.out.println(sql); return sql; } /** * 批量插入数据 *

* INSERT INTO tb_project (`name`, url, intro) * VALUES * * (#{item.name,jdbcType=VARCHAR}, #{item.url,jdbcType=VARCHAR}, #{item.intro,jdbcType=LONGVARCHAR} ) * * * @param context * @return */ public String batchInsert(ProviderContext context) { //表名 final String tableName = MyBatisUtil.getTableName(context); //表字段,各字段之间以,分隔 final String tableColumns = MyBatisUtil.getTableColumns(context); String sql = ""; sql += "INSERT INTO " + tableName + "(" + tableColumns + ") VALUES "; sql += "("; final String[] columns = tableColumns.split(","); for (String column : columns) { final String field = StringUtil.underline2hump(column); sql += "#{item." + field + "}, "; } sql = sql.substring(0, sql.length() - 2); sql += ")"; sql += ""; // System.out.println(sql); return sql; } /** * 添加数据或更新数据 * * * update tb_city * set `name`=#{name}, * priority=#{priority}, * province_id=#{provinceId} * where id = #{id} * * * insert into tb_city (`name`, priority, province_id) * values (#{name}, #{priority}, #{provinceId) * * * * @param context * @return */ public String insertOrUpdate(ProviderContext context) { //表名 final String tableName = MyBatisUtil.getTableName(context); //表字段,各字段之间以,分隔 final String tableColumns = MyBatisUtil.getTableColumns(context); String sql = ""; sql += " "; //更新数据 sql += " "; sql += "UPDATE " + tableName + " SET "; final String[] columns = tableColumns.split(","); for (String column : columns) { if (!"id".equals(column)) { final String field = StringUtil.underline2hump(column); sql += column + " = #{" + field + "}, "; } } sql = sql.substring(0, sql.length() - 2) + " where id = #{id} "; sql += ""; //添加数据 sql += ""; String columnStr = " ("; String valueStr = " VALUES ("; for (String column : columns) { if (!"id".equals(column)) { columnStr += column + ", "; column = StringUtil.underline2hump(column); valueStr += "#{" + column + "}, "; } } columnStr = columnStr.substring(0, columnStr.length() - 2) + " )"; valueStr = valueStr.substring(0, valueStr.length() - 2) + " )"; sql += "INSERT INTO " + tableName + columnStr + valueStr; sql += ""; sql += ""; sql += ""; //System.out.println(sql); return sql; } /** * 根据id修改状态 *

* update tb_project * set `state` = #{state} * where id = #{id} * * @param context * @return */ public String updateStateById(ProviderContext context) { //表名 final String tableName = MyBatisUtil.getTableName(context); final SQL sql = new SQL() .UPDATE(tableName) .SET("state=#{state}") .WHERE("id=#{id}"); return sql.toString(); } /** * 批量根据id修改状态 *

* update tb_project * set `state` = #{state} * where id in (1,2,3,4) * * @param context * @param idList * @param state * @return */ public String batchUpdateStateById(ProviderContext context, List idList, Integer state) { //表名 final String tableName = MyBatisUtil.getTableName(context); String sql = "update " + tableName + " set state=" + state + " where id in ("; for (K id : idList) { sql += id + ", "; } //去除语句后面的逗号 sql = sql.substring(0, sql.length() - 2) + ")"; return sql; } /** * 选择性添加数据或更新数据 * * * UPDATE tb_project * * name = #{name}, * url = #{url}, * intro = #{intro}, * * where id = #{id} * * * INSERT INTO tb_project * * id, * name, * url, * intro, * * VALUES * * #{id}, * #{name}, * #{url}, * #{intro}, * * * * * @param context * @return */ public String insertOrUpdateSelective(ProviderContext context) { //表名 final String tableName = MyBatisUtil.getTableName(context); //表字段,各字段之间以,分隔 final String tableColumns = MyBatisUtil.getTableColumns(context); String sql = ""; sql += " "; //更新数据 sql += " "; sql += "UPDATE " + tableName + " "; sql += ""; final String[] columns = tableColumns.split(","); for (String column : columns) { if (!"id".equals(column)) { final String field = StringUtil.underline2hump(column); sql += ""; sql += column + " = #{" + field + "}, "; sql += ""; } } sql += " "; sql += " where id = #{id} "; sql += ""; //添加数据 sql += ""; sql += "INSERT INTO " + tableName + " "; sql += " "; for (String column : columns) { sql += " "; sql += column + ","; sql += " "; } sql += " "; sql += "VALUES "; sql += " "; for (String column : columns) { sql += " "; sql += "#{" + StringUtil.underline2hump(column) + "},"; sql += " "; } sql += ""; sql += ""; sql += ""; sql += ""; System.out.println(sql); return sql; } /** * 选择性更新 *

* UPDATE tb_project * * name = #{name}, * url = #{url}, * intro = #{intro}, * duty = #{duty}, * * where id = #{id} * * @param context * @return */ public String updateSelective(ProviderContext context) { //表名 final String tableName = MyBatisUtil.getTableName(context); //表字段,各字段之间以,分隔 final String tableColumns = MyBatisUtil.getTableColumns(context); String sql = ""; sql += "UPDATE " + tableName + " "; sql += ""; final String[] columns = tableColumns.split(","); for (String column : columns) { if (!"id".equals(column)) { final String field = StringUtil.underline2hump(column); sql += ""; sql += column + " = #{" + field + "}, "; sql += ""; } } sql += " "; sql += " where id = #{id} "; sql += ""; //System.out.println(sql); return sql; } /** * 批量更新 *

*UPDATE tb_project * * * when id = #{item.id} then #{item.name} * * * when id = #{item.id} then #{item.url} * * * when id = #{item.id} then #{item.intro} * * * when id = #{item.id} then #{item.duty} * * * WHERE id IN * * #{item.id} * * * @param context * @return */ public String batchUpdate(ProviderContext context) { //表名 final String tableName = MyBatisUtil.getTableName(context); //表字段,各字段之间以,分隔 final String tableColumns = MyBatisUtil.getTableColumns(context); String sql = ""; sql += "UPDATE " + tableName + " "; sql += " "; final String[] columns = tableColumns.split(","); for (String column : columns) { if (!"id".equals(column)) { sql += " "; sql += " "; sql += "when id = #{item.id} then #{item." + StringUtil.underline2hump(column) + "} "; sql += " "; sql += " "; } } sql += " "; sql += "WHERE id IN "; sql += " "; sql += "#{item.id} "; sql += " "; sql += ""; System.out.println(sql); return sql; } /** * 选择性地批量更新 *

*update tb_province * * * * * when id = #{item.id,jdbcType=BIGINT} then #{item.name,jdbcType=VARCHAR} * * * * * * * when id = #{item.id,jdbcType=BIGINT} then #{item.area,jdbcType=VARCHAR} * * * * * * * when id = #{item.id,jdbcType=BIGINT} then #{item.priority,jdbcType=INTEGER} * * * * * * * when id = #{item.id,jdbcType=BIGINT} then #{item.state,jdbcType=TINYINT} * * * * * where id in * * #{item.id,jdbcType=BIGINT} * * @param context * @return */ public String batchUpdateSelective(ProviderContext context) { //表名 final String tableName = MyBatisUtil.getTableName(context); //表字段,各字段之间以,分隔 final String tableColumns = MyBatisUtil.getTableColumns(context); String sql = ""; sql += "UPDATE " + tableName + " "; sql += " "; final String[] columns = tableColumns.split(","); for (String column : columns) { if (!"id".equals(column)) { sql += " "; sql += " "; sql += ""; sql += "when id = #{item.id} then #{item." + StringUtil.underline2hump(column) + "} "; sql += ""; sql += " "; sql += " "; } } sql += " "; sql += "WHERE id IN "; sql += " "; sql += "#{item.id} "; sql += " "; sql += ""; System.out.println(sql); return sql; } /** * 根据ID删除,物理删除 *

* SELECT 字段列表 FROM tb_project * WHERE id = #{id} * * @param context * @return */ public String deleteById(ProviderContext context) { //表名 final String tableName = MyBatisUtil.getTableName(context); String sql = " DELETE FROM " + tableName + " WHERE id = #{id}"; return sql; } }

测试代码 实体类
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
    /**
     * 编号
     */
    private Long id;

    /**
     * 姓名
     */
    private String name;

    /**
     * 头像
     */
    private String avatar;

    /**
     * 昵称
     */
    private String nickname;

    /**
     * 账户
     */
    private String account;

    /**
     * 密码
     */
    private String password;

    /**
     * 性别  1男 2女 3未知
     */
    private Integer gender;

    /**
     * 生日
     */
    private LocalDateTime birth;

    /**
     * 电话
     */
    private String tel;

    /**
     * 邮件
     */
    private String email;

    /**
     * QQ
     */
    private String qq;

    /**
     * 微信
     */
    private String wechat;

    /**
     * 个人主页
     */
    private String homePage;

    /**
     * 户籍编号
     */
    private Long huJiId;

    /**
     * 户籍地址
     */
    private String huJiAddr;

    /**
     * 居住地编号
     */
    private Long juZhuId;

    /**
     * 居住地地址
     */
    private String juZhuAddr;

    /**
     * 显示优先级
     */
    private Integer priority;

    /**
     * 状态 1正常 2功能受限 3删除
     */
    private Integer state;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
}

Mapper
@Mapper
public interface UserMapper extends BaseMapper {
}

测试代码
@SpringBootTest
public class UserMapperTest {

    @Resource
    private UserMapper userMapper;

    @Test
    void selectById() {
        final User user = userMapper.selectById(5L);
        System.out.println(user);
    }

    @Test
    void selectByCondition1() {
        final List userList = userMapper.selectByCondition(UserQuery.builder()
                .name("as")
                .build());
        userList.forEach(System.out::println);
    }

    @Test
    void selectByCondition2() {
        final List userList = userMapper.selectByCondition(UserQuery.builder()
                .state(2)
                .build());
        userList.forEach(System.out::println);
    }

    @Test
    void selectByCondition3() {
        final List userList = userMapper.selectByCondition(UserQuery.builder()
                .state(2)
                .sorts(Map.of("id", "desc", "name", "asc", "birth", "desc"))
                .build());
        userList.forEach(System.out::println);
    }

    @Test
    void insert() {
        User user = User.builder()
                .name("haha")
                .account("xixi")
                .build();
        userMapper.insert(user);
        System.out.println(user);
    }

    @Test
    void insertSelective() {
        User user = User.builder()
                .name("haha")
                .account("xixi")
                .createTime(LocalDateTime.now())
                .build();
        userMapper.insertSelective(user);
        System.out.println(user);
    }

    @Test
    void batchInsert() {
        List list = new ArrayList();
        list.add(User.builder().name("aa").build());
        list.add(User.builder().name("bb").build());
        list.add(User.builder().name("cc").build());

        userMapper.batchInsert(list);
        System.out.println(list);
    }

    @Test
    void update() {
        final int res = userMapper.update(User.builder()
                .id(62L)
                .name("abc")
                .account("cba")
                .build());
        System.out.println(res);
    }

    @Test
    void updateSelective() {
        final int res = userMapper.updateSelective(User.builder()
                .id(62L)
                .name("abc")
                .qq("2341312")
                .account("cba")
                .build());
        System.out.println(res);
    }

    @Test
    void batchUpdate() {
        List list = new ArrayList();
        list.add(User.builder().id(22L).name("aa").build());
        list.add(User.builder().id(23L).name("bb").build());
        list.add(User.builder().id(58L).name("cc").build());

        userMapper.batchUpdate(list);
        System.out.println(list);
    }

    @Test
    void batchUpdateSelective() {
        List list = new ArrayList();
        list.add(User.builder().id(22L).name("111").build());
        list.add(User.builder().id(23L).name("222").birth(LocalDateTime.now()).qq("2134124").build());
        list.add(User.builder().id(58L).name("333").createTime(LocalDateTime.now()).build());

        userMapper.batchUpdateSelective(list);
        System.out.println(list);
    }

    @Test
    void insertOrUpdate1() {
        final int res = userMapper.insertOrUpdate(User.builder()
                .id(62L)
                .name("abc")
                .qq("2341312")
                .account("cba")
                .build());
        System.out.println(res);
    }

    @Test
    void insertOrUpdate2() {
        final int res = userMapper.insertOrUpdate(User.builder()
                .name("abc")
                .qq("2341312")
                .account("cba")
                .build());
        System.out.println(res);
    }

    @Test
    void insertOrUpdateSelective1() {
        final int res = userMapper.insertOrUpdateSelective(User.builder()
                .name("abc")
                .qq("2341312")
                .account("cba")
                .build());
        System.out.println(res);
    }

    @Test
    void insertOrUpdateSelective2() {
        final int res = userMapper.insertOrUpdateSelective(User.builder()
                .id(62L)
                .name("abc")
                .qq("2341312")
                .account("cba")
                .birth(LocalDateTime.now())
                .build());
        System.out.println(res);
    }

    @Test
    void updateStateById() {
        userMapper.updateStateById(1L, GlobalConst.state_enable);
    }

    @Test
    void batchUpdateStateById() {
        List idList = ListUtil.add(4L, 5L, 6L, 7L);
        userMapper.batchUpdateStateById(idList, GlobalConst.state_disable);
    }

    @Test
    void deleteById() {
        final int res = userMapper.deleteById(21L);
        System.out.println(res);
    }
}
关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0513s