Mybatis学习笔记一 —— 入门

一、Mybatis的简介

  MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

二、与Hibernate的异同

同:两者都是持久层的框架,都能够通过配置文件自动将数据库的的记录包装成Java对象返回。
异:hibernate属于高度封装的框架,在hibernate中不需要开发者自己写sql语句,通过一些API就能够对数据库进行操作,但是Mybatis不一样,开发者需要自己手写sql语句,通过Mybatis的配置文件会自动将sql语句进行JDBC的操作。

三、Mybatis的配置文件

  1. 核心配置文件sqlMapConfig.xml

此文件作为mybatis的核心配置文件,配置了mybatis的运行环境等信息,文件一般放在工程根目录下。




	
	
		
		
		
		
	
	
	
	
		
		
			
		
			
				
				
				
				
			
		
	
	
	
	
		 
	

  1. 映射文件xxxMapper.xml

这是sql映射文件,文件中配置了操作数据库的sql语句,此文件需要在SqlMapConfig.xml中加载,一般情况下该文件可以放在任意文件,只需要在加载时指明位置就好,但是最好将该文件放在与dao层的接口类的同一包下。





	
	
	
	
	
	
	
	
		
		
			SELECT LAST_INSERT_ID()
		
		insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
	
	
	
	
		update user set username=#{username},address=#{address},birthday=#{birthday},sex=#{sex} where id = #{id}
	
	
	
		delete from user where id = #{id}
	
	
	
	
	
	

四、测试案例

public class MybatisTest {
	@Test
	public void findUserById() throws IOException{
		//加载mybatis的核心配置文件
		InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
		//创建SqlSessionFactoryBuilder
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
		//通过SqlSessionFactoryBuilder创建SqlSessionFactory
		SqlSessionFactory sessionFactory = builder.build(in);
		//通过SqlSessionFactory创建SqlSession
		SqlSession session = sessionFactory.openSession();
		//通过session来执行相应sql语句,这里由于返回一条数据,
		//所以使用selectOne(映射文件sql对应id,传入sql语句的参数)
		//注意,因为核心配置文件可能加载多个映射文件,这是可能不同文件有相关id的sql语句
		//为了进行区别,就需要用到映射文件中的命名空间namespaace,
		//将变成Object user = session.selectOne("test.findUserById", 10);
		Object user = session.selectOne("findUserById", 10);
		//最后提交,然后关闭资源
		session.commit();
		session.close();
		System.out.println(user);
	}
	
	@Test
	public void findUserByName() throws IOException{
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
		SqlSessionFactory sessionFactory = builder.build(Resources.getResourceAsStream("SqlMapConfig.xml"));
		SqlSession session = sessionFactory.openSession();
		//因为这里返回的是多条数据,所以使用selectList
		List list = session.selectList("findUserByName","张");
		//最后提交,然后关闭资源
		session.commit();
		session.close();
		System.out.println(list);
	}
}

五、Mybatis的开发方式

Mybatis有两种开发方式,一种就是传统的开发方式,即在dao层既有接口,又有接口实现类,这种方式比较麻烦,这里主要说另一种开发方式,动态代理的方式。
动态代理方式,简单来说就是我们只需要创建接口类,不需要接口实现类,通过配置文件能够让Mybatis帮我们创建一个接口的代理类,通过这个代理类就可以直接获取映射文件中的sql语句执行对数据库的操作。

  • 动态代理开发方式的要求
  1. 映射文件中的namespace与mapper接口的类路径相同。
    在这里插入图片描述
  2. Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
  3. Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
  4. Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
    Mybatis学习笔记一 —— 入门_第1张图片
  • 动态代理测试案例
@Test
	public void findUserById() throws IOException {
		// 首先获取到SqlSession对象
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
		SqlSessionFactory sessionFactory = builder.build(Resources.getResourceAsStream("SqlMapConfig.xml"));
		SqlSession session = sessionFactory.openSession();
		// 通过session.getMapper(接口的class对象)获取接口的代理对象
		UserMapper userMapper = session.getMapper(UserMapper.class);
		// 直接调用接口的方法,通过该方法名找到相同id的sql语句,然后执行
		User user = userMapper.findUserById(1);
		System.out.println(user);
		// 最后提交,然后关闭资源
		session.commit();
		session.close();
	}

六、配置文件的配置参数

  1. 核心配置文件的typeAliases

这个配置用于给java对象类型起别名


		
		
		
		
		
		
	
  1. 核心配置文件的mappers

这个配置用来加载映射文件,有多种加载方式。


	
		
		
		
		
		
		
	
  1. 映射文件的复杂sql语句的书写

	
	
	
	
	
	
	
		update user
		
		
			
				username=#{username},
			
			
				address = #{address},
			
		
		
			
				and id = #{id}
			
		
	

你可能感兴趣的:(Mybatis框架学习笔记)