【韩顺平老师MyBatis】

第1章 MyBatis的基本介绍

1. 原理说明

在这里插入图片描述

2. 快速入门案例

1)环境

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration>

    <!-- 将日志信息输出到控制台 -->
    <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
        <!-- 设置日志输出的编码 -->
        <param name="Encoding" value="UTF-8"/>
        <!-- 设置日志输出的样式 -->
        <layout class="org.apache.log4j.PatternLayout">
            <!-- 设置日志输出的格式 -->
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n"/>
        </layout>
        <!--过滤器设置输出的级别-->
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <!-- 设置日志输出的最小级别 -->
            <param name="levelMin" value="WARN"/>
            <!-- 设置日志输出的最大级别 -->
            <param name="levelMax" value="ERROR"/>
            <!-- 设置日志输出的xxx,默认是false -->
            <param name="AcceptOnMatch" value="true"/>
        </filter>

    </appender>

    <!-- 将日志信息输出到文件,但是当文件的大小达到某个阈值的时候,日志文件会自动回滚 -->
    <appender name="RollingFileAppender" class="org.apache.log4j.RollingFileAppender">
        <!-- 设置日志信息输出文件全路径名 -->
        <param name="File" value="D:/log4j/RollingFileAppender.log"/>
        <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
        <param name="Append" value="true"/>
        <!-- 设置保存备份回滚日志的最大个数 -->
        <param name="MaxBackupIndex" value="10"/>
        <!-- 设置当日志文件达到此阈值的时候自动回滚,单位可以是KB,MB,GB,默认单位是KB -->
        <param name="MaxFileSize" value="10KB"/>
        <!-- 设置日志输出的样式 -->
        <layout class="org.apache.log4j.PatternLayout">
            <!-- 设置日志输出的格式 -->
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n"/>
        </layout>
    </appender>

    <!-- 将日志信息输出到文件,可以配置多久产生一个新的日志信息文件 -->
    <appender name="DailyRollingFileAppender" class="org.apache.log4j.DailyRollingFileAppender">
        <!-- 设置日志信息输出文件全路径名 -->
        <param name="File" value="D:/log4j/DailyRollingFileAppender.log"/>
        <!-- 设置日志每分钟回滚一次,即产生一个新的日志文件 -->
        <param name="DatePattern" value="'.'yyyy-MM-dd-HH-mm'.log'"/>
        <!-- 设置日志输出的样式 -->
        <layout class="org.apache.log4j.PatternLayout">
            <!-- 设置日志输出的格式 -->
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n"/>
        </layout>
    </appender>

    <!--    真正用的时候其实也就改动这两个部分,其他不用动  以下-->

    <!-- 日志记录 java.sql 包下的类产生的debug级别的错误信息 -->
    <logger name="java.sql">
        <level value="debug"/>
    </logger>
    <!-- 日志记录 org.apache.ibatis 包下的类产生的debug级别的错误信息 -->
    <logger name="org.apache.ibatis">
        <level value="debug"/>
    </logger>

    <!--    真正用的时候其实也就改动这两个部分,其他不用动  以上-->

    <!-- 从根开始就使用这样的配置,直接使用STDOUT -->
    <root></root>
    <!--    &lt;!&ndash;-->
    <!--     注意:-->
    <!--     1:当additivity="false"时,root中的配置就失灵了,不遵循缺省的继承机制-->
    <!--     2:logger中的name非常重要,它代表记录器的包的形式,有一定的包含关系,试验表明-->
    <!--        2-1:当定义的logger的name同名时,只有最后的那一个才能正确的打印日志-->
    <!--        2-2:当对应的logger含有包含关系时,比如:name=test.log4j.test8 和 name=test.log4j.test8.UseLog4j,则2-1的情况是一样的-->
    <!--        2-3:logger的name表示所有的包含在此名的所有记录器都遵循同样的配置,name的值中的包含关系是指记录器的名称哟!注意啦!-->
    <!--     3:logger中定义的level和appender中的filter定义的level的区间取交集-->
    <!--     4:如果appender中的filter定义的 levelMin > levelMax ,则打印不出日志信息-->
    <!--     &ndash;&gt;-->

    <!--    &lt;!&ndash; 指定logger的设置,additivity指示是否遵循缺省的继承机制&ndash;&gt;-->
    <!--    <logger name="test.log4j.test8.UseLog4j" additivity="false">-->
    <!--        <level value ="WARN"/>-->
    <!--        <appender-ref ref="DailyRollingFileAppender"/>-->
    <!--    </logger>-->

    <!--    &lt;!&ndash;指定logger的设置,additivity指示是否遵循缺省的继承机制 &ndash;&gt;-->
    <!--    <logger name="test.log4j.test8.UseLog4j_" additivity="false">-->
    <!--        <level value ="ERROR"/>-->
    <!--        <appender-ref ref="RollingFileAppender"/>-->
    <!--    </logger>-->

    <!--    &lt;!&ndash; 根logger的设置&ndash;&gt;-->
    <!--    <root>-->
    <!--        <level value ="INFO"/>-->
    <!--        <appender-ref ref="ConsoleAppender"/>-->
    <!--        <appender-ref ref="DailyRollingFileAppender"/>-->
    <!--    </root>-->

</log4j:configuration>

pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>MyBatisStudy</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>MyBatisStudy Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.3</version>
    </dependency>
    <!-- mysql驱动包 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.11</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.3</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.25</version>
    </dependency>

  </dependencies>

  <build>
    <finalName>MyBatisStudy</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

2)增加

配置初始的mybatis.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">

<!-- mybatis主配置文件 -->
<configuration>
    <!-- 配置环境 -->
    <environments default="mysql">
        <!-- 配置mysql环境 -->
        <environment id="mysql">
            <!-- 配置事务类型 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源(连接池) -->
            <dataSource type="POOLED">
                <!-- 配置连接数据库的4个基本信息 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="xxxx"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
    <mappers>
        <!-- com/ricard/dao/UserDao.xml 该路径必须是resources目录下的文件路径 -->
<!--        <mapper resource="com/ricard/dao/UserDao.xml"></mapper>-->
    </mappers>
</configuration>

开发实体类
在这里插入图片描述
开发mapper
在这里插入图片描述
开发对应的mapper.xml文件
在这里插入图片描述
在这里插入图片描述
开发测试类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3)删除

如果环境已经搭建好了之后,其实要写的东西就是三部曲,接口-实现方法-注册mapper。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4)修改

在这里插入图片描述
在这里插入图片描述

5)查询单条记录

在这里插入图片描述
在这里插入图片描述

6)查询所有记录

在这里插入图片描述
在这里插入图片描述

3. SqlSession原生API的使用

在这里插入图片描述
在这里插入图片描述

4. 注解方式操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第2章 核心配置文件

1. mybatis-config.xml

1)properties

在这里插入图片描述
在这里插入图片描述

2)settings

在这里插入图片描述

3)typeAliases

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
还可以直接给整一个包下面的类取别名

4)typeHandlers

在这里插入图片描述

5)environments

引入mapper的各种方式:
在这里插入图片描述
在这里插入图片描述

2. mapper.xml

1)获取添加对象id

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
不在mapper.xml中配置的话,id返回空值。
如果用的不是mysql,是没有自增长的oracle:
在这里插入图片描述

2)多条件查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3)模糊查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4)传入参数是HashMap

在这里插入图片描述
在这里插入图片描述

5)返回结果是HashMap

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6)结果集映射(resultMap)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果实体类属性名和表字段名不相同的话,有可能会造成这里的查询为空。查出来的user_name想装配到Monster2中去,但是发现Monster2中没有user_name这个属性(虽然又username,但也不同),就装配不了。其他同理。最后查出来的是null。
在这里插入图片描述
在这里插入图片描述
那怎么做呢?
在这里插入图片描述
但是这样复用性不高,不过我们还可以有第二种方案:
在这里插入图片描述

3. 动态sql

在这里插入图片描述
在这里插入图片描述

1)if标签

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2)where标签

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3)choose标签

在这里插入图片描述

4)forEach标签

在这里插入图片描述
如果用原生态sql,应该写成:
在这里插入图片描述
用动态sql:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5)set标签

在这里插入图片描述

第4章 映射

1. 一对一的映射

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后,改成通过级联查询
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可是这样写实在太多要写的了,挺麻烦的,有第二种方案(推荐使用):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
还有一种是基于注解的方式去配置,但是实际开发最推荐的还是xml即第二种方式。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 双向多对一的映射

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
但是这里必须要注意,你可以一个一个取出来,但是不能这样输出,死循环:
在这里插入图片描述
也可以用注解:
在这里插入图片描述
在这里插入图片描述

3)对映射关系优化特别的说明

在这里插入图片描述

第5章 缓存

1. 一级缓存

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 自带的二级缓存的使用

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. MyBatis EhCache

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第6章 Spring和MyBatis整合

看自己项目:D:\Project\hspedu\spring\MyBatisAndSpring
在这里插入图片描述
注意配置时候可能会出现以下错误:
【SSM】class=“org.mybatis.spring.SqlSessionFactoryBean“报错

此处不允许使用特性 transaction-manager

温馨提示:mapper.xml放在resources文件夹下面,不然新版的idea随时报错找不到mapper.xml文件,让你怀疑人生
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置application-config.xml
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
678都直接从之前项目复制过来就行了。
MonsterService:
在这里插入图片描述
测试:
在这里插入图片描述

第7章 逆向工程

1. 介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 使用

在这里插入图片描述

1)创建一个逆向工程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
generatorConfig.xml的模板
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:虽然老师这里targetProject写的都是.\src,但是我这么写是不生效的,运行成功但是没有出现文件,我最后直接写死路径就行了。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>

    <!--    有Example查询条件内容,生成的方法更多 <context id="Mysql" targetRuntime="MyBatis3">-->
    <!--    无Example等内容,是一个基本版本,使用较多 <context id="Mysql" targetRuntime="MyBatis3Simple">
            对应生成的mapper方法大概5,6个,如果希望生成更多的把simple去掉-->
    <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <commentGenerator>
            <!--            是否去除自动生成的注释 true:是 false:否-->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!--        数据库连接信息:驱动类、连接地址、用户名、密码-->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=false&amp;serverTimezone=UTC"
                        userId="root" password="0525"/>

        <!--        默认false,把JDBC DECIMAL和NUMERIC类型解析为Integer,为true时把把JDBC DECIMAL和NUMERIC类型解析为java.math.BigDecimal -->

        <!-- 类型转换 -->
        <javaTypeResolver>
            <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- targetPackage:生成实体类的路径 -->
        <javaModelGenerator targetPackage="com.mybatis.entity"
                            targetProject="D:\Project\hspedu\spring\MyBatisGenerator">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- targetProject:XXXMapper.xml映射文件生成的路径 -->
        <sqlMapGenerator targetPackage="com.mybatis.mapper"
                         targetProject="D:\Project\hspedu\spring\MyBatisGenerator">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- targetPackage:Mapper接口生成的位置 -->
        <javaClientGenerator targetPackage="com.mybatis.mapper"
                             targetProject="D:\Project\hspedu\spring\MyBatisGenerator" type="XMLMAPPER">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>

        <!--        数据库表名字和我们的entity类对应的映射指定-->
        <table tableName="goods" domainObjectName="goods"/>
    </context>

</generatorConfiguration>

测试代码(模板):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2)测试CRUD

自己将文件放到之前的项目里面试一下或者新建试一下就行,要改的地方也不多,报错了百度一下很快就能解决了!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值