对MyBites总结,让你快速了解MyBites并且喜欢它。

1.概述,什么是MyBites,作用是什么?

它是一个半自动的ORM框架,可以自定义SQL,所以是半自动。
ORM叫对象关系模型,作用是把数据映射成程序中的POJO(entity),也可以把程序中的对象映射成数据库中的数据行。就不需要程序员编写烦琐的JDBC,可重用。简化工作。
缺点:MyBites的缺点是因为自定义SQL。所以数据库兼容性不好。如果要更改数据库,则要改:驱动,数据库连接字符串(driver,url),还有部分SQL指令。

2.使用步骤:

1.导入MyBites的Jar包,
2.添加主配置文件。文件名建议用:mybatis-config.xml。
3.添加映射文件。
4.创建MyBites的相关API对象。
5.通过这些对象来操作数据。

3.主配置文件的节点

主配置文件常用的节点有:属性文件,自身的配置节点,别名,环境,映射文件配置,节点名是固定的,顺序也是固定的。

      
      
    
  

	
		  
  
  
   
  
  
  

4.DTD文件与XSD文

这两种文件都可以来约束xml文件的节点(名称,属性名,顺序,数量,数据类型).
XSD是DTD替代者的原因,一是据将来的条件可扩展,二是比DTD丰富和有用,三是用XML书写,四是支持数据类型,五是支持命名空间。

5.映射文件配置

映射文件的作用是:封装SQL指令,这些指令根据它们的作用写在 insert,update,delete,select顶级元素里面。
Namespace:命名空间,给这个映射文件中的元素做区分。需要与数据持久层接口一致。
Id:每个元素都有一个ID值,这些值与数据持久层接口的方法名一致。
parameterType:此属性表示传递进去的参数,类型是别名,int,string,list,map, 或实体.
resultType:表示指令执行完毕之后的返回类型,如果是对象,则自动封装成实体对象。
resultMap:如果数据行中的列名与对象属性名不一同,则需要resultMap来映射。

	
	

	
	
	









	insert into smbms_user
	(userCode,userName,userPassword,
	userRole,gender,birthday,phone,address,creationDate,createdBy)
	values(#{userCode},#{userName},#{userPassword},#{role.id}
	,#{gender},#{birthday},#{phone},#{address},#{creationDate},#{createdBy})


	delete from smbms_user
	where id=#{delId}


	

	update smbms_user
	
		
			userName=#{userName},
		
		
			gender=#{gender},
		
		
			birthday=#{birthday},
		
		
			phone=#{phone},
		
		
			address=#{address},
		
		
			userRole=#{user.id},
		
		
			modifyBy=#{modifyBy},
		
		
			modifyDate=#{modifyDate},
		
	
	where id = #{id}


	update smbms_user set userPassword= #{pwd} where id =
	#{id}
 

  delete from smbms_user where id in (1,2,7,8)
  
    #{i}
  	  

6.相关API

SqlSessionFactoryBuild对象:此对象会根据主配置文件的流来创建SqlSessionFactory工厂对象。它只需要加载一次就行了。
SqlSessionFactory:此对象可以创建SqlSession对象。因为是工厂,在应用程序中只需要一个就行,所以,我们把做成单例模式。
SqlSession:此对象是一个会话对象,类似于Servlet中的Session内置对象。是一个连接,它的作用就是操作数据了。注意,此对象占资源,必须在操作结束后关闭此对象。数据操作时,查询不需要提交事务,而增,删,改必须提交事务 : sqlSession.commit();
这些对象太多的地方需要使用,所有把它们写在一个工具类中。
package cn.smbms.tools;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**

  • MyBatis的工具类,用于创建MyBatis相关的API SqlSessionFactory对象

  • @author Administrator *
    /
    public class MybatisUtil {
    static SqlSessionFactory factory = null;
    /
    *

    • 懒汉式单例模式,用于创建SqlSessionFactory工厂对象,单例模式。
      *目前这种写法还有线程同步的缺陷,后期再来处理。
      */
      private static SqlSessionFactory getSessionFactory() {
      if (factory == null) {
      try {
      // 把主配置文件形成一个输入流
      InputStream is = Resources.getResourceAsStream(“config/mybatis-config.xml”);
      // 创建工厂
      factory = new SqlSessionFactoryBuilder().build(is);
      } catch (IOException e) {
      e.printStackTrace();
      }
      }
      return factory;
      }

    // 返回一个会话对象
    public static SqlSession getSqlSession() {
    return getSessionFactory().openSession();
    }
    }

业务层处理操作数据:
@Override
public boolean deleteUserById(Integer delId) {
//调用工具类获取会话对象。
SqlSession session = MybatisUtil.getSqlSession();
boolean flag = false;
try {
//getMapper表示创建此接口的代理对象,代理对象的创建采用了反射机制。
//对象存储在父类的类型中,运用里氏替换原则。
UserDao dao = session.getMapper(UserDao.class);
//调用代理的对象的方法时,则自动找到映射文件对应的元素。
if(dao.deleteUserById(delId) > 0)
flag = true;
session.commit(); //增,删,改 必须提交事务
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();//关闭会话,释放资源。
}
return flag;
}

7.动态SQL

动态SQL是MyBites最强大的地方,可以简化复杂的SQL指令的拼接工作。
If :如果条件,则把里面的SQL指令拼接外部的SQL指令中。
Where:会自动在SQL上添加where关键字,并去掉最前面的多余的and或or。
Set:用于修改的语句上,自动加上set关键字,并把最后多余的逗号去掉。
Trim
Foreach:当传入的参数是list时,则用它把list中的元素一个个迭代出来,拼接到SQL指令中,通常用于in这种模糊查询中。
Choose -> when ->otherwise:如果只有一个when,则表示一个if->else结构块,如果有多个,则是一个多重if结构块。
这些与JSTL中的标签使用方式非常类似。

8.缓存

MyBites中有一级缓存和二级缓存。
一级缓存是基于SQLSession 级别,默认已经开启。
二级缓存是超出 SqlSession级别,需要在settings配置添加配置,并在映射文件中添加,
并且要求缓存的对象必须要可以序列化。
public class Role implements Serializable

你可能感兴趣的:(主配置文件的节点,DTD文件与XSD文,映射文件配置,相关API,缓存,动态SQL)