Mybatis

Mybatis基础

mybatis不会自动建表,hibernate会

Mybatis配置属性详解

1. environment

主要注意以下两个

  • dateSource
  • transactionManager
 <!-- 数据库环境 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/testbase?characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

2. properties

使用${}引用

<properties>
    <property name="username" value="root"/>
</properties>
<!--使用${username}引用此属性值-->
<!--使用resource引用外部文件-->
<properties resource="jdbc.properties">
    <property name="username" value="root"/>
</properties>
<!--
dataSource里面的字面值的优先级>外部的properties文件里面的属性的优先级>properties里面子节点的属性
-->
<properties resource="jdbc.properties"/>

3. typeAliases

 <!--类别名,影响的是resultType-->
 <!--不建议使用别名-->
    <typeAliases>
        <!--注册一个简写的类名,可以在其他mapper文件中引用-->
        <!--不推荐使用,因为这种全限定名在mapper文件中,插件有提示,如此操作多此一举-->
       <typeAlias type="com.ag.pojo.Student" alias="student"/>
        <!--直接注册整个包,该包之下的所有类都生效,默认规则为简写类名-->
        <!--规则是首字母小写的简写类名,实际上简写或原类名都能生效-->
        <package name="com.ag.pojo"/>
    </typeAliases>
<!-- 将namespace的值设置为DAO类对应的路径 -->
<mapper namespace="pojo">
    <select id="listStudent" resultType="Student">
        select * from  mybatis_test
    </select>
</mapper>

4. typeHandlers

用于转换数据类型,一般不需要额外添加,特殊情况特殊考虑

5. settings

默认配置一般友好

    <!--一个配置完整的 settings 元素的示例如下:-->
    <settings>
        <!--全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存。-->
        <setting name="cacheEnabled" value="true"/>
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="multipleResultSetsEnabled" value="true"/>
        <setting name="useColumnLabel" value="true"/>
        <setting name="useGeneratedKeys" value="false"/>
        <setting name="autoMappingBehavior" value="PARTIAL"/>
        <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
        <setting name="defaultExecutorType" value="SIMPLE"/>
        <setting name="defaultStatementTimeout" value="25"/>
        <setting name="defaultFetchSize" value="100"/>
        <setting name="safeRowBoundsEnabled" value="false"/>
        <!--是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。-->
        <setting name="mapUnderscoreToCamelCase" value="false"/>
        <setting name="localCacheScope" value="SESSION"/>
        <setting name="jdbcTypeForNull" value="OTHER"/>
        <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
    </settings>

6. Mappers

<!-- 映射文件 -->
    <mappers>
        <!--不要写. 要写斜杠/-->
        <!--第一种:通过路径方式引入XML文件-->
        <!--<mapper resource="com/ag/mapper/StudentDao.xml"/>-->
        <!--第二种:通过URL 协议:地址的方式引入-->
        <!--<mapper url="file:///F:/IDEA_workspace/TomcatTest/src/main/resources/mapper/StudentDao.xml"/>-->
        <!--第三种:通过接口的全限定名引入,必须保持接口与Mapper.xml在同包之下-->
        <!--<mapper class="com.ag.StudentMmapper"/>-->
        <!--第四种:引入一个包的方式,之后新建的mapper不需重新引入-->
        <!--<package name="com.ag.mapper"/>-->
    </mappers>

mybatis参数问题

单个基本或非基本数据类型

select * from student where sid = #{sid} and name = #{name}

#{}表达式里随便写,但建议写有意义的参数名

多个基本或非基本数据类型

默认的参数名称风格

Student queryBySidName(int sid,String name);
    <select id="queryBySidName" resultType="Student">
--         select * from student where sid = #{arg0} and name = #{arg1}
        select * from student where sid = #{param1} and name = #{param2}
    </select>

推荐使用

Student queryBySidName(@Param("sid") int sid, @Param("name") String name);
<select id="queryBySidName" resultType="Student">
   select * from student where sid = #{sid} and name = #{name}
</select>

单个JavaBean

默认通过JavaBean里面的属性的名称去引用,通过getter方法去获得这些值

select * from student where sid = #{sid} and name = #{name}

#{}表达式里必须写存在的属性名,不能随便写

Map

以map封装,则以键取值

多个JavaBean

原生

select * from girl where name = #{param1.name} and flower = #{param2.flower}

推荐

Girl queryByAB(@Param("a") A a, @Param("b") B b);
select * from girl where name = #{a.name} and flower = #{b.flower}

一组值传入(list集合)问题

使用步骤:

  1. 创建实体类
  2. 创建全局配置文件(名称不固定)
  3. 创建实体类对应的接口类
  4. 创建对应的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBL
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值