首页 > 其他分享 >自定义全局操作

自定义全局操作

时间:2022-10-01 21:39:09浏览次数:82  
标签:小明 String 自定义 Long student Integer 操作 全局 new

public class FindOne extends AbstractMethod {

@Override
public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
/* 执行 SQL ,动态 SQL 参考类 SqlMethod */
String sql = "select * from " + tableInfo.getTableName()
+ " where " + tableInfo.getKeyColumn() + "=#{" + tableInfo.getKeyProperty() + "}";
/* mapper 接口方法名一致 */
String method = "findOne";
SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
return addSelectMappedStatementForTable(mapperClass, method, sqlSource, tableInfo);
}
}
  • 自定义sql注入
public class MySqlInjector extends DefaultSqlInjector {

@Override
public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo);
//增加自定义方法
methodList.add(new DeleteAll());
methodList.add(new FindOne());
/**
* 以下 3 个为内置选装件
* 头 2 个支持字段筛选函数
*/
// 例: 不要指定了 update 填充的字段
methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE));
methodList.add(new AlwaysUpdateSomeColumnById());
methodList.add(new LogicDeleteByIdWithFill());
return methodList;
}
}
  • 定义到BaseMapper
public interface MyBaseMapper<T> extends BaseMapper<T> {

/* ↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓ */

/**
* 以下定义的 4个 default method, copy from {@link com.baomidou.mybatisplus.extension.toolkit.ChainWrappers}
*/
default QueryChainWrapper<T> queryChain() {
return new QueryChainWrapper<>(this);
}

default LambdaQueryChainWrapper<T> lambdaQueryChain() {
return new LambdaQueryChainWrapper<>(this);
}

default UpdateChainWrapper<T> updateChain() {
return new UpdateChainWrapper<>(this);
}

default LambdaUpdateChainWrapper<T> lambdaUpdateChain() {
return new LambdaUpdateChainWrapper<>(this);
}

/**
* 以下定义的 4个 method 其中 3 个是内置的选装件
*/
int insertBatchSomeColumn(List<T> entityList);

int alwaysUpdateSomeColumnById(@Param(Constants.ENTITY) T entity);

int deleteByIdWithFill(T entity);

/**
* 以下为自己自定义
*/
T findOne(Serializable id);

int deleteAll();
}
  • 测试
@Slf4j
@SpringBootTest
public class InjectorTest {

@Resource
private StudentMapper studentMapper;

/**
* 插入2条数据
* INSERT INTO STUDENT ( ID, NAME, AGE ) VALUES ( ?, ?, ? )
* 1549911999816278017(Long), 小明0号(String), 0(Integer)
*
* INSERT INTO STUDENT ( ID, NAME, AGE ) VALUES ( ?, ?, ? )
* 1549911999887581185(Long), 小明1号(String), 1(Integer)
*/
@Test
public void test() {
log.error("--------------------------------------insert-------------------------------------------------------");
List<Long> ids = Lists.newArrayList();
for (int i = 0; i < 2; i++) {
Student student = new Student("小明" + i + "号", i);
studentMapper.insert(student);
ids.add(student.getId());
}
}

/**
* 插入18条数据
* INSERT INTO STUDENT (ID,NAME,AGE) VALUES (?,?,?) , (?,?,?) , (?,?,?) , (?,?,?) , (?,?,?) , (?,?,?) , (?,?,?) , (?,?,?) , (?,?,?) , (?,?,?) , (?,?,?) , (?,?,?) , (?,?,?) , (?,?,?) , (?,?,?) , (?,?,?) , (?,?,?) , (?,?,?)
* 1549912388825489409(Long), 小明2号(String), 2(Integer), 1549912388825489410(Long), 小明3号(String), 3(Integer), 1549912388825489411(Long), 小明4号(String), 4(Integer), 1549912388825489412(Long), 小明5号(String), 5(Integer), 1549912388825489413(Long), 小明6号(String), 6(Integer), 1549912388825489414(Long), 小明7号(String), 7(Integer), 1549912388825489415(Long), 小明8号(String), 8(Integer), 1549912388825489416(Long), 小明9号(String), 9(Integer), 1549912388825489417(Long), 小明10号(String), 10(Integer), 1549912388825489418(Long), 小明11号(String), 11(Integer), 1549912388825489419(Long), 小明12号(String), 12(Integer), 1549912388825489420(Long), 小明13号(String), 13(Integer), 1549912388825489421(Long), 小明14号(String), 14(Integer), 1549912388825489422(Long), 小明15号(String), 15(Integer), 1549912388825489423(Long), 小明16号(String), 16(Integer), 1549912388825489424(Long), 小明17号(String), 17(Integer), 1549912388825489425(Long), 小明18号(String), 18(Integer), 1549912388825489426(Long), 小明19号(String), 19(Integer)
*
* select * from student where id = 1549912388737409026
* Student(id=1549912388737409026, name=小明0号, age=0)
*/
@Test
public void test1() {
log.error("--------------------------------------insert-------------------------------------------------------");
List<Long> ids = Lists.newArrayList();
for (int i = 0; i < 2; i++) {
Student student = new Student("小明" + i + "号", i);
studentMapper.insert(student);
ids.add(student.getId());
}
log.error("--------------------------------------insertBatchSomeColumn-------------------------------------------------------");
List<Student> ss = Lists.newArrayList();
for (int i = 2; i < 20; i++) {
Student student = new Student("小明" + i + "号", i);
ss.add(student);
}
studentMapper.insertBatchSomeColumn(ss);
ids.addAll(ss.stream().map(Student::getId).collect(Collectors.toList()));

Student select = studentMapper.select("select * from student where id = " + ids.get(0));
System.out.println(select);
}

/**
* 清空表中数据
* delete from STUDENT
*/
@Test
public void test2() {
log.error("--------------------------------------deleteAll-------------------------------------------------------");
studentMapper.deleteAll();
}

}



标签:小明,String,自定义,Long,student,Integer,操作,全局,new
From: https://blog.51cto.com/chniny/5728434

相关文章

  • pyqt5 数据库相关操作
    获取上传文件与下载文件路径fromPyQt5.QtWidgetsimportQFileDialog,QMessageBoxclassWindow_WH():def__init__(self):self.mainwindow=QWidget()......
  • redis的list类型基本操作
    1、首先连上你的redis以下一些命令很简单,或者执行命令后效果也无法体现的就没有进行截图展示2、list相关操作说明:redis的列表是简单的字符串列表,按照插入顺序排序。它......
  • Oracle 19C 安装及基本操作
    Oracle19c安装包地址:https://pan.baidu.com/s/1CnbkJMLOvPN7rZNUEtttdg 提取码:p00sRedHat7.4安装包地址:https://pan.baidu.com/s/1gNg4B4L2bplkQj46ksyH7A 提取码......
  • golang 常用操作
    golang获取切片slice第一个最后一个元素复合数据类型切片通常用作Go中索引数据的口语结构。该类型[]intSlice是具有类型为integer的元素的切片。len函数用于获取切......
  • python框架中自定义封装logging,一文解决
     为什么需要Logger刚开始写代码可能使用print打印输出就够用了,但是print重定向输出内容非常麻烦,而且无法区分打印日志等级。而logging可以设置打印等级,也可以重定向输......
  • 肖sir___第二个月java操作JDBC_02
    1.1JDBC概述JDBC(JavaDataBaseConnectivity)是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。它由一组用Java语言编写的类和接口组成。各种不同......
  • 此图形中的一个或多个对象无法保存为指定格式。操作未完成 ,因此未创建任何文件。
    “此图形中的一个或多个对象无法保存为指定格式。操作未完成,因此未创建任何文件。”这个有可能是你在用程序绘图时,画了0长度的线,或者0直径的圆等类似的情况。所以在函数......
  • 函数式编程(纯函数、避免改变参数值和全局变量)、使用.map()、.filter()使代码更简洁
    函数式编程是:独立函数——不依赖于程序(里面含有可能更改的全局变量)的状态。纯函数——相同的输入总是产生相同的输出,不产生副作用(不更改参数值和全局变量值)。副作用尽量小......
  • vue3 自定义指令控制按钮权限
    经过1个周的摸索和查阅资料,终于搞定VUE3中自定义指令,实现按钮级别的权限控制。当然,只是简单的对按钮进行隐藏和删除的dom操作比较容易,一直纠结的是当按钮无权限时,不是直接......
  • MYSQL学习笔记之基本操作
    基本操作(1)登录MYSLQ步骤如下:①(win+R)--->cmd-->命令窗口--->输入"mysql-uroot-P端口号-p"②登录成功效果WelcometotheMySQLmonitor.Commandsendwith;or......