美文网首页
mybatis基础总结

mybatis基础总结

作者: 农民工__乔Young | 来源:发表于2018-01-22 20:48 被阅读0次

    一、DAO传统开发模式

    步骤:
    1、创建全局配置文件
    2、创建映射文件
    3、将映射文件加载到全局配置文件
    4、使用
          SqlSessionFactoryBuilder() --> SqlSessionFactory()  --> SqlSession
    

    全局配置文件中加载映射配置文件

    <!--resource: 映射文件的全路径-->
    <mapper resource = "../..xml" />
     <!-- 配置自定义类型别名
                type:本来的类型
                alias:别名
                <package name=""/>批量扫描某一个包:如果是批量配置别名那么别名就是类名
                并且首字母大写或小写都可以
             -->
            <typeAliases>
                <!-- <typeAlias type="com.wtu.entity.User" alias="user"/> -->
                <package name="com.wtu.entity"/>
            </typeAliases>
    

    映射文件

    <mapper namespace = "namespace">
    <select/update/insert/delete id = "ID" parameterType="Class" resultType="Class">
           SQL 语句 eg:select * from user where id = #{id}
    </select/update/insert/delete>
    </mapper>
    注:#{} 表示一个占位符  ${}表示一个连接符,连接字符串
           parameterType、resultType为类的全名或别名
           当resultType为自定义Class时,数据库返回的结果集以Class中set方法后面的名称对对象属性进行赋值
    

    使用:

     //获取全局文件输入流对象
     InputStream in = Resource.getResourceAsStream("全局配置文件的路径");
     //获取SqlSessionFactory对象 
     SqlSessionFactory factory = new SqlSessionFactoryBuilder().builder(in);
     //得到SqlSession对象
     SqlSession session = factory.openSqlSession();
     //执行Sql语句
     session.selectOne("namespace.ID",(Object)parameter);
     session.selectList("namespace.ID",(Object)parameter);
     session.delete("namespace.ID",(Object)parameter);
     session.update("namespace.ID",(Object)parameter);
     session.insert("namespace.ID",(Object)parameter);
    

    二、Mapper 代理模式开发DAO

    要点

    1、映射文件的namespace为Mapper接口的全路径
    2、Mapper接口中的方法名必须与映射文件在中SQL语句保持一致
    3、Mapper接口中方法返回值类型必须与SQL语句中resultType一致
    当接口返回值为List时,resultType与List中的元素类型一致
    4、接口中方法的参数类型必须与SQL语句的parameterType一致
    

    使用

     SqlSession session = factory.openSqlSession();
    /*通过SqlSession对象得到Mapper接口的一个代理对象
      参数是Mapper接口的类型*/
    MapperInterface mapperInterface = session.getMapper(MapperInterface.Class);
    然后可以使用mapperInterface对象调用接口中方法
    

    Mappers
    用来在全局配置文件中加载映射文件

    注意: 通过mapper接口来加载
    1、映射文件的文件名必须与mapper接口名相同
    2、映射文件和Mapper接口在同一目录下
    3、这种方式只适合mapper代理开发模式
    eg:<mapper class = "com.hust.mapper.UserMapper"/>
    

    批量加载映射文件

    注意:批量加载映射文件 自动取扫描一个包,将该包下的所有映射文件加载到全局配置文件
    1、映射文件的文件名必须与mapper接口名相同
    2、映射文件和Mapper接口在同一目录下
    3、这种方式只适合mapper代理开发模式
    eg: <package name="com.hust.mapper">
    

    三、高级应用

    <when> <if> <foreach> 连接

    <select/update/insert/delete  id="methodName" parameterType="Class" resultMap="resultMapID">
        select * from Table where id = #{id}
        <when>      <!-- 当条件不满足时,<when>自动删除多余的连接词-->
            <if test="condition1">
                and ......
            </if>
            <if test = "condition2">
                and ......
            </if>
            <if test = "list != null">
                <foreach  collection="list" open="" close=""  separater="" item="item">
                    #{item}
                </foreach>
            </if>
        </when>
    </select/update/insert/delete>
    属性值:test:  true false
    

    <resultMap>

    <resultMap type="Class" id = "resultMapID"   >
        <id column="_id" property="property1"/> <!-- 每行记录的唯一标识符-->
        <result column="column2" property="property2" >
        <result column="column3" property="property3"/>
    </resultMap>
    自己编写结果集映射
    column:数据库返回的列名
    property:对象的属性名
    resultMap:一对多或多对多的查询中,必须使用它为查询结果的类型
    

    一对一

    Class1与Class2为一对一的关系
    Class1成员变量:    Class2 class2;
    二者连接查询结果
    <resutlMap type="Class1"  id="resutlMapID">
        <id column="columnID" property="ClassProperty1">
        <result column="column2" property="Class1Property2"/>
        <result column="column3" property="Class1Property3"/>
    
        <association property="class2" javaType="Class2"> <!-- 一对一 -->
            <id column="columnID" property="Class2Property1">
            <result column="column2" property="Class2Property2"/>
            <result column="column3" property="Class2Property3"/>
        <associaton/>
    </resultMap>
    id:唯一标识一行
    

    一对多

    Class1与Class2为一对的多关系
    Class1成员变量:   List<Class2> class2List;
    二者连接查询结果
    <resultMap type="CLass1" id="ResultMapID">
        <id column="columnID" property="Class1Property1">
        <result column="column2" property="Class1Property2">
        <result column="column3" property="Class1Property3">
    
        <collecttion property="class2List" ofType="CLass2">   <!-- ofType集合中元素的类型-->
            <id column="columnID" property="Class1Property1">
            <result column="column2" property="Class2Property2">
            <result column="column3" property="Class2Property3">
        </collection>
    </resutlMap>
    id:唯一标识一行
    多对多:在局部是一对多
    

    注意:

    <association  property=""  javaType="">
    <collection   property=""  ofType="">
    

    相关文章

      网友评论

          本文标题:mybatis基础总结

          本文链接:https://www.haomeiwen.com/subject/acpraxtx.html