zoukankan      html  css  js  c++  java
  • mybatis的使用

    1.ORM

      object Relational Mapping : 对象关系映射

      简单地说,就是把数据库表和实体类及实体类的属性对应起来,让我们可以通过操作实体类来操作数据库表。

    mybatis的配置

    1.全局配置文件mybatis-config.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <!-- 引入外部资源文件-->
        <properties>
            <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="fuck"/>
        </properties>
    
        <!-- 配置数据源环境 -->
        <environments default="development">
            <environment id="development">
                <!-- 数据库事务管理类型 -->
                <transactionManager type="JDBC"/>
                <!-- 数据源,type=pooled 说明是使用连接池方式,可以节省资源 -->
                <dataSource type="POOLED">
                    <!-- 调用资源文件里的用户信息-->
                    <property name="driver" value="${driver}"/>
                    <property name="url" value="${url}"/>
                    <property name="username" value="${username}"/>
                    <property name="password" value="${password}"/>
                </dataSource>
            </environment>
        </environments>
    
        <mappers>
            <mapper class="com.dao.UserMapper"/>
        </mappers>
    </configuration>

    2.配置mapper文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.dao.UserMapper">
        <!-- 配置查询所有用户 -->
        <select id="listAllUsers" resultType="com.bean.User">
            SELECT * FROM user
        </select>
    </mapper>

    namespace:对应类的全路径名

    id:类的方法

    resultType:方法的返回值

    (mapper文件必须和对应类在同一目录下才可以)

     当使用模糊查询时,要在传入的参数里添加%.

      <insert id="save" parameterType="com.bean.User">
            INSERT INTO USER VALUES(#{username},#{age})
        </insert>

    mybatis使用ognl表达式来赋值.#{name},#{age}相当于user.getUserName和user.getAge

    表的字段和javaBean属性名字不同时的解决办法

    1.配置查询结果和实体类的属性相对应的关系

      <resultMap id="map" type="com.bean.Student">
            <id property="s_id" column="id"></id>
            <result property="s_name" column="name"></result>
            <result property="s_age" column="age"></result>
            <result property="s_grade" column="grade"></result>
        </resultMap>

     配置Properties文件

    把配置文件放在resources包下

        <properties resource="config.properties">
    
        </properties>

    引用时${},名字必须和配置文件的相同

    使用typeAliases配置别名

     <typeAliases>
            <package name="com.bean"></package>
        </typeAliases>

    配置别名之后,再使用resultType和paramterType就可以直接写类名,不需要在写全类名了

      <mappers>
            <package name="com.dao"></package>
        </mappers>

    使用package属性把所有的mapper文件都导入进来,不需要一个用mapper标签来导入.

    mabatis的事务配置

     SqlSession sqlSession = factory.openSession(true);

    当设置为true时,mybatis会自动提交事务,就不需要在手动提交事务了

    mybatis动态sql的使用

    <select id="findByCondition" resultType="user">
            SELECT * FROM  user where 1 = 1
            <if test="username!=null">
                and username = #{username}
            </if>
    
        </select>
      SELECT * FROM user
            <where>
                <foreach collection="list" item="item" open="age in (" close=")" separator=",">
                    #{item}
                </foreach>
            </where>

    当传入的参数是集合类型时,可以用forEach标签来遍历值.

    当有一对多的情况时

    <resultMap id="myper" type="person">
            <id property="id" column="id"></id>
            <result property="username" column="username" ></result>
            <result property="age" column="age"></result>
            <collection property="account" ofType="account">
                <id property="id" column="aid"></id>
                <result property="uid" column="uid"></result>
                <result property="money" column="money"></result>
            </collection>
        </resultMap>

     Mybatis中的缓存

    1.一级缓存

    作用于SqlSession对象中,当进行一次查询时,sqlsession会将sql语句作为key,返回结果作为value存储在map中,当有相同的查询时,直接有map中拿出结果.

    2.二级缓存

    它指的是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存

    对象存储的是数据,不是对象

    二级缓存的使用步骤:

    1.让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)

    2.让当前的映射文件支持二级缓存(在IUserDao.xml中配置)

    3.让当前的操作支持二级缓存(在select标签中配置)

    
    
  • 相关阅读:
    POJ 2019
    POJ 3368
    POJ 3264
    POJ 2828
    POJ 3481
    结构光相移法-多频外差原理+实践(上篇)
    基于MAP-MRF的视差估计
    重磅直播|计算深度分割技术的实现与全局效应下的结构光三维重建
    用于类别级物体6D姿态和尺寸估计的标准化物体坐标空间
    通过几道CTF题学习Laravel框架
  • 原文地址:https://www.cnblogs.com/lzh66/p/13562558.html
Copyright © 2011-2022 走看看