其他分享
首页 > 其他分享> > MyBtis

MyBtis

作者:互联网

mybatis-config.xml
<!--    引入外部配置文件-->
    <properties resource="db.properties" />
//日志
<settings>
    <setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
        <!--    别名,实体类少的时候-->
<!--        <typeAlias type="Entity.User" alias="user"/>-->
        <!--    扫包,实体类多的时候-->
        <package name="Entity"/>
    </typeAliases>
<!--数据库连接信息配置-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
<!--                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>-->
<!--                <property name="url" value="jdbc:mysql://localhost:3306/program?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>-->
<!--                <property name="username" value="root"/>-->
<!--                <property name="password" value="root"/>-->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
<!--    每个Mapper.xml都要注册-->
    <mappers>
        <mapper resource="UserMapper.xml" />
<!--        配置文件必须在同个包下-->
<!--        <mapper class="Dao.UserMapper" />-->
<!--        <package name="Dao"/>-->
    </mappers>

Mapper.xml

//select查询,delete删除,update修改,insert新增

//id保持与Dao层方法名一致,parameterType参数类型="实体类路径/map",resultMap="UserMap"引用<resultMap>标签的id,适合复杂的实体关系

<select id="getUserLimit" parameterType="map" resultType="user">
    select  id,name,pwd  from program.user limit #{startIndex},#{pageSize}
</select>
<resultMap id="UserMap" type="user" >
<!--        column数据库,property实体类-->
        <result column="id" property="id" />
        <result column="name" property="name" />
        <result column="pwd" property="password" />
<!--        <association property="role" column="rid" javaType="role" select="getRole" />-->
        <association property="role"  javaType="role" >//association类,collection集合
            <result column="role_name" property="role_name" />
        </association>
    </resultMap>

测试:

private static SqlSessionFactory sqlSessionFactory;
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");//读取配置文件
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
sqlSessionFactory.openSession(true);//自动提交事务

支持在方法直接用@select/insert/delete/update("sql")

MyBatis运行原理:

1.Resources获取加载全局配置文件

2.实例化SqlSessionFactoryBuilder构造器

3.解析XMLConfigBuilder文件

4.返回configuration对象,所有配置文件信息

5.SqlSessionFactory实例化

6.transaction事务管理

7.executor执行

8.CRUD实现

9.判断是否成功,不成功跳到第6

支持注解
dao层方法@Select/@delete/@Updata/@Insert
参数@Param替代xml的parameterType

动态sql,就是拼接sql

1.标签<where>若后面没有参数则去掉where存在即添加,

2.<if>存在则添加sql,

3.<choose>会自动判断是否去掉and,

4.<when><otherwise>如同switch

5.<foreach collection="ids"//集合名 item="id"//遍历个体 open=" id in (" //开始 close=")"//结束 separator=","//,隔开>#{id} </foreach>

得到的 id in( ids[0] , ids[1] , ... )

Mybatis缓存分为一级缓存和二级缓存,一级默认开启

一级缓存主要作用域就SqlSession就一个方法会话关闭则清空缓存,二级缓存作用域就Mapper.xml就一个Mapper文件

缓存在增删改都会被清空,出发在xml的方法id添加flushCache=false

查缓存,主要是修改少用的少的页面

其工作顺序是先查二级缓存再查一级缓存没有在查数据库

 

 

标签:xml,MyBtis,缓存,配置文件,--,sql,id
来源: https://blog.csdn.net/qq_34686042/article/details/116112595