飞道的博客

【MyBatis】| MyBatis的注解式开发

345人阅读  评论(0)

目录

一:MyBatis的注解式开发

1.  @Insert注解

2.  @Delete注解

3.  @Update注解

4.  @Select注解

5.  @Results注解


一:MyBatis的注解式开发

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

官⽅是这么说的:

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

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

1.  @Insert注解

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

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


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

二兄弟之二CarMapperTest,用来测试


  
  1. package com.bjpowernode.mybatis.test;
  2. import com.bjpowernode.mybatis.mapper.CarMapper;
  3. import com.bjpowernode.mybatis.pojo.Car;
  4. import com.bjpowernode.mybatis.utils.SqlSessionUtil;
  5. import org.apache.ibatis.session.SqlSession;
  6. import org.junit.Test;
  7. public class CarMapperTest {
  8. @Test
  9. public void testInsert (){
  10. SqlSession sqlSession = SqlSessionUtil.openSession();
  11. CarMapper mapper = sqlSession.getMapper(CarMapper.class);
  12. // 创建Car对象
  13. Car car = new Car( null, "666", "丰田霸道", 32.0, "2023-1-9", "燃油车");
  14. int count = mapper.insert(car);
  15. System.out.println(count);
  16. sqlSession.commit();
  17. sqlSession.close();
  18. }
  19. }

执行结果:

2.  @Delete注解

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


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

二兄弟之二CarMapperTest,用来测试


  
  1. package com.bjpowernode.mybatis.test;
  2. import com.bjpowernode.mybatis.mapper.CarMapper;
  3. import com.bjpowernode.mybatis.pojo.Car;
  4. import com.bjpowernode.mybatis.utils.SqlSessionUtil;
  5. import org.apache.ibatis.session.SqlSession;
  6. import org.junit.Test;
  7. public class CarMapperTest {
  8. @Test
  9. public void testDeleteById (){
  10. SqlSession sqlSession = SqlSessionUtil.openSession();
  11. CarMapper mapper = sqlSession.getMapper(CarMapper.class);
  12. int count = mapper.deleteById( 40L);
  13. System.out.println(count);
  14. sqlSession.commit();
  15. sqlSession.close();
  16. }
  17. }

执行结果:

3.  @Update注解

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


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

二兄弟之二CarMapperTest,用来测试


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

执行结果:

4.  @Select注解

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


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

二兄弟之二CarMapperTest,用来测试


  
  1. package com.bjpowernode.mybatis.test;
  2. import com.bjpowernode.mybatis.mapper.CarMapper;
  3. import com.bjpowernode.mybatis.pojo.Car;
  4. import com.bjpowernode.mybatis.utils.SqlSessionUtil;
  5. import org.apache.ibatis.session.SqlSession;
  6. import org.junit.Test;
  7. public class CarMapperTest {
  8. @Test
  9. public void testSelectById (){
  10. SqlSession sqlSession = SqlSessionUtil.openSession();
  11. CarMapper mapper = sqlSession.getMapper(CarMapper.class);
  12. Car car = mapper.selectById( 41L);
  13. System.out.println(car);
  14. sqlSession.close();
  15. }
  16. }

执行结果:

5.  @Results注解

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


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

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

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

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


  
  1. package com.bjpowernode.mybatis.mapper;
  2. import com.bjpowernode.mybatis.pojo.Car;
  3. import org.apache.ibatis.annotations.*;
  4. public interface CarMapper {
  5. // 使用注解式开发,查询数据
  6. @Select("select * from t_car where id = #{id}")
  7. @Results({
  8. @Result(property = "id",column = "id"),
  9. @Result(property = "carNum",column = "car_num"),
  10. @Result(property = "brand",column = "brand"),
  11. @Result(property = "guidePrice",column = "guide_price"),
  12. @Result(property = "produceTime",column = "produce_time"),
  13. @Result(property = "carType",column = "car_type"),
  14. })
  15. Car selectById (Long id);
  16. }

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

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


转载:https://blog.csdn.net/m0_61933976/article/details/128621699
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场