栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

学习笔记-Mybatis

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学习笔记-Mybatis

学习笔记-Mybatis

文章目录

学习笔记-Mybatis

1、快速使用2、全局配置3、Mapper映射文件配置4、获取参数的几种方式

1、${}2、#{} 5、ResultType 和 ResultMap6、一对多、多对一 关联查询映射的几种方式

1、一对多:2、多对一 7、分布查询(嵌套查询)8、动态SQL8、一级缓存和二级缓存

1、快速使用

介绍 :mybatis是一个半自动化的(需要自己写sql)的orm框架,灵活的写sql,便于修改。

1、引入pom文件


    
    
        junit
        junit
        4.12
        test
    
    
    
        org.mybatis
        mybatis
        3.4.6
    
    
    
        org.projectlombok
        lombok
        1.18.4
    
    
    
        mysql
        mysql-connector-java
        8.0.13
    
    
    
        log4j
        log4j
        1.2.17
    

2、创建全局配置文件




    
    
    
        
        
    
    
        
            
            
                
                
                
                
            
        
    

    
    
        
        
    

3、配置log4j

log4j.rootLogger=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=./log/mblog.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=5
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

4、创建实体类 mapper接口 Mapper配置文件

package com.lee.entity;

import lombok.Data;

import java.util.List;


@Data
public class Dep {
    private Integer id;
    private String name;

    private List empList;


}

package com.lee.mapper;

import com.lee.entity.Dep;

import java.util.List;


public interface DepMapper {
    List getAllDep();
    Dep getDepByid(Integer id);
}






    
        select * from dep
    
    

注意:xml配置文件的namespace要和mapper接口的全限定名一致

5、进行测试

epMapper mapper;
public void setUp() throws Exception {
    String resource = "mybatis-config.xml";
    final InputStream resourceAsStream = App.class.getClassLoader().getResourceAsStream(resource);
    //创建SqlSessionFactory
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    //创建sqlsession
    final SqlSession sqlSession = sqlSessionFactory.openSession();
    //获取mapper接口
    mapper = sqlSession.getMapper(DepMapper.class);
}

@Test
public void testGetAllDep() {
    mapper.getAllDep().forEach(System.out::println);
}
2、全局配置

配置全局影响mysql的行为 常用的有别名配置等

参见mybatis – MyBatis 3 | 配置

3、Mapper映射文件配置

映射文件要注意namespace要和mapper接口的全限定名一致

mybatis – MyBatis 3 | XML 映射器

4、获取参数的几种方式 1、${}

字符串拼接,mybatis不会解析里面的占位符 直接拿来执行

常见场景: 模糊查询 like ‘%${operation}%’ 或者这样("%"#{operation}"%")

2、#{}

mybatis会对sql进行预编译 采用占位符的方式执行sql

mysql默认会用 arg0 args1 param1 param2 作为key

建议:为mapper接口方法中每个参数都加上@param注解 这样就可以在xml里面使用(见名思义)

5、ResultType 和 ResultMap

ResultType 表示的是结果类型,当数据库字段名和实体的属性名一致的时候(驼峰命名在全局配置中开开启的话除外),可以成功映射

ResultMap 可以对结果集进行自定义映射(ResultType其实也是ResultMap的一种),可以配置一对多,多对一的映射关系

6、一对多、多对一 关联查询映射的几种方式 1、一对多:

1、关联查询






    
        
        

        
            
            
        
    

    
        select id,name as name2 from emp where depid=#{id}
    
    
        select e.id,e.name,e.depId,d.id as dId,d.name as dName from emp e left join dep d on e.depid=d.id
    
    
        
        
        
            
            
        
    

2、嵌套查询

    
        select * from dep where id=#{depId}
    
7、分布查询(嵌套查询)

查询数据,利用查询数据的结果作为参数 传给其他的查询 可以配置懒加载 使用到这个属性的时候查询

缺点就是:主查询数据量太大 查询数据库的次数过多

8、动态SQL

1、if test

 
  
        select * from emp
        
            
                 name like '%${emp.name}%'
            
            
                and sex = #{emp.sex}
            
            
                and email = #{emp.email}
            
        

    

3、trim

    
        select * from emp
        
            
                
                    name like '%${emp.name}%'
                
                
                   and sex = #{emp.sex}
                
                
                    and   email = #{emp.email}
                
                
                   and  depId=1
                
            
        


    

5、foreach

    
        delete from emp where id in
        
            #{id}
        
    

6、sql

    id,`name`,sex,email,depId
     select  from emp
8、一级缓存和二级缓存

一级缓存:默认开启

级别:SqlSession级别 同一个sqlSession内 多次查询同一个数据 只会执行一次

失效情况(同一个SqlSession内):中间执行了任意增删改 手动清除缓存 sqlsession变化

二级缓存 级别:SqlSessionFactory级别 失效情况:中间执行了任意增删改

全局配置:

mapper配置:

实体实现Seribale接口

关闭sqlSession或者提交sqlSession

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770338.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号