MyBatis持久化框架

搭建mybatis环境
    1, 导入需要的jar包
    2, 配置mybatis的总配置文件: mybatis-config.xml
        配置根标签
        <!-- 根标签 -->
        <configuration>
            <!--
                引入属性文件
                属性文件通常写数据库连接的信息
                    username(注意一个问题, 属性文件中不要单独写一个username)
                    password
                    url
                    driverClass
            -->
            <property resource="属性文件所在src下的位置" />

            <!-- 或者直接定义属性值 -->
            <properties>
                <property name="jdbc.username" value="test" />
                <property name="jdbc.password" value="test" />
                <property name="jdbc.driverClassName" value="oracle.jdbc.OracleDriver" />
                <property name="jdbc.url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
            </properties>

            <!-- 为实体类定义一个别名, 如果不定义别名, 在映射文件中就要写这个实体类的全路径名 -->
            <typeAliases>
                <!-- 这个写法取的别名是随意的, 可以自己任意定义 -->
                <!-- <typeAlias type="类名的全路径名" alias="别名"></typeAlias> -->
                <!-- 如果使用下面这个写法, 就是按照mybatis自己定义的规则, 这个包下的所有类的类名就是别名 -->
                <package name="com.model"/>
                <!-- 使用package标签实际是默认扫描model包下的所有的类, 如果在实体类的定义了注解@Alias(value = "..."), 则优先使用注解 -->
            </typeAliases>

            <!-- 配置mybatis的运行环境们 -->
            <environments default="所使用的环境的标签id">
                <environment id="default">
                    <!--
                        配置事务管理器的类型
                            JDBC
                            MANAGED--(托管, 商业服务器上才有的功能, Tomcat没有)
                    -->
                    <transactionManager type="JDBC" />
                    <!--
                        POOLED(基于连接池的数据源)
                        UNPOOLED(使用普通的数据库连接)
                        JNDI(使用应用服务器上的JNDI连接配置数据源, 很少使用)
                    -->
                    <dataSource type="POOLED">
                        <property name="username" value="${属性文件中配置的信息}"></property>
                        <property name="password" value="${属性文件中配置的信息}"></property>
                        <property name="url" value="${属性文件中配置的信息}"></property>
                        <property name="driver" value="${属性文件中配置的信息}"></property>
                    </dataSource>
                </envirment>
            </environments>
            <mappers>
                <!-- 挨个写明每个映射文件所在的位置 -->
                <mapper resource="src下mapper映射文件的全路径名">
                <!-- 写明每个映射文件所对应的接口的限定名, package引入的文件一定是接口,
                所以如果使用这种方式, 必须是使用接口对应映射文件的方式 -->
                <package name="接口所在的包" />
            </mappers>
        </configuration>

    3, 新建每个实体类的映射文件...Mapper.xml
        <!-- 定义每个实体类的映射文件 -->
        <mapper namespace="唯一的id / 接口的全路径名">
            <select id="被调用的id(唯一) / 需要执行的方法名"></select>
            <insert></insert>
            <update></update>
            <delete></delete>
        </mapper>

    4, 写测试类运行mybatis
        MybatisUtil
            两步:
                1, 构建SqlSessionFactory
                    InputStream in = Resources.getResourceAsStream("总配置文件所在的src下的路径");
                    SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in);
                2, 构建SqlSession(注意SqlSession不能以一个class成员变量的身份被返回)
                    SqlSession ss = ssf.openSession();
                3, 直接运行
                    a: 直接运行映射文件中的sql语句
                        ss.select...
                        ss.insert...
                        ss.update...
                        ss.delete...
                    b: 使用接口映射配置文件
                        ss.getMapper(接口类名.class);
                        调用接口的方法

一对一, 一对多查询
    1, 一对一
        映射文件中写明resultMap, 这时sql语句一定用关联查询多个表的内容
            <resultMap type="类名" id="...">
                <id property="实体类中成员变量的名字" column="查询结果中的列名" />
                <result property="成员变量的名字" column="查询结果中的列名" />
                ...
                <!-- 对象级联 -->
                <result property="major.majorid" column="查询结果中的列名" />
                <result property="major.mname" column="查询结果中的列名" />
            </resultMap>
            <resultMap type="类名" id="...">
                <id property="实体类中成员变量的名字" column="查询结果中的列名" />
                <result property="成员变量的名字" column="查询结果中的列名" />
                ...
                <!-- 对象级联 -->
                <association property="major" resultMap="定义好的另一个resultMap" />
            </resultMap>
            <resultMap type="类名" id="...">
                <association property="属性名" select="其他映射文件中的查询语句" />
            </resultMap>
    2, 一对多
            <resultMap type="类名" id="...">
                <collection property="students" select="其他映射文件中的查询语句" />
            </resultMap>

动态sql语句
    1, <if>条件
        <if test="key!=null">
            拼接sql语句
        </if>
    2, <choose><when><otherwise>
        <choose>
            <when test="key=='value'">
                拼接sql语句
            </when>
            <when test="key=='value'">
                拼接sql语句
            </when>
            <otherwise>
                拼接sql语句
            </otherwise>
        </choose>
    3, <where>
        自动添加where关键字
        如果where子句第一句中有 or 或者 and 则删除第一个
    4, <trim>
        功能与<where>类似, 并且提供了前缀, 后缀的添加, 更加灵活
    5, <foreach>
        用来遍历传入的集合参数
            item(定义集合中每个对象的名字),
            collection(集合的对象的名字),
            open(定义开始的字符),
            close(定义结束的字符),
            separator(定义分割的字符)
    6, <set>
        主要用于update
        自动加上set关键字
        自动剔除最后一个 ","
    7, <sql>
        经常用于一些常用或者固定的语句, 在外面定义一个语句, 在各种标签中引入
        使用include, 相当于直接写在上面
    8, <selectKey>
        用于不支持自增长主键的数据库, 尽量避免写这个东西


    &lt;    <    小于号                                           
    &gt;    >    大于号
    &amp;    &    和
    &apos;    ’    单引号
    &quot;    "    双引号

    <![CDATA[]]>


posted @ 2017-11-04 10:53  Oo。  阅读(1108)  评论(0)    收藏  举报