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

MyBatis

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

MyBatis

操作数据库,在之前我们使用的是JDBC,

jdbc优势:

1.操作简单,容易理解。

2.操作性能最佳,因为其他框架都是基于JDBC来实现的,所以在更多配置和更多代码时会有一定的性能牺牲掉。

JDBC劣势:

1.如果我们要实现一个复杂的数据库操作的时候需要编写大量代码才能实现业务,如果需要使用事务则会更复杂。

2.不能快速实现更好的共用型。

3.实现更多配置时需要复杂的硬编码才能实现。

MyBatis框架:开源,免费,轻量级(依赖较少)

在之前servlet时,dao层就是操作数据库的,那么我们的Mybatis封装的就是jdbc模板代码。

优点:

1.可以将一行数据缝扎黄为一个实体类对象

2.sql语句外部化,参数传递外部化

MyBatis使用步骤

1.导包,在项目上创建lib文件夹,将依赖放入,并bulidpath

2.准备工作:创建数据库和实体类(实体类属性对应数据库字段)

3.创建并编写mybatis的配置文件,创建位置在src下,文件名mybatis-config.xml(需要下载文档约束)

文档约束

 

    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    

4.创建映射文件(表和实体类的映射关系 xxxMapper.xml )注意:将映射文件添加到配置文件中

注意:

将mapper文件映射为接口需要满足

1.接口名必须和mapper文件名一致

2.接口路径必须和mapper文件一致

3.mapper文件中namespace必须是接口完整路径

4.增删改查标签中id指必须映射为接口中的方法名

    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    

5.测试

那么在mybatis-config.xml中




	



    
    
    
    
    



	
	
	
	
	



    
    
    
    




    
    
        
	    
	    
	    
	        
	        
	        
	        
	        
	    
    




   



缓存:

一级缓存:

mybatis默认开启的

作用范围:一个SqlSession

开启:openSession

结束:close(),clearCache(),执行增删改

二级缓存:

作用范围:一个mapper

 配置:
1.在配置文件中的settings标签中添加:
 
2.在所需的映射文件中添加:
 
3.在所需映射文件对应的实体类实现序列化
implements Serialzable
映射文件中所有的select语句将被缓存
映射文件中所有的insert、update和delete语句将刷新缓存

编写配置文件后要在src下编写映射文件,对应到dao层接口






	
	
	
	
	
	
	
	
	
	
	
	
	
	
	select * from stu
	
	
	
	
	
	
	 #{myid}
	
	
	
	
	

	
	
	
	
	
	update stu
	
	
	
	
	 name = #{name},
	
	
	
	 age = #{age},
	
	
	
	
	
	 id = #{id}
	
	
	

	

动态sql:
        可以方便的在sql语句中实现某些简单的逻辑判断
     1.if语句(简单的条件判断)
     2.choose(when otherwise),相当于java语言的switch,与jstl中的choose很像
     3.trim(对包含内容加上prefix前缀,suffix后缀)   
     4.where(主要用来简化sql语句中where条件判断,能职能的处理and|or不必担心多余导致语法错误)
     5.set(用于数据更新时,会处理掉最后一个语句末尾的“,”)
     6.foreach(在条件查询时的in处理中)
     foreach可以在sql语句中进行迭代一个集合
     foreach元素的属性主要有item,index,collection,open,separator,close
     item:迭代时的每一个元素的别名          index:指定一个名字,表示在迭代过程中,每次迭代到的位置
     open:该语句以什么开始           separato:表示每次进行迭代之间以什么符号作为分隔符      close:表示以什么结束
     collection:根据传入参数的类型 值为别名(内置)

测试:使用mybatis读取配置文件并执行sql

//读取配置文件
InputStream ips = Resources.getResourceAsStream("mybatis-config.xml");

//创建会话工厂
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(ips);

//开启会话
SqlSession ss = ssf.openSession();

//直接获取接口对象
xxxMapper xx = ss.xxxMethod(xxxMapper.class);

要执行哪个方法调用对应的方法即可。

这里说一下缓存

一级缓存

//传入一个空数组

//创建数组
int[] array = null;

//调用方法
List ls = xx.select2(array);

//执行clearCache()会结束一个sqlSESSION的缓存
//ss.clearCache();


Stu_s1 ss1 = new Stu_s1();
ss1.setName("小儿");
ss1.setAge(26);
ss1.setId(2);		
int row = sm.update(ss1);

//执行增删改操作后关闭了一级缓存

int[] array1 = null;
		
List ls1 = sm.select2(array1);
		
System.out.println("一个SQLSESSION中两次查询比对:"+ls1.equals(ls));

		
		//提交
		
		
		//关流
		ss.close();

 

二级缓存

作用范围一个mapper

配置

 1.在配置文件的settings标签中添加:
  2.在所需的映射文件中添加
 *3.在所需映射文件对应的实体类实现序列化 implements Serializable
  

//创建数组
		int[] array1 = null;
		
		//调用方法
		List ls1 = sm1.select2(array1);
		System.out.println(ls1);
		
		//提交
		
		//关流
		ss1.close();
		
		//开启会话2
		 SqlSession ss2 = ssf.openSession();
				
		//值接获取接口对象
		Stu_s1_mapper sm2 = ss2.getMapper(Stu_s1_mapper.class);
				
		//创建数组
		int[] array2 = null;
				
		//调用方法
		List ls2 = sm2.select2(array2);
		System.out.println(ls2==ls1);

		
		//提交
		//ss2.commit();
		//关流
		ss2.close();
	}

 

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

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

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