栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MybatisPlus,无XML分分钟实现CRUD操作

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MybatisPlus,无XML分分钟实现CRUD操作

不讲太多理论知识,官网都有,直接上手。

1.测试表

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
 `id` bigint(20) UNSIGNED NOT NULL,
 `name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用户名',
 `password` varchar(18) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '密码',
 `age` int(4) DEFAULT NULL COMMENT '年龄',
 `create_time` datetime(0) DEFAULT NULL COMMENT '创建时间',
 `update_time` datetime(0) DEFAULT NULL COMMENT '更新时间',
 PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

引入依赖



 com.baomidou
 mybatis-plus-boot-starter
 3.0.5



 mysql
 mysql-connector-java

配置文件,这里我用的是boot项目

spring:
 datasource:
 username: cjx
 password: cjx19950616
 url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
 driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
 mapper-locations: classpath:/mapper
 @Bean
 public PaginationInterceptor paginationInterceptor() {
  System.out.println("加载分页插件");

  return new PaginationInterceptor();
 }
}

编写一个我们的接口

@Component
public interface UserDao extends baseMapper {
 Integer deleteById(Long id);
}

接下来就可以愉快的测试了,在我们的测试类里先注入dao

@Autowired

private UserDao userMapper;

新增测试


@Test
void save(){

 User u = new User();
 u.setAge(100);
 u.setName("测试数据3");
 u.setPassword("cjx1111");
 u.setAge(25);
 int row = userMapper.insert(u);
 System.out.println(row);
}

是不是很简单?只需要这样就可以完成新增了,既然有单个插入,那少不了也有批量插入

批量新增测试


@Test
void save(){
 List us = new linkedList();
  for (int i = 0;i < 50;i++){
   User u = new User();
   u.setName("测试数据"+i);
   u.setAge((int)(Math.random()*90+10));
   u.setPassword("mima"+i);
   us.add(u);
  }
  userService.saveBatch(us);
}

其中用到了userService,我这里贴一下代码,需要我们接口继承Iservice,实现类继承ServiceImple,这样就可以直接调用mybatis-plus为我们提供的现成方法了。

public interface IUserService extends IService {

}

实现类

@Service public class UserServiceImpl extends ServiceImplimplements IUserService {

}

修改


@Test
void updateById(){

 User u = new User();
 //修改name
 u.setId(1L);
 u.setName("修改下数据--");
 u.setPassword("123");
 u.setAge(99);
 int row = userMapper.updateById(u);
 System.out.println(row);
}

@Test
void selectById(){
 //1.通过id来查询
 User u = userMapper.selectById(1l);
 System.out.println(u);

}

mybatis-plus有个特别好用的就是它的条件构造器,可以帮助我们构造常用的sql,具体用法我会贴在文章最后面。


@Test
void selectByWrapper(){

 //3.通过条件构造器wrapper
 QueryWrapper qw = new QueryWrapper();
 qw.like("name","测试");
 qw.lt("age",50);//小于
 qw.gt("age",15);//大于

 List us = userMapper.selectList(qw);
 us.stream().forEach(System.out::println);

}

既然有查询,自然少不了我们最关心的分页


@Test
void selectByWrapperAndPage(){

 //4.通过条件构造器wrapper和Page分页查询
 QueryWrapper qw = new QueryWrapper();
 qw.like("name","测试");
 qw.lt("age",50);//小于
 qw.gt("age",15);//大于
 qw.orderByDesc("age");

 IPage result = userMapper.selectPage(new Page<>(2,10),qw);

@Test
void selectCount(){

 //5.通过条件查询总条数
 QueryWrapper qw = new QueryWrapper();
 qw.like("name","测试");
 qw.lt("age",50);//小于
 qw.gt("age",15);//大于
 qw.orderByDesc("age");

 int count = userMapper.selectCount(qw);
 System.out.println(count);

}

删除


@Test
void delete(){

 int row = userMapper.deleteById(27l);
 System.out.println(row);
}


@Test
void deleteBatch(){

 int row = userMapper.deleteBatchIds(Arrays.asList(67l,44l,37l,220l));
 System.out.println(row);
}

@Test
void deleteByWrapper(){

 QueryWrapper qw = new QueryWrapper<>();
 qw.gt("age",70);
 //先来看看有多少数据
 int row = userMapper.selectCount(qw);
 System.out.println(row);
 //删除
 int deleteRow = userMapper.delete(qw);
 System.out.println(deleteRow);
}

今天就到这,后续会给大家分享下mybatis-plus提供的sql性能执行分析插件、乐观锁插件以及字段的自动填充。

补充知识:Mybatis-plus 自动生成代码后xml文件和mapper映射不到的原因

报了如下错误

找了很久都没找到原因

2020-06-08 18:48:12 |ERROR |http-nio-8130-exec-3 |GlobalExceptionHandler.java:25 |service.base.handler.GlobalExceptionHandler |org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): service.used.mapper.ClassifyMapper.selectNestedListByParentId
	at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:235)
	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.(MybatisMapperMethod.java:50)
	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.lambda$cachedMapperMethod$0(MybatisMapperProxy.java:101)
	at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.cachedMapperMethod(MybatisMapperProxy.java:100)
	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:95)
	at com.sun.proxy.$Proxy98.selectNestedListByParentId(Unknown Source)
	at xyz.oneadd.platform.service.used.service.impl.ClassifyServiceImpl.nestedList(ClassifyServiceImpl.java:25)
	at xyz.oneadd.platform.service.used.service.impl.ClassifyServiceImpl$$FastClassBySpringCGLIB$$85da3417.invoke()
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:685)
	at xyz.oneadd.platform.service.used.service.impl.ClassifyServiceImpl$$EnhancerBySpringCGLIB$$3b7bb86f.nestedList()
	at xyz.oneadd.platform.service.used.controller.api.ApiClassifyController.classifyList(ApiClassifyController.java:34)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
	at org.springframework.web.servlet.frameworkServlet.processRequest(frameworkServlet.java:1006)
	at org.springframework.web.servlet.frameworkServlet.doGet(frameworkServlet.java:898)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
	at org.springframework.web.servlet.frameworkServlet.service(frameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.Authenticatorbase.invoke(Authenticatorbase.java:526)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.core.StandardEnginevalve.invoke(StandardEnginevalve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1591)
	at org.apache.tomcat.util.net.SocketProcessorbase.run(SocketProcessorbase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)

原因是pom中没有添加bulid依赖

添加依赖后解决问题


  
   
    src/main/java
    
     **/*.xml
    
    false
   
  
 

以上这篇MybatisPlus,无XML分分钟实现CRUD操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/132377.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号