MybatisPlus,无XML分分钟实现CRUD操作
不讲太多理论知识,官网都有,直接上手。
1.测试表
DROPTABLEIFEXISTS`user`; CREATETABLE`user`( `id`bigint(20)UNSIGNEDNOTNULL, `name`varchar(128)CHARACTERSETutf8COLLATEutf8_general_ciDEFAULTNULLCOMMENT'用户名', `password`varchar(18)CHARACTERSETutf8COLLATEutf8_general_ciDEFAULTNULLCOMMENT'密码', `age`int(4)DEFAULTNULLCOMMENT'年龄', `create_time`datetime(0)DEFAULTNULLCOMMENT'创建时间', `update_time`datetime(0)DEFAULTNULLCOMMENT'更新时间', PRIMARYKEY(`id`)USINGBTREE )ENGINE=InnoDBCHARACTERSET=utf8COLLATE=utf8_general_ciROW_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/*.xml #configuration: #map-underscore-to-camel-case:true
其实简单的crud甚至不需要mybatis-plus的配置,我这里没删除,本文也并没有用到配置文件。
实体类
publicclassUser{ privateLongid; privateStringname; privateStringpassword; privateintage; privateDatecreateTime; privateDateupdateTime; ... getter&&setter ... toString() }
分页插件
@Configuration publicclassMyBtaisPlusConfig{ /** *分页插件 *@return */ @Bean publicPaginationInterceptorpaginationInterceptor(){ System.out.println("加载分页插件"); returnnewPaginationInterceptor(); } }
编写一个我们的接口
@Component publicinterfaceUserDaoextendsBaseMapper{ IntegerdeleteById(Longid); }
接下来就可以愉快的测试了,在我们的测试类里先注入dao
@Autowired
privateUserDaouserMapper;
新增测试
/** *新增 */ @Test voidsave(){ Useru=newUser(); u.setAge(100); u.setName("测试数据3"); u.setPassword("cjx1111"); u.setAge(25); introw=userMapper.insert(u); System.out.println(row); }
是不是很简单?只需要这样就可以完成新增了,既然有单个插入,那少不了也有批量插入
批量新增测试
/** *批量插入 */ @Test voidsave(){ Listus=newLinkedList (); for(inti=0;i<50;i++){ Useru=newUser(); u.setName("测试数据"+i); u.setAge((int)(Math.random()*90+10)); u.setPassword("mima"+i); us.add(u); } userService.saveBatch(us); }
其中用到了userService,我这里贴一下代码,需要我们接口继承Iservice,实现类继承ServiceImple
publicinterfaceIUserServiceextendsIService
{ }
实现类
@ServicepublicclassUserServiceImplextendsServiceImpl
implementsIUserService{ }
修改
/** *修改 */ @Test voidupdateById(){ Useru=newUser(); //修改name u.setId(1L); u.setName("修改下数据--"); u.setPassword("123"); u.setAge(99); introw=userMapper.updateById(u); System.out.println(row); }
/** *通过id查询 */ @Test voidselectById(){ //1.通过id来查询 Useru=userMapper.selectById(1l); System.out.println(u); }
mybatis-plus有个特别好用的就是它的条件构造器,可以帮助我们构造常用的sql,具体用法我会贴在文章最后面。
/** *通过条件构造器查询 */ @Test voidselectByWrapper(){ //3.通过条件构造器wrapper QueryWrapperqw=newQueryWrapper(); qw.like("name","测试"); qw.lt("age",50);//小于 qw.gt("age",15);//大于 Listus=userMapper.selectList(qw); us.stream().forEach(System.out::println); }
既然有查询,自然少不了我们最关心的分页
/** *通过条件构造器和page分页查询 */ @Test voidselectByWrapperAndPage(){ //4.通过条件构造器wrapper和Page分页查询 QueryWrapperqw=newQueryWrapper(); qw.like("name","测试"); qw.lt("age",50);//小于 qw.gt("age",15);//大于 qw.orderByDesc("age"); IPageresult=userMapper.selectPage(newPage<>(2,10),qw);
/** *查询总记录数 */ @Test voidselectCount(){ //5.通过条件查询总条数 QueryWrapperqw=newQueryWrapper(); qw.like("name","测试"); qw.lt("age",50);//小于 qw.gt("age",15);//大于 qw.orderByDesc("age"); intcount=userMapper.selectCount(qw); System.out.println(count); }
删除
/** *通过id删除 */ @Test voiddelete(){ introw=userMapper.deleteById(27l); System.out.println(row); }
/** *通过id批量删除 */ @Test voiddeleteBatch(){ introw=userMapper.deleteBatchIds(Arrays.asList(67l,44l,37l,220l)); System.out.println(row); }
/** *通过条件删除 */ @Test voiddeleteByWrapper(){ QueryWrapperqw=newQueryWrapper<>(); qw.gt("age",70); //先来看看有多少数据 introw=userMapper.selectCount(qw); System.out.println(row); //删除 intdeleteRow=userMapper.delete(qw); System.out.println(deleteRow); }
今天就到这,后续会给大家分享下mybatis-plus提供的sql性能执行分析插件、乐观锁插件以及字段的自动填充。
补充知识:Mybatis-plus自动生成代码后xml文件和mapper映射不到的原因
报了如下错误
找了很久都没找到原因
2020-06-0818:48:12|ERROR|http-nio-8130-exec-3|GlobalExceptionHandler.java:25|service.base.handler.GlobalExceptionHandler|org.apache.ibatis.binding.BindingException:Invalidboundstatement(notfound):service.used.mapper.ClassifyMapper.selectNestedListByParentId atorg.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:235) atcom.baomidou.mybatisplus.core.override.MybatisMapperMethod. (MybatisMapperMethod.java:50) atcom.baomidou.mybatisplus.core.override.MybatisMapperProxy.lambda$cachedMapperMethod$0(MybatisMapperProxy.java:101) atjava.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) atcom.baomidou.mybatisplus.core.override.MybatisMapperProxy.cachedMapperMethod(MybatisMapperProxy.java:100) atcom.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:95) atcom.sun.proxy.$Proxy98.selectNestedListByParentId(UnknownSource) atxyz.oneadd.platform.service.used.service.impl.ClassifyServiceImpl.nestedList(ClassifyServiceImpl.java:25) atxyz.oneadd.platform.service.used.service.impl.ClassifyServiceImpl$$FastClassBySpringCGLIB$$85da3417.invoke( ) atorg.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) atorg.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:685) atxyz.oneadd.platform.service.used.service.impl.ClassifyServiceImpl$$EnhancerBySpringCGLIB$$3b7bb86f.nestedList( ) atxyz.oneadd.platform.service.used.controller.api.ApiClassifyController.classifyList(ApiClassifyController.java:34) atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod) atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) atjava.lang.reflect.Method.invoke(Method.java:498) atorg.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) atorg.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) atorg.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888) atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) atorg.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) atorg.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) atorg.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) atorg.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) atorg.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) atjavax.servlet.http.HttpServlet.service(HttpServlet.java:634) atorg.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) atjavax.servlet.http.HttpServlet.service(HttpServlet.java:741) atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) atorg.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) atorg.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) atorg.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) atorg.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) atorg.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526) atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) atorg.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367) atorg.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) atorg.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) atorg.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1591) atorg.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) atorg.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) atjava.lang.Thread.run(Thread.java:748)
原因是pom中没有添加bulid依赖
添加依赖后解决问题
src/main/java **/*.xml false
以上这篇MybatisPlus,无XML分分钟实现CRUD操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。