二十一、mybatis学习

1、学习口诀:sqlmapconfig--连接池--mapper.xml(后期通过spring托管ioc)

                  解释:sqlmapconfig--a\连接池(与数据库相连)(附加db.poperties属性文件)--b\mapper.xml(别名typealias)

 

2、mabatis当中:#{}表示占位符,通过它可以实现preparedstatement(mapper)向占位符中注入值,并自动实现java向jdbc的类型转换,#{}可以接收简单类型或者是pojo类型的值,当传入的parametertype为简单类型时,#{}可以时value值也可以是其他类型(对于简单类型来说,它只是用来占位的)

   

                           ${}表示拼接sql,通过它可以实现preparedstatement(mapper)向sql语言中拼接加入值,不进行java向jdbc的类型转换#{}可以接收简单类型或者是pojo类型的值,当传入的parametertype为简单类型时,${}只可以是value值(对于简单类型来说,它是用来拼接的)  注意:既然是拼接,那么加入的其他东西也算数,比如说“%${value}%”,新加入东西之后,表示为"%zhangsan%",这样在输入的时候只输入zhangsan就行了

 

3、mabatis的sqlmapconfig首先链接了数据库,其次通过调用<mappers>来链接了dao层,也就是从java处来的sql语句

      在编辑sqlmapconfig的时候,编辑出现错误(Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: org.xml.sax.SAXParseException; lineNumber: 30; columnNumber: 17; 元素类型为 "configuration" 的内容必须匹配 "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?,databaseI),执行之后不成功,并报了上面的错误,这是因为:mybatis的配置文件显然是有顺序并且个数是有限定的,‘?’表示可以没有但是最多只能有一个,顺序应该按照上面报出来的编辑,否则编译失败

 

4、使用mybatis时在,mapper.xml中使用了where if标签,报错的解决方案

Spring+Mybatis框架

mapper.xml中用到了<where><if>标签判断,出现了上述错误

复制代码

<select id = "getOrderByCompany" resultType="com.chinamobile.sias.workorder.po.Workorder">
        select * from t_view_workorder
        <where>
            <if test="company != '全国'">
                wo_company = #{company}
            </if>
        </where>
</select>

复制代码

mapper.java中代码如下

List<Workorder> getOrderByCompany(String company);

解决方法

在参数前加@Param标签(在mapper.java中使用param表示将company参数在mapper.xml中映射表示为

 

List<Workorder> getOrderByCompany(@Param("company")String company);

 

            

            整理方案:SqlMapConfig.xml配置文件详解  

 

 1、Properties属性

  Properties属性用来加载属性配置文件。

 <!--
        加载属性文件
        resource:属性文件的相对路径
        url:属性文件的绝对路径
     -->
    <properties resource="config/db.properties">
        <!--
            配置一些属性
            name:属性的名称
            value:属性的值
        -->
        <!--<property name="" value="" /> -->
    </properties>

  properties特性:
   Mybatis将按照下面的属性来加载属性:
   1. 首先会读取在property标签中定义的属性。
   2. 然后会读取在properties标签中通过resource或url加载时的属性,它会覆盖已读取得同名属性。
   3. 最后会读取sql中parameterType传递过来的属性,它会覆盖已读取的同名属性。

  2、settings全局参数配置

  Mybatis框架在运行时可以调整一些运行参数,比如:开启二级缓存、开启延迟加载等。这些参数
要通过settings标签来配置,全局参数会影响Mybatis的运行行为,配置一定要注意。

 <!--全局参数配置-->
    <settings >
            <!--
                name:属性名称
                value:属性的值
            -->
        <setting name="" value=""/>
    </settings>

  常用的全局配置参数如下:


 

 3、typeAlia

  在映射文件中的parameterType和resultType属性中要指定输入、输出映射类型,如果类型为PO,要指定PO类的全路径这样不是特别方便,可以使用typeAlias定义一些别名,来方便开发。

<!--定义别名-->
    <typeAliases>
        <!--
            type:需要起别名的字符串
            alias:对应的别名
        -->
        <typeAlias type="" alias="" />
        
        <!--
            name:包名,会对包下面的类进行扫描,自动批量设置别名,
                设置的别名为类名,首字母大小写均可
        -->
        <package name="" />
       
    </typeAliases>

  Mybatis的默认别名

 

 4、typeHandlers(类型处理器)

  Mybatis中通过typeHandlers完成jdbc类型和Java类型的装换。通常情况下,Mybatis提供的类型处理器满足日常需要,不需要我们再自定义。

<typeHandlers>
        <typeHandler handler="" jdbcType="" javaType="" />
    </typeHandlers>

  Mybatis默认支持的数据类型

5、environments 环境

<!--
        环境配置
        在和Spring整合后改配置将废除
    -->
    <environments default="development">

        <environment id="development">
            <!--使用JDBC的事务管理,事务管理交给Mybatis-->
            <transactionManager type="JDBC"></transactionManager>
            <!--数据库连接池,有Mybatis管理-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
</environments>

 6、mapper 加载映射文件

  加载映射文件有三种方式
  1、加载单个映射文件

 <!--引入mapper-->
    <mappers>
        <!--rerource:引入映射文件相对于classpath的地址-->
        <mapper resource="config/sqlmap/userMapper.xml" />
    </mappers>

  2、通过Mapper接口加载单个映射文件
  前提条件:
   (1). 使用Mapper代理的方式进行开发。
   (2). Mapper接口文件名要和映射文件名一致
   (3).Mapper接口文件和映射文件在同一个目录下

   <!--引入mapper-->
    <mappers>
        
        <mapper class="com.jack.po.UserMapper" />
    </mappers>

  3、批量记载映射文件
  前提条件:
   (1). 使用Mapper代理的方式进行开发。
   (2). Mapper接口文件名要和映射文件名一致
   (3).Mapper接口文件和映射文件在同一个目录下

  <!--引入mapper-->
    <mappers>
        <!--name:mapper接口文件所在的包路径-->
      <package name="" />
    </mappers>

 

 

 

 

五、spring-mybatis的整合

1、对于mybatis:sqlmapconfig--连接池--mapper.xml

   但是注意:连接池只是建立了到数据库的连接,mapper.xml只是java语言执行sql,具体的中间使用者sqlmapfactory并没有出现

2、对于spring:ioc控制反转,本身就是以bean的形式托管对象,这里我们可以将sqlmapfactory以bean的形式托管了,那么在接下来使用的时候,直接调用这个bean就行了

3、spring托管sqlmapfactory的bean,涉及到连接池(想到db属性),涉及到map.xml(别名typealias),干脆都放在spring在的applicationcontext.xml里面的了

结构图如下:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值