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

Mybatis基本使用

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

Mybatis基本使用

MyBatis 1.IDEA中Mybatis的使用 1.1 Maven导入MyBatis

​ 在maven中只需要在pom.xml配置文件中添加如下的依赖,则maven实现自动导入包和相关依赖


    
    
        org.mybatis
        mybatis
        3.2.1
    
    
    
        mysql
        mysql-connector-java
        5.1.26
    

1.2 添加核心配置文件

jdbc.properties

jdbc.username=root
jdbc.password=admin
jdbc.url=jdbc:mysql:///mybatis
jdbc.driverClassName=com.mysql.jdbc.Driver

接着需要添加mybatis的配置文件mybatis-config.xml,在mappers中将需要实现的具体的mapper.xml文件写入




   
    
    
    
        
            
            
            
            
                
                
                
                
                
            
        
    
    
       
    

以上是没有使用springboot的方式去实现maven对mybatis的使用,当使用springboot搭建项目的时候,配置就会比较简单,只需要在application.yml中做一些简单的配置就可以使用了

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql:///auth
    driver-class-name: com.mysql.jdbc.Driver
mybatis:
  type-aliases-package: cn.itsource.domain, cn.itsource.query #给这些包配置别名,使得其中的类都可以小写
  mapper-locations: classpath:cn/itsource/mapper/*Mapper.xml #实现接口的配置文件 约定大于配置

通过在applciation.yml配置文件则可以使用mabatis对数据库进行操作。

1.3MybatisUtils

由于没有使用spring的框架,因此不能让系统自动创建一些执行sql语句的对象,因此需要手动去创建一个工具类来执行mapper.xml文件中对数据库的操作

public class MyBatisUtils {
    private static SqlSessionFactory sessionFactory;
    static {
        try {
            //1.以流的形式读入mybatis-congif.xml配置文件
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            //2.通过io流创建sqlsessionfactory对象
            sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 3.创建一个方法使用sqlsessing对象
    public static SqlSession openSession() {
        if (sessionFactory != null) {
            return sessionFactory.openSession();
        }
        return null;
    }
}
2.动态SQL 2.1批量插入

批量插入中有一些标签需要注意,colection中是传入参数的类型,如果传入的是数组的话,这里就是Array;如果传入的是集合类型,这里就应该list。seperator,是每次遍历之后就用逗号分隔开,item是给其中的对象取得别名,在后面的sql语句中就可以使用p来取值。


        INSERT INTO product (name,price) VALUES 
        
            (#{p.name},#{p.price})
        
    
2.2批量删除

批量删除中 open属性是代表以“(”开头然后中间是遍历的值,close是代表以“)”结束。


    DELETE FROM product WHERe id IN
    
    	#{id}
    

2.3Mybatis常见标签

resultType:返回值类型,collections中存放的是list集合或者Array数组类型的,item代表的是取的别名,供后面的sql语句使用。open代表的是SQL语句以“(”开始,以“)”结束。里面是循环遍历的id。

	1.type 对应的返回类型,可以是javabean,也可以是其他
	2.id,必须是唯一,用于标识这个resultMap的唯一性,在使用在使用resultMap的时候,就是通过id引用
	3.extends 继承其他resultMap标签


-----------------------------------------------------------------------------------------------------
	  1. id 唯一性,注意啦,这个id用于标示这个javabean对象的唯一性, 不一定会是数据库的主键(不要把它理解为数据库对应表的主键)
      2. property 属性对应javabean的属性名
      3.column 对应数据库表的列名
      

-----------------------------------------------------------------------------------------------------
	1.result 与id相比,对应普通属性


-----------------------------------------------------------------------------------------------------
	1.constructor 对应javabean中的构造方法
	

    -- Arg 对应构造方法中的id参数 
       
     -- arg 对应构造方法中的普通参数 
       

-----------------------------------------------------------------------------------------------------
	collection 为关联关系,是实现一对多的关键 
    1. property 为javabean中容器对应字段名
    2. ofType 指定集合中元素的对象类型
    3. select 使用另一个查询封装的结果
    4. column 为数据库中的列名,与select配合使用
    

    	-- 当使用select属性时,无需下面的配置
    	
    	

---------------------------------------------------------------------------------------------------------
	association 为关联关系,是实现一对一的关键
    1. property 为javabean中容器对应字段名
    2. javaType 指定关联的类型,当使用select属性时,无需指定关联的类型
    3. select 使用另一个select查询封装的结果
    4. column 为数据库中的列名,与select配合使用


	-- 使用select属性时,无需下面的配置
	  
    

--------------------------------------------------------------------------------------------------------------

3.结果映射 3.1为什么使用结果映射

结果映射是用于解决字段名和对象属性名不一样的情况,使用结果映射使得可以匹配二者的关系。结果映射还用于关联对象的查询,mybatis不会默认查询出来,所以要使用resultMap来配置表中查出来的值,供其他的SQL语句去使用,一般来说这种情况出现在一对一表查询,或者一对多这些关联查询。

3.2关联映射处理方式

在mybatis中提供了两种方式:一种是嵌套查询,另一种是嵌套结果

嵌套结果:使用一条SQL语句查询所有的信息包括本身和关联对象

嵌套查询:发送1+N条SQL

3.2.1 嵌套结果

发送一天关联的sql解决问题,映射文件Mapper结果手动封装ResultMap,使用嵌套结果来处理联合查询的子集,这种方式需要将所有的属性自己来。



    
    
        
        
        
        
            
            
        
    

    
    
    
   SELECT * FROM employee

综上来说,嵌套结果的sql语句是诙谐的比较完全,而嵌套查询的sql语句是有多条,并且几乎都是在resultMap中完成的。

3.2.3注意

我们一般推荐大家使用嵌套查询,因为从性能上来考虑,大部分时间使用的都是嵌套查询,而且嵌套结果的方案是无法做真分页的。

在sql语句中也有一些属性值得注意,id和result都可以表示某个字段从表到类之间的映射,区别就是,id表示这个字段是key,property这个是类中属性的名称,column中的值则是对应的表字段的名字,这个是不能乱写的,association表示一对一的关系,collection表示一对多的关系。

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

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

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