使用注解开发,可以减少Mapper映射文件的编写。
 
 
一、mybatis常用注解
@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以与@Result 一起使用,封装多个结果集
@ResultMap:实现引用@Results 定义的封装
@One:实现一对一结果集封装
@Many:实现一对多结果集封装
@SelectProvider: 实现动态 SQL 映射
@CacheNamespace:实现注解二级缓存的使用
使⽤注解编写复杂的SQL是这样的:

原则:简单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注解指定映射关系,Results注解就等同于结果映射ResultMap!
注:@Results注解必须与@Select查询同方法在一起,不可以单独定义@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);
}这样计算我们不启用驼峰命名⾃动映射,也能正常查询数据
 




![[C++项目] Boost文档 站内搜索引擎(2): 文档文本解析模块parser的实现、如何对文档文件去标签、如何获取文档标题...](https://img-blog.csdnimg.cn/img_convert/24454c95a8284b7e03e5d601bd55286e.gif)














