mybatis基础总结

一、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="">
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 6,220评论 0 4
  • Java数据持久化之mybatis 一. mybatis简介 1.1 原始的JDBC操作: Java 通过 Jav...
    小Q逛逛阅读 5,393评论 0 16
  • java连接数据库一共有三种方式以及其优缺点: MyBatis层次结构图: Mybatis是一个半自动化的数据库持...
    esileme阅读 807评论 0 0
  • Doctype作用?标准模式与兼容模式各有什么区别? HTML5的doctype声明为<!DOCTYPE>,位于文...
    流智云海阅读 192评论 0 0
  • 一、前言 首先恭喜选择了mac来做PHP开发环境,mac 对PHPer不错,内置了PHP的apache环境以及ph...
    傅二毛阅读 1,818评论 2 7

友情链接更多精彩内容