MyBatis

                              MyBatis

MyBatis 持久层的半自动的框架 (需要自己写Sql) 也是 ORM的一种实现  

  

Mybatis的基本构成:

1)         SqlSessionFactoryBuilder(构造器),根据配置信息或代码来生成SqlSessionFactory(工厂接口)

2)         SqlSessionFactory:来生成SqlSession

3)         SqlSession:执行SQL并返回结果

4)    SQLMapper:由一个Java类和XML(或注解)构成

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2)配置文件
  a)核心配置文件
    1)<environment>
      a)<transactionManager>:事务管理器
      b)<dataSource>
        1)数据源
        2)type:连接池
      c)Mapper文件的路径

  


  b)映射文件
    1)<mapper>
      a)namespace:接口的全类名
      b)<select>
        1)id:是方法名称
        2)resultType:方法的返回类型
        3)resultMap:<resultMap>节点的id
        4)parameterType:方法形参的类型
      c)<resultMap>
        1)type:返回的类型
        2)id:唯一标识
        3)<id>:id属性就用id标签修饰
          a)column:表中的字段名称
          b)property:对象中的属性名称
        4)<result>:其他属性就用<result>标签修饰

 

 

在这个映射文件里面写相关借口中方法的Sql语句的查询  id 与对应的方法名保持一致 

----------------------------------------------------------------------------------------------------------------

  如果是一对多该如何配置?  

    利用 <resultMap进行关系映射>

        其中包括两种 

          对一 (一对一 多对一) association 

          

          对多(一对多  多对多) collection

            

 注解实现映射器  首先配置里面 映射方式改为注解实现的 

    

接口的方法前面加上注解   

------------------------------------------------------------------------------------------------------------------------------------------------

myBatis的三种调用方式 

    1.基于xml

      老方式

        

      通过映射器创建代理

        

    2.基于注解

      

------------------------------------------------------------------------------------------------------------------------------------------------------------

封装工具类

    

 调用

    

    简单的增删改查

      接口

        

XML 配置

        

 测试类

      

--------------------------------------------------------------------------------------------------------------------------------------------------------------

  设置别名 将实体类或者一个包小面的所有实体类进行别名设置以便 Xml 里面简化书写  

      给包设置别名 <package   name=包的路径>--默认别名为 类名首字母小写  更改则在对应的实体类上面加上@Alisa注解修改

      给具体的实体类设置别名 <typeAlias type="路径" alisa=“别名”>

      

 -------------------------------------------------------------------------------------------------

插入数据之后的主键回填 

    只需要在对应插入的SQL标签上添加 useGeneratedKeys--开启主键回填  keyProperty--逐渐回填的属性

      但是这样接收到的返回值还是影响的行数所以设置 keyProperty 就是逐渐回填的位置 只需要在返回的结果上调用这个属性就可以获得值了

      如果传递过来的是一个Map集合则逐渐回填的位置则是自动添加一个Key为 逐渐回填的属性的这列通过 Valu就可获得值 了

    

--------------------------------------------------------------------------------------------------------------------------------

 MyBatis中$和#d的区别

    都是获得方法中的参数  

    不同的是  # 是将方法的参数当作占位符来进行赋值 不会出现SQL注入的问题

        $ 是直接将参数拼接到Sql语句中 容易出现Sql注入的问题  但是可以用它来解决动态Sql的问题 

--------------------------------------------------------------------------------------------------------------------------------------------

   动态Sql

      1)<sql>:把共用的显示字段抽取出来

        

      2)<if>:判断,字符串要判断两种情况

            


      3)<set>:自动添加set关键字,去掉多余的逗号

          


      4)<where>:自动添加where关键字,去掉多余的and

            


      5)<trim>:前缀,后缀。。。,可以代替<set>和<where>

                代替WHERE

          

      代替 set

          


      6)<choose>:if..else

        


      7)<foreach>:遍历集合

         

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.MyBatis缓存
      1)一级缓存:SqlSession级别,默认开启的
      2)二级缓存:基于接口(Mapper)级别的,默认是关闭的
        a)开启二级缓存
          1)<cache>
            a)size:设置缓存的对象数量
            b)flushInterval:多久刷新一次缓存
            c)eviction:缓存清空的策略
            d)readOnly:是否只读
              1)true:从二级缓存中获取到的是真实对象
              2)false:从二级缓存中获取到的是真实对象的副本
          2)更新节点有flushCache
            a)执行完更新操作后是否要清空缓存,默认是true
          3)查询节点有useCache:
            a)是否缓存该sql语句查询的结果,默认是true

  

-----------------------------------------------------------------------------------------------------------------------------------------------

1.MyBatis和Spring整合
      1)导入jar各自的jar把及配置文件
          a)导入MyBatiw-spring.jar
      2)配置(Spring的配置为文件)
          a)数据源
          b)MyBatis整合SpringBean
            1)SqlSessionFactoryBean(SqlSessionFactory)
                a)数据源
                b)核心配文件
          c)Mapper文件
          d)别名

      

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.Spring对Dao层的支持

   A.创建实现类的方式 

    a)dao层支持继承SqlSessionDaoSupport或者SqlSessionTemplate
      1)注入要SQLSessionFactory
    b)父类中提供了getSqlSession()方法

     

 B.不创建实现类的方式

   1.dao层自动创建代理类

      1)org.mybatis.spring.mapper.MapperScannerConfigurer(Spring)
          a)dao层接口的包名
          b)sqlSessionFactoryBean的名称

      

--------------------------------------------------------------------------------------------------------------------------------------------------------------

分页插件 

  1.mybatis 配置分页插件

      

  2.dao层只需要查询所有数据即可

  3.service 层 这里要把 pageinfo 返回出去  里面携带了查询的结果

          getPageNum 当前页

          getPageSize 每页显示的条数

          getPages 总页数

          getTotal 总条数

          getList  数据

    

    controller 层 

      

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

完整的整合 ssm

    1.mybatis

      1.核心文件中 配置分页插件即可

          

      2.映射文件中的配置按照需求配置

          

    2.Spring 配置

     1.开启包扫描

        

     2.加载属性文件 

        

     3.数据源

        

     4.Spring 整合 MyBatis    

          

        1.数据源 

          

        2.映射文件

          

        3.MyBatis的核心配置

            

        4.设置别名

          

 

        5.事务管理器

          

        6.事务的策略

        

        7.设置AOP

      

     8.自动创建Dao的实现代理类

          

  SpringMVC配置文件 

      1.开启注解驱动 

        

      2.开启包扫描

        

      3.配置视图解析器

          

      4.静态资源忽略

         

     web.xml配置

      1. 编码过滤器

        

      2.设置自动启动spring文件

        

      3.设置SpringMvc的入口

          

原文地址:https://www.cnblogs.com/justzgl/p/9698691.html