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标签中配置)


posted @ 2020-08-25 23:06  jesscia5  阅读(113)  评论(0编辑  收藏  举报