美文网首页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