MyBatis注解式开发映射语句详解
作者:@每天都要敲代码 发布时间:2023-06-07 20:31:23
前言
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的学习,敬请期待!
来源:https://blog.csdn.net/m0_61933976/article/details/128621699


猜你喜欢
- 接口:Writerablepackage com.geoway.pad.common; import java.io.DataInput;
- 前言平时我们都有用到LeakCanary来分析内存泄露的情况,这里可以来看看LeakCanary是如何实现的,它的内部又有哪些比较有意思的操
- Intellij IDEA 公司 JetBrains 推出了一种新字体:JetBrains Mono,它是专为开发人员设计的。为什么说它是专
- menu部分xml代码<?xml version="1.0" encoding="utf-8"
- [LeetCode] 144. Binary Tree Preorder Traversal 二叉树的先序遍历Given a binary
- 创蓝253: https://www.253.com/#region 获取手机验证码(创蓝253) /// <summar
- MongoDB的基本使用添加依赖<dependency>
- 1.概述当Java 8发布时,其中最令人兴奋的特性之一就是 Lambda 表达式。Lambda 表达式是一种轻量级、简洁和高效的函数式编程方
- 基于IntelliJ Platform Plugin搭建环境步骤File->New->Project选择IntelliJ Pla
- 本文实例为大家分享了Android TextView图文混合编排的具体代码,供大家参考,具体内容如下实现技术细节不难,两个要点:1、html
- 最近有由于需要,我开始接触阿里云的云市场的印刷文字识别-营业执照识别这里我加上了官网的申请说明,只要你有阿里云账号就可以用,前500次是免费
- 一、首先看下Android开发用到的sdk目录:build-tools保存着一些Android平台相关通用工具,比如adb、和aapt、ai
- 首先定义一个加在方法上的注解import java.lang.annotation.*;/** * 开启自动参数填充 */@Retentio
- 本文实例为大家分享了WPF实现轮播图切换效果的具体代码,供大家参考,具体内容如下实现效果如下:步骤:1、自定义控件MyImageContro
- J2ee 高并 * 况下 * 实例详解引言:在高并发下限制最大并发次数,在web.xml中用过滤器设置参数(最大并发数),并设置其他相关参数。
- 赛马下周一就要去做java实验了,还记得上一次实验还有一个程序没写完,匆匆交了实验报告的半成品(希望老师没发现www)。为了下周一能有更充裕
- 目录阻塞队列简介java中的阻塞队列BlockQueue中方法阻塞队列的实现原理总结阻塞队列简介阻塞队列(BlockingQueue)首先是
- Android Handler移除Message详解问题:1.removeMessage(what)函数是否只能移除对应what值的Mess
- Java虚拟机栈概述Java虚拟机栈(Java Virtual Machine Stacks)是线程私有的,它的生命周期与线程相同。虚拟机栈
- 对Java图片处理的内容涉猎不深,言辞简陋望请见谅。java实现色阶调整,即调整图片rgb分量,进而也可以调节图片亮度。测试代码public