首页 > 其他分享 >mybatis

mybatis

时间:2022-11-26 22:01:58浏览次数:39  
标签:缓存 配置文件 dtd 使用 mybatis org

一、创建mybatis配置文件和mapper映射文件的模板

mabatis模板

<?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>
<!-- jdbc配置文件 -->
<properties resource=""></properties>
<!-- 实体类路径 -->
<typeAliases>
<package name=""/>
</typeAliases>

<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>

<mappers>
<!-- 映射文件路径 -->
<package name=""/>
</mappers>
</configuration>

映射文件

<?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接口全路径 -->
<mapper namespace="">

</mapper>

二、resultType 和 resultMap的区别

1.当表中字段名与实体类中属性一致时,推荐使用resultType。resultType会根据映射来自动赋值,如果不一样赋值为null

2.当表中字段名与实体类中属性不一致时,使用resultMap。

解决表中字段名与实体类属性名不一致的情况

1.使用别名

2.使用全局设置

3.使用resultMap

三、解决多对一关系

1.使用级联赋值

2.使用association

3.使用分布查询


四、解决一对多关系

1.使用collection

2.使用分布查询


五、动态sql

1.if

2.where

3.choose when otherwise

4.foreach

5.trim


六、缓存

1.mybatis一级缓存,默认存在。缓存级别时sqlsession级别

一级缓存失效的四种情况

 1. 不同的sqlsession

 2. 同一个sqlsession查询不同的数据

 3. 进行了增删改操作

 4. 清空缓存

2.mybatis二级缓存。缓存级别是sqlsessionfactory级别

开启二级缓存

1.在mybatis中设置全局设置开启二级缓存(默认开启)

2.实体类实现序列化

3.sqlsession提交或者退出

4.在映射文件添加cache标签

3.第三方缓存EHCache

导入依赖

<!-- Mybatis EHCache整合包 -->
<dependency>
<groupId>org.mybatis.caches</groupId>
<artifactId>mybatis-ehcache</artifactId>
<version>1.2.1</version>
</dependency>
<!-- slf4j日志门面的一个具体实现 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
创建EHCache的配置文件ehcache.xml
<?xml version="1.0" encoding="utf-8" ?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<!-- 磁盘保存路径 -->
<diskStore path="D:\atguigu\ehcache"/>

<defaultCache
maxElementsInMemory="1000"
maxElementsOnDisk="10000000"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
</defaultCache>
</ehcache>

默认为mybatis二级缓存,使用第三方需要声明

<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>

添加logback日志配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<!-- 指定日志输出的位置 -->
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 日志输出的格式 -->
<!-- 按照顺序分别是:时间、日志级别、线程名称、打印日志的类、日志主体内容、换行 -->
<pattern>[%d{HH:mm:ss.SSS}] [%-5level] [%thread] [%logger] [%msg]%n</pattern>
</encoder>
</appender>

<!-- 设置全局日志级别。日志级别按顺序分别是:DEBUG、INFO、WARN、ERROR -->
<!-- 指定任何一个日志级别都只打印当前级别和后面级别的日志。 -->
<root level="DEBUG">
<!-- 指定打印日志的appender,这里通过“STDOUT”引用了前面配置的appender -->
<appender-ref ref="STDOUT" />
</root>

七、mybatis逆向工程

逆向工程:根据表来生成bean、mapperys和mapper接口

依赖

<!-- 依赖MyBatis核心包 -->
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
</dependencies>
<!-- 控制Maven在构建过程中相关配置 -->
<build>
<!-- 构建过程中用到的插件 -->
<plugins>
<!-- 具体插件,逆向工程的操作是以构建过程中插件形式出现的 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.0</version>
<!-- 插件的依赖 -->
<dependencies>
<!-- 逆向工程的核心依赖 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
<!-- 数据库连接池 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.2</version>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.8</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
创建逆向工程的配置文件,文件名为generatorConfig.xml


<?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>
<!--
targetRuntime: 执行生成的逆向工程的版本
MyBatis3Simple: 生成基本的CRUD(清新简洁版)
MyBatis3: 生成带条件的CRUD(奢华尊享版)
-->
<context id="DB2Tables" targetRuntime="MyBatis3">
<!-- 数据库的连接信息 -->
<jdbcConnection driverClass=""
connectionURL=""
userId=""
password="">
</jdbcConnection>
<!-- javaBean的生成策略-->
<javaModelGenerator targetPackage="" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" /><!--是否能使用子包 true代表每个点为一层包,false则代表为一个包名-->
<property name="trimStrings" value="true" /><!-- 自动去掉字符串空格-->
</javaModelGenerator>
<!-- SQL映射文件的生成策略 -->
<sqlMapGenerator targetPackage="" targetProject=".\src\main\resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- Mapper接口的生成策略 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 逆向分析的表 -->
<!-- tableName设置为*号,可以对应所有表,此时不写domainObjectName -->
<!-- domainObjectName属性指定生成出来的实体类的类名 -->
<table tableName="" domainObjectName=""/>

</context>
</generatorConfiguration>

八、分页插件

添加依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>

在mybatis中配置插件

<plugins>
<!--设置分页插件-->
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

分页插件使用

// 使用PageHelper.startPage(int pageNum, int pageSize)开启分页功能
Page<Emp> page = PageHelper.startPage(1, 3);
List<Emp> emps = mapper.selectByExample(null);
System.out.println(emps);
PageInfo info = new PageInfo(page,6);
System.out.println(info);

标签:缓存,配置文件,dtd,使用,mybatis,org
From: https://blog.51cto.com/u_15497049/5889174

相关文章

  • Mybatis笔记
    由于Mybatis是面向接口进行编程的,需要注意以下两点:​1、映射文件中的namespace标签中的值需要和mapper中的全类名相同​2、映射文件中的id属性值,需要和mapper接口中的......
  • mybatisPlus笔记
    MybatisPlus:一些容易不知道是什么含义的方法:MybaitsPlus中我们没有进行设置表名,MybaitsPlus是如何进行确定表名的?​MybatisPlus中默认是通过实体类(Ma......
  • Failed to load ApplicationContext-myBatis注解与整合
    严重:CaughtexceptionwhileallowingTestExecutionListener[org.springframework.test.context.support.DependencyInjectionTestExecutionListener@21213b92]topre......
  • 一、Mybatis(基础)
    一.Mybatis快速入门1.1框架介绍框架是一款半成品软件,我们可以基于这个半成品软件继续开发,来完成我们个性化的需求!如图:1.2ORM介绍如图:具体映射关系如下图:......
  • 二、Mybatis(进阶)
    一.接口代理方式实现Dao1.1代理开发方式介绍​ 采用Mybatis的代理开发方式实现DAO层的开发,这种方式是我们后面进入企业的主流。Mapper接口开发方法只需要程序员编......
  • MybatisPlus的一些高级特性
    1、MybatisPlus多数据源配合导入相关依赖<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.2</vers......
  • mybatis xml文件中用 if 标签判断字符串是否相等
    方法一:<iftest="delFlag=='2'.toString()">a.del_flag=#{delFlag}</if> 方法二:<iftest='delFlag=="2"'>a.del_flag=#{delFlag}</if> ......
  • tomcat运行mybatis项目 启动没完没了
    原因:在mybatis的xml文件中会存在语法或者其他的错误,但是文件有没有提示,平时有看不出来,这时候启动项目的时候,会发现console一直无限循环,但是你看不到异常的抛出,原因在于这......
  • springboot与数据访问整合mybatis与springData JPA
    1、jdbc<dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐starter‐jdbc</artifactId></dependency><dependency><groupId>......
  • mybatisplus-plus实现多主键批量保存或更新
    一、依赖<dependencies>......//其他依赖<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boo......