Mybatis

一、其他的配置

        1.开启驼峰转换

        2.具体指定需要使用的日志(存在多个日志)

           可以不指定,但是会按照下面的找,我们还是需要导入自己使用的日志依赖和日志配置文件

        MyBatis框架内置日志工厂。日志工厂负责自动加载项目中配置的日志。MyBatis支持以下日志,当存在多个日志工具时,严格按照从上往下顺序使用,且只会使用一个。

  • SLF4J

  • Apache Commons Logging

  • Log4j 2

  • Log4j (deprecated since 3.5.9)

  • JDK logging

        3.为实体类定义别名

        4.加载映射文件

<?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>
    <!--
        这些属性可以在外部进行配置,并可以进行动态替换。
        你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置
    -->
    <properties resource="config.properties" />
    <settings>
        <!-- 驼峰命名与下划线自动转换 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- log日志 -->
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <typeAliases>
        <!--
            别名
            type	类的完全限定名
            alias	别名
        -->
        <!--为某个类指定别名-->
        <!--<typeAlias alias="person" type="com.lihaozhe.pojo.Person"/>-->
        <!--为某个包下的所有类指定别名 别名默认为类的首字母小写之后的字符串-->
        <package name="com.lihaozhe.pojo"/>
    </typeAliases>
    <!--
        MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。
        例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。
    -->
    <!--默认使用的环境 ID(比如:default="development")。-->
    <environments default="development">
        <!--每个 environment 元素定义的环境 ID(比如:id="development")。-->
        <environment id="development">
            <!--事务管理器的配置(比如:type="JDBC")。-->
            <!--
                事务管理器(transactionManager)
                在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):
                JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
                MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。
                默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。
                如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。
                这两种事务管理器类型都不需要设置任何属性。它们其实是类型别名,换句话说,你可以用 TransactionFactory 接口实现类的全限定名或类型别名代替它们。
            -->
            <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 resource="mybatis/mapper/PersonMapper.xml"/>-->
        <!-- 使用完全限定资源定位符(URL) -->
        <!--<mapper url="file:///home/lhz/mybatis/src/main/resources/com/lihaozhe/mapper/PersonMapper.xml"/>-->
        <!--<mapper url="file:///D:/mybatis/src/main/resources/com/lihaozhe/mapper/PersonMapper.xml"/>-->
        <!--加载某包下所有的映射配置文件-->
        <package name="com.lihaozhe.mapper"/>
    </mappers>

</configuration>

二、接口绑定

1.技术介绍:

1.我们之前使用Mybatis,是直接使用sqlsession对象调用各种封装的方法,去拿到我们Mapper中sql去与数据库做交互。(缺点:需要用一次就创建一个sqlsession对象)

2.以前我们是创建一个dao层去数据库做交互,直接创建一个dao实现类对象就可以调用各种自己写的方去与数据库交互(优点:创建一个对象,多次调用)

3.Mybatis中则提供了一种技术

        通过SqlSession的getMapper方法产生接口的动态代理对象。然后通过对象调用接口中提供的功能。 在将接口中的方法与对应的Mapper.xml中的sql关联。

总之:1.我们先用sqlsession对象获得接口的代理对象mapper

           2.通过接口的代理对象mapper调用接口中写的方法

           3.就可以拿到方法关联mapper.xml中的sql,然后数据库交互。

2.技术实现:

 1.首先在mybatis-config.xml中

    <mappers>
        <!-- 此处换为package,里面写接口和映射文件所在的包 -->
        <package name="com.zqwl.mapper"/>
    </mappers>

2.接口和映射文件

        首先接口和映射文件必须处于同一个输出目录(即编译后的输出目录下的同一个目录下)

 注意:

  1. 映射文件和接口需要在同一个包中

  2. 映射文件名称要和接口名称相同

  3. namespace取值必须是接口的全限定路径

  4. id属性值必须和方法名对应

  5. resultType必须和方法返回值类型对应。如果方法返回值是集合类型,resultType中写泛型的类型

 

实现方式一:深度拷贝(需要在Pom.xml中加入插件)

        那么可以直接将接口和mapper.xml 两直接放入编译前的同一包下编写(dao包)

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

实现方式二:

自己创建一个同样的目录结构(注意上面是创建是可以com.zqwl.mapper  下面是目录创建是com/zqwl/mapper)

(这儿可以下在idea中下一个插件mybatisX实现 快速生成接口方法对应的sql外部结构)

3.接口绑定下参数传递

//传入某个接口的类对象,就可以得到具体某个接口的代理对象
PeopleMapper peopleMapper = session.getMapper(PeopleMapper.class);

        // 底层:session.selectList("selectByNameAddress",map对象)
//调用方法时传入参数
        List<People> list = peopleMapper.selectByNameAddress("韩梅梅","北京海淀");
/* 底层解析时把方法参数放入到Map map中。
    map.put("arg0",name);
    map.put("arg1",address);
    map.put("param1",name);
    map.put("param2",address);
    */
   

   1.原始传参

 List<People> selectByNameAddress(String name,String address);
 select * from people where name=#{arg0} and address=#{arg1}

 mapper.xml中拿参数#{key},key为arg 、param。arg0和param1这两种方式可以混合使用。

2.使用注解@Param

 List<People> selectByInput(@Param("id") Integer id, @Param("name") String name);

那么sql中#{key} 可以直接根据注解后的字符串拿到value

select * from people where id=#{id} and name=#{name}

三、动态SQL

·具体使用查看每日案例

1.if标签
    语法格式:<if test="条件"> </if>
    特点:相当于java中的if,存在多个if多个if都会判断
    作用:
        1.条件为true,if标签中的内容参与执行
        2.条件为false,if标签中的内容不参与执行


2.choose标签
    语法格式:
        <choose>
            <when test=""> </when>
            ...
            <otherwise></otherwise>
        </choose>
    特点:
        1.相当于java中的if else if else
        2.最终只有一个when或otherwise中的内容参与执行
    作用:
        1.条件为true,when | otherwise 标签中的内容参与执行
        2.条件为false,when | otherwise 标签中的内容不参与执行

3.trim标签
    语法格式:
        <trim prefix="where" prefixOverrides="and"></trim>
    特点:
        1.trim为辅助标签
        2.子串内容不为null,添加where
        3.子串以and开头去掉and
        4.说明:
            prefix:只要子内容不是空字符串(""),就在子内容前面添加特定字符串。
        ​    prefixOverrides:如果子内容是以某个内容开头,去掉这个内容。
        ​    suffix:只要内容不是空字符串(""),就在子内容后面添加特定字符串。
        ​    suffixOverrides:如果里面内容以某个内容结尾,就去掉这个内容
    作用:配合 if,choose 等使用

4.where标签
    语法格式:<where></where>
    作用:简化<trim prefix="where" prefixOverrides="and"></trim>

5.set标签
    语法格式:<set></set>
    作用:简化<trim prefix="set" suffixOverrides=","></trim>

6.foreach标签
    语法格式:<foreach collection="数组|集合" item="数组|集合中每一个元素存储的变量"> </foreach>
             open:以什么开始
             close:以什么结束
             separator:以什么分割
    作用:遍历

7.bind标签
    语法格式:<bind name="自定义" value="例如 '%'+name+'%'"/>
    作用:字符串拼接

8.sql,include标签
    sql:sql片段
    include:引入sql片段

 

 四、注解

1.注解定义传参名

2.注解写sql(写一些简单的sql,复杂的还是mapper.xml中写)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值