MyBatis

一、简介

Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。

与hibernate比较:

  1. Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句。
  2. Mybatis直接编写原生态sql,可以严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一但需求变化要求迅速输出成果。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件,则需要自定义多套sql映射文件,工作量大。 
  3. Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件,如果用hibernate开发可以节省很多代码,提高效率。 
     

二、配置

1、Configuration.xml

配置数据库和实体配置文件






  
    
      
        
      
      
        
        
        
        
      
    
  
  
  
    
    
    
  

2、Bean.xml

配置结果集和方法






  
    
    
    
    
  

  
  
  
  	delete from MESSAGE where ID = #{_parameter}
  
  
  
  	delete from MESSAGE where ID in(
  		
  			#{item}
  		
  	)
  

3、OGNL表达式

MyBatis_第1张图片

MyBatis_第2张图片

4、mybatis标签

select a.ID C_ID,a.NAME,a.DESCRIPTION,b.ID,b.CONTENT,b.COMMAND_ID from COMMAND a left join COMMAND_CONTENT b on a.ID=b.COMMAND_ID and a.NAME=#{name} and a.DESCRIPTION like '%' #{description} '%'

附表




  
    
    
    
  

6、容易混淆概念

1.resultMap和resultType的区别:

  • resultMap需要在xml中配置相应的映射

  • resultType对SQL语句大小写敏感。

2.parameterMap和parameterType的区别:

  • parameterMap已经废弃

3.#{}和${}的区别:

  • #{}会在预编译时变成一个?,而${}直接写入参数的值(如果想使用,需要用'${}')

  • ${}多用在排序sql语句中(order by ${})

三、API编程

主要使用sqlSession来完成sql操作

1 、sqlSession作用

  1. 向SQL语句传入参数
  2. 执行SQL
  3. 获取执行SQL语句的结果
  4. 事务控制

2、 得到SQLSession

  1. 通过配置文件获取数据库连接相关信息
  2. 通过配置信息构建SqlSessionFactory
  3. 通过SqlSessionFactory打开数据库会话
//通过配置文件获取数据库连接信息       
Reader reader =Resources.getResourceAsReader("com/config/Configuration.xml");     
//通过配置文件构建一个SqlSessionFactory       
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);     
//通过SqlSessionFactory打开一个数据库会话      
SqlSession sqlSession = sqlSessionFactory.openSession();

3、使用

1、查询:

sqlSession.selectList("Message.queryMessageList",message);

2、删除:删除后需要手动提交事务

sqlSession.delete("Message.deleteOne", id);

sqlSession.commit();

3、修改

sqlSession.update("Message.update", message);

sqlSession.commit();

4、插入

sqlSession.insert("Message.insert", message);

sqlSession.commit();

四、接口式编程

1、接口式编程的作用

对API调用需要的namespace、与sql相关的id、传入的参数、返回值做约束,减少出错的可能。

2、使用方式

  1. 定义实体接口类
  2. 得到接口代理实例
  3. 调用接口方法

2.1接口类

package com.imooc.dao;

import java.util.List;

import com.imooc.bean.Message;

/**
 * 与Message配置文件相对应的接口
 */
public interface IMessage {
	/**
	 * 根据查询条件查询消息列表
	 */
	public List queryMessageList(Message message);
}

2.2 调用

import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.imooc.bean.Message;
import com.imooc.db.DBAccess;

/**
 * 和message表相关的数据库操作
 */
public class MessageDao {
	
	/**
	 * 根据查询条件查询消息列表
	 */
	public List queryMessageList(Message message) {
		DBAccess dbAccess = new DBAccess();
		List messageList = new ArrayList();
		SqlSession sqlSession = null;
		try {
			sqlSession = dbAccess.getSqlSession();
			// 通过sqlSession执行SQL语句
			IMessage imessage = sqlSession.getMapper(IMessage.class);
			messageList = imessage.queryMessageList(message);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if(sqlSession != null) {
				sqlSession.close();
			}
		}
		return messageList;
	}
	
}

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Web框架及插件)