美文网首页Spring boot Mybatis
Springboot 开发常用技术整合--笔记2-3--myba

Springboot 开发常用技术整合--笔记2-3--myba

作者: 牵手生活 | 来源:发表于2019-06-26 10:35 被阅读152次
    image.png

    官网&技术资料

    MyBatis-plus官方文档&代码生成器文档--负责人baomidou

    image.png
    MyBatis官方文档
    SpringBoot深入解析——Mybatis-plus 的集成和使用(九)

    mybatis-plus入门-慕课网

    Mybatis&JPA简单比较

    mybatis优势

    • sql语句可以自由控制、更灵活、性能较高
    • sql与代码分离,易于维护和阅读
    • 提供xml标签,支持编写动态的sql语句(主要用于可选参数上)
      mybatis劣势
    • 简单的CRUD操作还得写sql语句
    • xml中有大量的sql要维护
    • mybatis自身功能有限,但支持plugin
      Jpa优势
    • Jpa移植性能更好(JPQL)
    • 提供很多CRUD方法、开发效率高
    • 对象化程度更高

    mybatis-plus快速入门(更多参考官网文档)

    image.png

    SSM(Spring+SpringMVC+MyBatis)框架集

    image.png

    排除实体中的部分字段不在数据库中

        //transient表示字段不参与实例化过程
        private transient  String otherContent;
    #或定义static
    #或
        //exist = false :表示数据库中没有这个字段
        @TableField(exist = false)
        private   String otherContent;
    

    单元测试

    /**
     * mybatis-plus的测试
     */
    @RunWith(SpringRunner.class)  //spring环境下运行Junit测试
    @SpringBootTest  //该类可以允许居于springboot测试
    public class WechatMessageMapperTest {
        @Autowired(required = false)
        private WechatMessageMapper wechatMessageMapper;
    
        /**
         * 查找所有记录
         * MyBatis学习笔记-03.MyBatis中五种成功映射数据库字段与实体类属性不一致的解决方案
         * https://blog.csdn.net/qq_40279513/article/details/85163444
         */
        @Test
        public void testSelect() {
            System.out.println(("----- selectAll method test ------"));
            List<WechatMessage> wechatMessageList = wechatMessageMapper.selectList(null);
    
            wechatMessageList.forEach(System.out::println);
        }
    
    
        /**
         * 分页查询
         */
        @Test
        public void testSelectPages() {
    
            //PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
            QueryWrapper<WechatMessage> queryWrapper = new QueryWrapper<WechatMessage>();
            queryWrapper.like("content","低调");
            Page<WechatMessage> page = new Page<WechatMessage>(1,2);//当前页,每页的记录数
    
            IPage<WechatMessage> iPage = wechatMessageMapper.selectPage(page,queryWrapper);
    
            System.out.println("page页数:"+iPage.getPages());
    
    
    
        }
        /**
         * 根据id列表查询记录
         */
        @Test
        public void testSelectIds() {
            System.out.println(("----- selectIds method test ------"));
            List<Long> idsList =  Arrays.asList(38L,39L,40L);// new ArrayList<Long>();
            List<WechatMessage> wechatMessageList = wechatMessageMapper.selectBatchIds(idsList);
    
            wechatMessageList.forEach(System.out::println);
        }
    
        /**
         * 通过selectByMap传递参数查询
         */
        @Test
        public void testSelectByMap() {
            System.out.println(("----- selectMap method test ------"));
    
            Map<String,Object> map = new HashMap<>();
            map.put("original_wechat_id","wxid_on8oksh88zo22");  //注意key名时数据库中字段的名称
            map.put("type",43);
            List<WechatMessage> wechatMessageList = wechatMessageMapper.selectByMap(map);
    
            wechatMessageList.forEach(System.out::println);
        }
            /**
         * 条件构造器查询
         * original_wechat_id中包含%xid%
         * type<43
         * 按original_wechat_id降序排列
         * 按type升序排列
         */
        @Test
        public void testSelectByWrapper() {
            System.out.println(("----- selectWrapper method test ------"));
    
            QueryWrapper<WechatMessage> queryWrapper = new QueryWrapper<WechatMessage>();
            //或
            //QueryWrapper<WechatMessage> queryWrapper = Wrappers.<WechatMessage>query();
    
            //QueryWrapper有更多的方法哦
            queryWrapper.likeRight("original_wechat_id","wxid")
                    .lt("type",43)
                    .orderByDesc("original_wechat_id")
                    .orderByAsc("type");
    
    
    
    
            List<WechatMessage> wechatMessageList = wechatMessageMapper.selectList(queryWrapper);
    
            wechatMessageList.forEach(System.out::println);
        }
    
        /**
         * 查找记录,并插入
         */
        @Test
        public void testSelectOneAndInsert() {
            System.out.println(("----- selectOne method test ------"));
            WechatMessage wechatMessage = wechatMessageMapper.selectById(13);
            if (null != wechatMessage){
                System.out.println(("found the message"));
                System.out.println(wechatMessage);
                wechatMessage.setID(0);//设置id防止报关键字重复,让它自己采用自增方式
                wechatMessage.setStatus(1);
                wechatMessage.setImgPath("fdfdsfdfdsfdfsdfdsd");
                wechatMessage.setIsSend(1);
                int ret = wechatMessageMapper.insert(wechatMessage);
                System.out.println((ret +"====record is insert"));
                //mybatisplus会自动把当前插入对象在数据库中的id写回到该实体中
                System.out.println(wechatMessage.get_ID());
    
            }
    
    
        }
    
    
        /**
         * 查找记录,并插入
         * MyBatis-Plus updateById方法更新不了空字符串/null解决方法
         * https://blog.csdn.net/l848168/article/details/92829930
         */
        @Test
        public void testSelectOneAndUpdate() {
            System.out.println(("----- selectOne method test ------"));
            WechatMessage wechatMessage = wechatMessageMapper.selectById(13);
            if (null != wechatMessage){
                System.out.println(("found the message"));
                System.out.println(wechatMessage);
                //wechatMessage.setID(13); ////奇怪没有更新成功,主要查询出来的记录id是0 https://blog.csdn.net/qq_40279513/article/details/85163444
                wechatMessage.setStatus(1);
                wechatMessage.setImgPath("update====fdfdsfdfdsfdfsdfdsd");
                wechatMessage.setIsSend(1);
                //奇怪没有更新成功
                int ret = wechatMessageMapper.updateById(wechatMessage);
                System.out.println((ret +"====record is updated"));
    
    
            }
    
    
        }
        /**
         * 只查询几个字段,设置like条件,并且以Map的方式返回=======主要用途时不需要构造太多的实例类
         */
        @Test
        public void testSelectMaps() {
            QueryWrapper<WechatMessage> queryWrapper = new QueryWrapper<WechatMessage>();
            queryWrapper.select("original_wechat_id","type","content")
                    .like("content","低调");
    
            List<Map<String,Object>> list = wechatMessageMapper.selectMaps(queryWrapper);
            list.forEach(System.out::println);
    
        }
        /**
         * Lambda,主要时防止误写代码,其实感觉好像没什么用
         * where content like "%低调%' and type <43
         */
        @Test
        public void testSelectLambda() {
    
    
            //LambdaQueryWrapper<WechatMessage> lambdaQueryWrapper = new QueryWrapper<WechatMessage>().lambda();
            //或
            //LambdaQueryWrapper<WechatMessage> lambdaQueryWrapper = new LambdaQueryWrapper<WechatMessage>();
            //或
            LambdaQueryWrapper<WechatMessage> lambdaQueryWrapper = Wrappers.<WechatMessage>lambdaQuery();
    
            lambdaQueryWrapper.like(WechatMessage::getContent,"低调").lt(WechatMessage::getType,43);
    
            List<WechatMessage> list = wechatMessageMapper.selectList(lambdaQueryWrapper);
    
            list.forEach(System.out::println);
    
        }
    }
    
    

    更多条件构造器

    https://mp.baomidou.com/guide/wrapper.html#abstractwrapper

    image.png image.png image.png

    lambda表达式,function的应用


    image.png image.png image.png

    使用 Wrapper 自定义SQL

    image.png

    通用Service

    spring boot引入mybatis plus,使用通用mapper、service

    相关文章

      网友评论

        本文标题:Springboot 开发常用技术整合--笔记2-3--myba

        本文链接:https://www.haomeiwen.com/subject/odvqcctx.html