MyBatis注解式开发映射语句详解

 更新时间:2023年02月24日 10:35:16   作者:@每天都要敲代码  
这几年来注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以减少编写Mapper映射文件了。我们先围绕一些基本的CRUD来学习,再学习复杂映射多表操作

前言

MyBatis中也提供了注解式开发⽅式,采⽤注解可以减少Sql映射⽂件的配置。 当然,使⽤注解式开发的话,sql语句是写在java程序中的,这种⽅式也会给sql语句的维护带来成本。

官⽅是这么说的:

使⽤注解编写复杂的SQL是这样的:

@Update("<script> update table_name set grade='三年级'”+
" <if test=\ "name != null\"> , name = #{name} </if> ”+
" <if test=\ "sex != null\"> , sex = #{sex}</if>”+
" where num = #{num}</script>")
void update(Student student);

原则:简单sql可以注解,复杂sql使⽤xml!使用注解式开发以后三兄弟之一的SqlMapper.xml文件就不需要了!

1. @Insert注解

二兄弟之一CarMapper接口,用来编写方法

使用@Insert的注解方式,在注解上就可以写上SQL语句,对于SQL语句当中的变量就是pojo类Car对应的变量名

package com.bjpowernode.mybatis.mapper;
import com.bjpowernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.Insert;
public interface CarMapper {
    // 使用注解式开发,插入数据
    @Insert("insert into t_car values(null,#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType})")
    int insert(Car car);
}

二兄弟之二CarMapperTest,用来测试

package com.bjpowernode.mybatis.test;
import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
public class CarMapperTest {
    @Test
    public void testInsert(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        // 创建Car对象
        Car car = new Car(null, "666", "丰田霸道", 32.0, "2023-1-9", "燃油车");
        int count = mapper.insert(car);
        System.out.println(count);
        sqlSession.commit();
        sqlSession.close();
    }
}

执行结果:

2. @Delete注解

二兄弟之一CarMapper接口,用来编写方法

package com.bjpowernode.mybatis.mapper;
import com.bjpowernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.Insert;
public interface CarMapper {
    // 使用注解式开发,删除数据
    @Delete("delete from t_car where id = #{id}")
    int deleteById(Long id);
}

二兄弟之二CarMapperTest,用来测试

package com.bjpowernode.mybatis.test;
import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
public class CarMapperTest {
   @Test
    public void testDeleteById(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        int count = mapper.deleteById(40L);
        System.out.println(count);
        sqlSession.commit();
        sqlSession.close();
    }
}

执行结果:

3. @Update注解

二兄弟之一CarMapper接口,用来编写方法

package com.bjpowernode.mybatis.mapper;
import com.bjpowernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.Insert;
public interface CarMapper {
    // 使用注解式开发,更新数据
    @Update("update t_car set car_num=#{carNum},brand=#{brand},guide_price=#{guidePrice},produce_time=#{produceTime},car_type=#{carType} where id = #{id}")
    int update(Car car);
}

二兄弟之二CarMapperTest,用来测试

package com.bjpowernode.mybatis.test;
import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
public class CarMapperTest {
   @Test
    public void testUpdate(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        // 创建Car对象,根据id进行更新
        Car car = new Car(34L, "666", "丰田霸道", 32.0, "2023-1-9", "燃油车");
        int count = mapper.update(car);
        System.out.println(count);
        sqlSession.commit();
        sqlSession.close();
    }
}

执行结果:

4. @Select注解

二兄弟之一CarMapper接口,用来编写方法

package com.bjpowernode.mybatis.mapper;
import com.bjpowernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.Insert;
public interface CarMapper {
    // 使用注解式开发,查询数据
    @Select("select * from t_car where id = #{id}")
    Car selectById(Long id);
}

二兄弟之二CarMapperTest,用来测试

package com.bjpowernode.mybatis.test;
import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
public class CarMapperTest {
   @Test
    public void testSelectById(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        Car car = mapper.selectById(41L);
        System.out.println(car);
        sqlSession.close();
    }
}

执行结果:

5. @Results注解

我们知道数据库表中的字段和pojo类的属性名有的是不一样的,我们之所以能够完整的查出数据,是因为在核心配置文件mybatis-config.xml当中配置了:启用驼峰命名⾃动映射

    <!--启⽤驼峰命名⾃动映射-->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

如果我们不启用,不对应的字段就是null,查询的数据如下:

那还有什么办法呢?还可以使用@Results注解!

注:从这里也能看出,使用注解的方式开发,对于简单点的SQL还行,对于稍微复杂的查询语句就太麻烦了!

package com.bjpowernode.mybatis.mapper;
import com.bjpowernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.*;
public interface CarMapper {
    // 使用注解式开发,查询数据
    @Select("select * from t_car where id = #{id}")
    @Results({
            @Result(property = "id",column = "id"),
            @Result(property = "carNum",column = "car_num"),
            @Result(property = "brand",column = "brand"),
            @Result(property = "guidePrice",column = "guide_price"),
            @Result(property = "produceTime",column = "produce_time"),
            @Result(property = "carType",column = "car_type"),
    })
    Car selectById(Long id);
}

这样计算我们不启用驼峰命名⾃动映射,也能正常查询数据

结语:直到今天MyBatis的学习就完美撒花了,接下来就开始Spring的学习,敬请期待!

到此这篇关于MyBatis注解式开发映射语句详解的文章就介绍到这了,更多相关MyBatis注解式开发内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring-cloud Feign 的深入理解

    Spring-cloud Feign 的深入理解

    这篇文章主要介绍了Spring-cloud Feign 的深入理解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • JAVA简单链接Oracle数据库 注册和登陆功能的实现代码

    JAVA简单链接Oracle数据库 注册和登陆功能的实现代码

    这篇文章主要介绍了JAVA链接Oracle并实现注册与登录功能的代码实例,有需要的朋友可以参考一下
    2014-01-01
  • Java并发内存模型详情

    Java并发内存模型详情

    这篇文章主要介绍了Java并发内存模型,Java是一门支持多线程执行的语言,要编写正确的并发程序,了解Java内存模型是重要前提。而了解硬件内存模型有助于理解程序的执行,下面文章就来看看详细内容吧
    2021-10-10
  • Centos 7 安装 OpenJDK 11 两种方式及问题小结

    Centos 7 安装 OpenJDK 11 两种方式及问题小结

    这篇文章主要介绍了Centos 7 安装 OpenJDK 11 两种方式,第一种方式使用yum安装,第二种方式使用tar解压安装,每种方法给大家介绍的非常详细,需要的朋友可以参考下
    2021-09-09
  • 探索Java中private方法添加@Transactional事务未生效原因

    探索Java中private方法添加@Transactional事务未生效原因

    你又遇到过明明给private方法添加了@Transactional但是事务依然没有生效的情况吗,具体原因本篇文章将详细告诉你,有需要的朋友跟着小编往下看吧
    2021-11-11
  • Java 天生就是多线程

    Java 天生就是多线程

    这篇文章主要介绍了Java天生就是多线程,程序天生就是多线程程序,因为执行main()方法的是一个名称为main的线程,更多相关内容需要的小伙伴可以参考一下
    2022-07-07
  • Java程序员应该遵守的10条纪律

    Java程序员应该遵守的10条纪律

    Java程序员有许多应遵循的守则或最佳实践方式。本文概述了每个开发者最应该遵循的10条守则或戒律,如果不遵循它们,将会导致灾难性后果。
    2015-09-09
  • Java SpringMVC拦截器与异常处理机制详解分析

    Java SpringMVC拦截器与异常处理机制详解分析

    SpringMVC是一种基于Java,实现了Web MVC设计模式,请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦。基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,SpringMVC也是要简化我们日常Web开发
    2021-10-10
  • mybatis分页及模糊查询功能实现

    mybatis分页及模糊查询功能实现

    这篇文章主要为大家详细为大家详细介绍了mybatis实现分页及模糊查询功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Java实现树形菜单的方法总结

    Java实现树形菜单的方法总结

    当我们想要展示层级结构,如文件目录、组织结构或分类目录时,树形菜单是一个直观且有效的解决方案,本文为大家整理了java中几种常见方法,希望对大家有所帮助
    2023-08-08

最新评论