持久层框架-Mybatis

持久层框架-Mybatis:

一:MyBatis介绍:

1:市场上目前的持久层框架:

1:Hibernate

2:jdbcTemplate,Spring提供的,不是很好用,也是面向sql语句的,和ibatis以及Mybatis有类似之处,但是没有这两者好用,也没有这两者的功能强大。

3:ibatis,目前的最高版本到2。之前是阿帕奇公司的,后来被谷歌接管了,将ibatis改为mybatis,将整体的架构做了重构,语法用法有区别。但是核心的思想没有变化。现在使用的还是比较多

4:mybatis:

Mybatis和之前的hibernate有所不同:

Hibernate是完全orm的映射,是对象和模型关系进行映射。Mybatis更关注sql语句,更为灵活。Hibernate封装的东西更多,更厚。Mybatis封装的东西更薄,更为灵活。Mybatis的效率,性能更高。因为Mybaits直接执行的是sql语句,不像hibernate要执行一系列的对象之间的转换。

MyBatis的学习成本更低,较为好学。MyBatis将jdbc做了封装,但是不是简单的封装。

 

2:Mybatis优点:

1:对jdbc做了很好的封装

2:容易掌握

3:灵活性强

 

 

3:Mybatis的安装包:

 

 

 

 

 

 

 

 

 

 

其实不管是核心包还是依赖包这里面的东西都不多,所以我们的Mybatis是一个比较轻量级的框架。

 

 

二:Mybatis的初步使用:

第一步:建表:

这里使用Mysql数据库:

持久层框架-Mybatis_第1张图片

 

 

持久层框架-Mybatis_第2张图片

 

 

持久层框架-Mybatis_第3张图片

 

持久层框架-Mybatis_第4张图片

 

持久层框架-Mybatis_第5张图片

 

 

 

 

 

第二步:建立工程:

持久层框架-Mybatis_第6张图片

 

第三步:引入依赖包:

 

持久层框架-Mybatis_第7张图片

第四步:引入日志文件:

持久层框架-Mybatis_第8张图片

第五步:创建Model:

package com.lb.model;

import java.util.Date;

public class Persons {
	
	private Integer id;
	
	private String name;
	
	private Integer gender;
	
	private String adderss;
	
	private Date birthday;
	
	/*
	 * 类中的这些属性的属性名字必须要和我数据库中的字段对应。
	 * 这里赋值的原理是通过反射的方式,调用set方法。
	 */

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getGender() {
		return gender;
	}

	public void setGender(Integer gender) {
		this.gender = gender;
	}

	public String getAdderss() {
		return adderss;
	}

	public void setAdderss(String adderss) {
		this.adderss = adderss;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	@Override
	public String toString() {
		return "Persons [id=" + id + ", name=" + name + ", gender=" + gender
				+ ", adderss=" + adderss + ", birthday=" + birthday + "]";
	}
	
	

第六步:查看文档建立核心文件以及映射文件:

 

核心配置文件的模板

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

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

 

 

持久层框架-Mybatis_第9张图片

 

 

持久层框架-Mybatis_第10张图片




    
	
	    
		
		
			
		
			
				
				
				
				
			
		
	
	
	
	
		
	

 

 

建立每一个类的映射文件:

命名规范:

表名的驼峰模式,但是首个单词的首字母也要大写+Mapper.xml;

这是一种规范,但不是强制的,最好使用这种规范。

持久层框架-Mybatis_第11张图片

 

 

映射文件的模板

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

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





   
  

 持久层框架-Mybatis_第12张图片

第七步:测试:

public class Test {
	
	SqlSessionFactory sessionFactory;
	
	@Before
	public void setUp() throws Exception {
		
		//每次执行方法的时候,都先执行这个方法
		
		
		//获得核心配置文件
		InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
		//初始化核心配置文件
		sessionFactory = new SqlSessionFactoryBuilder().build(in);
		

	}

	@org.junit.Test
	public void test() {
		//创建SqlSession,通过工厂创建
		SqlSession sqlSession = sessionFactory.openSession();
		try {
			//参数一:寻找我要使用的sql语句,通过命名空间和sql的id来获得
			//第二个参数是,传递给sql的实参
			Persons p = sqlSession.selectOne("com.lb.mapper.PersonsMapper.selectPersonById", 1);
			System.out.println(p);
		}finally{
			//关闭Session
			sqlSession.close();
		}
		
		
		
	}

}

 

三:resultMap详解:

 

细节详解:

1:对于Model实体,属性我如果没有提供公共的set方法,从数据库中获得的属性的值,也是可以获取的。这些值同样也可以注入进来。这里是Mybatis框架的策略,如果提供了set方法,就反射的调用set方法,来将值注入进来。没有提供set方法的话,就会根据字段和属性名字的匹配,直接赋值(虽然属性值是private的,但是通过反射的方式是可以将权限破坏的)

 

2:虽然属性名字和数据库中的字段要对应上,但是现实项目中,往往有时候对应不上。如果对应不上,我们是有策略解决的。

 

为什么有时候属性名字和数据库中的字段会对应不上:

在我们做项目的时候,有一些字段使用的不是一个单词,可能要使用多个单词连接。

 

持久层框架-Mybatis_第13张图片

 

持久层框架-Mybatis_第14张图片

上面这样显然是有问题的,但是我们无论是类中属性名字的命名规范还是数据库中字段的命名规范都是不能改变的,那么我们怎么来处理:

通过resultMap在中间提供一种映射,明确的指出,那个字段赋值给那个属性:





   
   
   
       
       
       
        
        
        
        
        
        
   
  
  
  
  

 

@org.junit.Test
	public void test1() {
		//创建SqlSession,通过工厂创建
		SqlSession sqlSession = sessionFactory.openSession();
		try {
			//查询表中的总记录数
			Integer count = sqlSession.selectOne("com.lb.mapper.PersonsMapper.selectPersonsCount");
			System.out.println(count);
		}finally{
			//关闭Session
			sqlSession.close();
		}
		
		
		
	}

 

你可能感兴趣的:(持久层框架-Mybatis)