【数据库框架】MyBatis

1、什么是MyBatis

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL(所以是一个半自动的ORM框架,要编写SQL语句)、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来将原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)配置和映射为数据库中的记录。MyBatis 直到语句被执行时才清楚数据类型

2、配置文件 application.yml

三种类型的配置文件:

  • bootstrap.yml(bootstrap.properties
  • application.yml(application.properties)
  • application-dev(prod).yml(application-dev(prod).properties)

bootstrap:用来程序引导时执行,应用于更加早期配置信息读取,如可以使用来配置application.yml中使用到参数等;

server:    
    port: 1234    
    undertow:        
        io-threads: 16        
        worker-threads: 256        
        buffer-size: 1024        
        direct-buffers: true
spring:    
    application:        
        name: first-project    
    cloud:       
        nacos:            
            discovery:                
                 metadata:                   
                     version: shinian    
    aop:        
        auto: true
#inetutils:
#preferred-networks: 172.0.71

application.yml:应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数

spring:         
    datasource:url: jdbc:mysql://localhost:3306/dcn?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull         
    username: root         
    password: root         
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:         
    mapper-locations: classpath*:/mapper/*Mapper.xml 

加载顺序:bootstrap.yml > application.yml > application-dev(prod).yml

3、编写实体类

4、编写mapper.java

5、编写mapper.xml

5.1 XML映射器

cache

该命名空间的缓存配置

cache-ref

引用其他命名空间的缓存配置

sql

可被其他语句引用的可重用语句块

<sql id="userColumns">        
    ${alias}.id,
    ${alias}.username,
    ${alias}.password 
</sql>
<select id="selectUsers" resultType="map">     
    select         
        <include refid="userColumns">             
            < property name="alias" value="t1"/>      
        </include>,          
        <include refid="userColumns">            
            <property name="alias" value="t2"/>       
        </include>     
    from some_table t1          
        cross join some_table t2
</select>

parameterType

入参类型

resultType

出参类型

resultMap

描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素

crud

select 映射查询语句
<select id="selectPerson" parameterType="int" resultType="hashmap">     
    SELECT *     
    FROM PERSON     
    WHERE ID = #{id} 
</select>

select标签参数
flushCache="false"#将其设置为 true 后,只要语句被调用,都会导致本地缓存和二级缓存被清空,默认值:false
useCache="true" #将其设置为 true 后,将会导致本条语句的结果被二级缓存缓存起来,默认值:对 select 元素为 true
timeout="10" #这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。默认值为未设置(unset)(依赖数据库驱动)
fetchSize="256" #这是一个给驱动的建议值,尝试让驱动程序每次批量返回的结果行数等于这个设置值。 默认值为未设置(unset)(依赖驱动)
statementType="PREPARED" #可选 STATEMENT,PREPARED 或 CALLABLE。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED
在这里插入图片描述

系统缓存

系统缓存分为本地缓存全局缓存

本地缓存:又称一级缓存

  • 相同sqlsession以相同查询条件查询,第二次查询会使用第一次查询的,已加入缓存的结果;
  • 所以,如果希望使用一级缓存,首先必须保证,两次查询是在同一个事务内完成的,查询条件完全相同,并且两次查询之间,没有穿插增删改方法。
  • 但是这样一来,不同的session之间是隔离的,为了消除这个隔离,有了二级缓存,但也只是消除了同一张表的隔离。

全局缓存:又称二级缓存

  • 一个nameSpace(同一个mapper.xml)对应一个二级缓存。所以这个mapper内只能单表操作,而且默认是不开启的,需要使用属性useCache="true" 开启二级缓存;
  • 一级缓存失效后会将数据存入二级缓存。一级缓存查不到,会去查二级缓存;
  • 不同mapper(不同二级缓存)缓存相互独立;
  • 所以一张表在多个mapper内操作,或者一个mapper内操作多个表,都会导致缓存失效。要使用二级缓存,那么一个mapper里只能有一张表,这张表的所有操作,也只能在这个mapper中。
insert 映射插入语句
<insert id="insertAuthor">     
    insert into Author (
        id,
        username,
        password,
        email,
        bio
    )     
    values (
        #{id},
        #{username},
        #{password},
        #{email},
        #{bio}
    ) 
</insert>
<insert id="insertAuthor">     
    insert into Author (
        username, 
        password, 
        email, 
        bio
    )     
    values     
        <foreach item="item" collection="list" separator=",">         
            (#{item.username}, #{item.password}, #{item.email}, #{item.bio})     
        </foreach> 
</insert>
update 映射更新语句
<update id="updateAuthor">    
    update 
        Author     
    set 
        username = #{username},         
        password = #{password},         
        email = #{email},         
        bio = #{bio}     
    where id = #{id} 
</update>
delete 映射删除语句
<delete id="deleteAuthor">      
    delete 
        from Author 
        where id = #{id} 
</delete>

5.2 转义符

1、 '<'不能直接用,要转义为 '&lt;'
2、 ‘&’ 不能直接用,要转义为 '&amp;'

5.3 常用函数

1、INET_ATON(‘209.207.224.40’)
按照网络字节顺序产生数字:209×2563 + 207×2562 + 224×256 + 40

2、INET_NTOA(3520061480)
按数字转换得出网络字节:209.207.224.40

3、case函数
Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略

`CASE              
    WHEN sex = '1' THEN '男'              
    WHEN sex = '2' THEN '女'         
    ELSE '其他' 
END as chineseSex`

5.4 选择语句

if语句

<if test="title != null">     
    title like #{title} 
</if> 

choose(when、otherxise)语句

<choose>     
    <when test="title != null"> 
        AND title like #{title} 
    </when>     
    <when test="author != null and author.name != null"> 
        AND author_name like #{author.name} 
    </when>     
    <otherwise> 
        AND featured = 1 
    </otherwise> 
</choose> 

5.5 where标签

将where换为<where>。where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除

6、POM

  • properties:指定版本号
  • dependencies:定义一些公有的maven坐标
  • dependencyManagement:定义一些maven坐标,子类需要再次定义才能使用那些maven坐标,但无需再加version
  • build:引入插件,但这个子类也要再次引入自己需要的
  • respositories:引入仓库地址url
  • distributionManagement:引入仓库地址url
  • modules:添加微服务模块,总POM中是把微服务模块加入到maven中
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值