mybatis学习笔记

1.输入映射和输出映射
    .输入映射:
    parameterType:指定输入参数类型可以简单类型、pojo、hashmap。
    对于综合查询,建议parameterType使用包装的pojo,有利于系统 扩展。

    .输出映射:
    resultType:查询到的列名和resultType指定的pojo的属性名一致,才能映射成功。
    reusltMap:可以通过resultMap 完成一些高级映射。如果查询到的列名和映射的pojo的属性名不一致时,通过resultMap设置列名和属性名之间的对应关系(映射关系)。可以完成映射。 
        .高级映射: 单个对象还是一个列表,在mapper.xml中resultType指定的类型是一样的。
            将关联查询的列映射到一个pojo属性中。(一对一) 
            将关联查询的列映射到一个List中。(一对多)
        .association:用于映射关联查询单个对象的信息(一对一)
            property:要将关联查询的用户信息映射到Orders中哪个属性
            <association property="user"  javaType="com.iot.mybatis.po.User"></association>
        .collection:对关联查询到多条记录映射到集合对象中(一对多)
            property:将关联查询到多条记录映射到com.iot.mybatis.po.Orders哪个属性
            ofType:指定映射到list集合属性中pojo的类型
            <collection property="orderdetails" ofType="com.iot.mybatis.po.Orderdetail"></collection>


2.parameterType
    #{}标示一个占位符,
     #{value}其中value表示接收输入参数的名称,如果输入参数是简单类型,那么#{}中的值可以任意。

    ${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。
        使用${}拼接sql,引起 sql注入
        ${value}:接收输入参数的内容,如果传入类型是简单类型,${}中只能使用value

3.没有接口文件的写法
 .得到配置文件流
 InputStream inputStream = Resources.getResourceAsStream(resource);
 .创建会话工厂,传入mybatis的配置文件信息
 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 .通过工厂得到SqlSession,并打开
 SqlSession sqlSession = sqlSessionFactory.openSession();
 .执行mapper文件中的sql
 List<Person> list = sqlSession.selectList("test.queryByName", "冀");
 .关闭SqlSession
 sqlSession.close();

4.mybatis和hibernate本质区别和应用场景
 .hibernate
    是一个标准ORM框架(对象关系映射)。入门门槛较高的,不需要程序写sql,sql语句自动生成了。对sql语句进行优化、修改比较困难的。
    应用场景:适用与需求变化不多的中小型项目,比如:后台管理系统,erp、orm、oa。。
 .mybatis
专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全的ORM框架,虽然程序员自己写sql,mybatis也可以实现映射(输入映射、输出映射)。
应用场景:适用与需求变化较多的项目,比如:互联网项目。

5.mapper代理方法 开发规范
 mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。
 .在mapper.xml中namespace等于mapper接口地址
 .mapper.java接口中的方法名和mapper.xml中statement的id一致
 .mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致。
 .mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。

 存在的不足:mapper接口方法参数只能有一个是否影响系统开发,可以使用包装器

 6.动态sql
  .if判断
    <if test="userCustom!=null"></if>
  .应用sql片段
   <include refid="query_user_where"></include>
  .循环foreach标签
   <foreach collection="ids" item="user_id" open="and id IN(" close=")" separator=","></foreach>

 7.延迟加载 
  在需要的时候去执行

 8.缓存
  .一级缓存 SqlSession级别的缓存
   mybatis默认支持一级缓存,不需要在配置文件去配置。
  .二级缓存 mapper级别的缓存, 二级缓存是跨SqlSession的。
   默认情况是true,即该sql使用二级缓存
 
 9.布式缓存框架:ehcache

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值