- [ MyBatis ]

十三,MyBatis注解开发

2021-01-13  本文已影响0人  好多可乐

Mybatis注解:

含义:把原来放在xml中的配置信息和sql语句放在程序中书写,实现功能都是一样的

优点:有更好的开发体验,让程序开发的更快

在这里插入图片描述
使用:

一,查询

  1. 创建注解接口
 public interface GoodsDAO { 
   // 传入的sql和之前在xml文件里配置的一致即可  
     @Select("select * from t_goods where current_price between #{min} and #{max} order by current_price #{limt}")  
   // 因为不能自动判断上面的参数和下面哪个参数相对应,所以需要手动配置    
   public List<Goods> selectByPriceRange(@Param("min") float max, @Param("max") 
   float min,@Param("limt") float limt);}
  1. 在mybatis-config.xml文件新增对应说明
   <!--两种配置方式,二选一即可。-->
    <!--推荐使用第二种,因为随着工程越来越大,配置信息也越来越多,不便维护。
    如果使用包的话,就只用写这一行,mybatis加载时候会对整个包进行扫描,极大简化了配置-->
<mappers>
    <!--<mapper class="com.imooc.mybatis.dao.GoodsDAO"/>-->
    <package name="com.imooc.mybatis.dao"/>
</mappers>
  1. 测试
@Test
public void testSelectByPriceRange() throws Exception {
    SqlSession sqlSession = null;
    try {
        sqlSession = MyBatisUtils.openSession();
        // goodsDAO虽然是接口,但是运行的时候session会根据其配置信息动态生成其实现类
        GoodsDAO goodsDAO = sqlSession.getMapper(GoodsDAO.class);
        // 进行查询
        List<Goods> goods = goodsDAO.selectByPriceRange(20f, 10f, 20);
        System.out.println(goods.size());
    } catch (Exception e) {
        throw e;
    } finally {
        MyBatisUtils.closeSession(sqlSession);
    }
}

二,新增

  1. 创建注解接口
   // 插入
    @Insert("insert into t_goods(title, sub_title, original_cost, current_price, discount, is_free_delivery, category_id)" +
            "values(#{title},#{subTitle},#{originalCost},#{currentPrice},#{discount},#{isFreeDelivery},#{categoryId})")
    @SelectKey(statement = "select last_insert_id()",before = false, resultType = Integer.class,keyProperty = "goodsId")
    public int insert(Goods goods);
  1. 在mybatis-config.xml文件新增对应说明
 <!--两种配置方式,二选一即可。-->
    <!--推荐使用第二种,因为随着工程越来越大,配置信息也越来越多,不便维护。
    如果使用包的话,就只用写这一行,mybatis加载时候会对整个包进行扫描,极大简化了配置-->
<mappers>
    <!--<mapper class="com.imooc.mybatis.dao.GoodsDAO"/>-->
    <package name="com.imooc.mybatis.dao"/>
</mappers>
  1. 测试
@Test
    public void testInsert() throws Exception {
        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtils.openSession();
            Goods goods = new Goods();
            goods.setTitle("t1");
            goods.setSubTitle("t2");
            goods.setCategoryId(12);
            goods.setCurrentPrice(200f);
            goods.setDiscount(20f);
            goods.setIsFreeDelivery(1);
            goods.setOriginalCost(201f);
            GoodsDAO goodsDAO = sqlSession.getMapper(GoodsDAO.class);
            goodsDAO.insert(goods);
            sqlSession.commit();
        } catch (Exception e) {
            if (sqlSession != null) {
                sqlSession.rollback();
            }
            throw e;
        } finally {
            MyBatisUtils.closeSession(sqlSession);
        }
    }

三,实现结果映射

  1. 创建注解接口
    @Select("select * from t_goods")
    // 相当于xml的resultMap
    @Results(
          {
              // 相当于<id> ,里面的id字段表示是否是主键id
              // dto里有什么参数,这里就传入什么
              @Result(column = "goods_id", property = "goodsId", id = true),
              @Result(column = "title", property = "title"),
              @Result(column = "current_price", property = "currentPrice")
          }
    )
    public List<GoodsDTO> selectAll();
}

  1. 在mybatis-config.xml文件新增对应说明
 <!--两种配置方式,二选一即可。-->
    <!--推荐使用第二种,因为随着工程越来越大,配置信息也越来越多,不便维护。
    如果使用包的话,就只用写这一行,mybatis加载时候会对整个包进行扫描,极大简化了配置-->
<mappers>
    <!--<mapper class="com.imooc.mybatis.dao.GoodsDAO"/>-->
    <package name="com.imooc.mybatis.dao"/>
</mappers>
  1. 测试
 @Test
    public void testSelectAll() throws Exception {
        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtils.openSession();
            GoodsDAO goodsDAO = sqlSession.getMapper(GoodsDAO.class);
            List<GoodsDTO> list = goodsDAO.selectAll();
            System.out.println(list.size());
            sqlSession.commit();
        } catch (Exception e) {
            if (sqlSession != null) {
                sqlSession.rollback();
            }
            throw e;
        } finally {
            MyBatisUtils.closeSession(sqlSession);
        }
    }

总结:

  1. xml有更好的维护性,可以在xml种对sql进行灵活修改。利用注解有更好的程序编码体验,直接调整代码即可。
  2. xml项目适合大型团队合作项目,注解更适合小型敏捷开发。
上一篇下一篇

猜你喜欢

热点阅读