MyBatis介绍及主要类

一.MyBatis

一.MyBatis框架

mybatis框架
	一个框架,早期叫做ibatis,代码在gi thub 
	mybatis是MyBatis sQL Mapper Framework for Java ( sql映射框架)
	1) sql mapper. : sql映射
		可以把数据库表中的一行数据映射为一个java对象.
		一行数据可以看做是一个java对象。操作这个对象,就相当于操作表中的数据
	2)DataAccessobjects(DAOs):数据访问,对数据库执行增删改查.\
	
mybatis提供了哪些功能:
	1.提供了创建Connection , statement, Resultset的能力,不用开发人员创建这些对象了
	2.提供了执行sq1语句的能力, 不用你执行sql
	3.提供了循环sql,把sql 的结果转为java对象,List集合 的能力
	while (rs.next()) {
		Student stu = new student() ;
		stu. setId(rs .getInt("id")) ;
		stu . setName (rs . getstring ("name")) ;
		stu. setAge (rs .getInt("age")) ;
		//从数据库取出数据转为student 对象,封装到List 集合
		stulist. add(stu) ;
	}
	4.提供了关闭资源的能力,不用你关闭Connection, statement, Resultset

开发人员做的是: 提供sql语句
最后是: 开发人员提供 sql 语句---mybatis处理sql---开发人员得到List集合或者java对象(表中的数据)

总结: 
mubatis是一个sql映射框架,提供的数据库的操作能力.(增强的JDBC)
使用mybatis让开发人员集中精神写sql就可以了,不必关心connection,statement,resultset的创建,销毁,sql的执行

二.主要类的介绍

1. Resources : mybatis中的一个类,负责读取主配置文件
	InputStream in = Resources.getResourceAsStream("mybatis.xml");
	
2. SqlSessionFactoryBuilder : 创建sqlSessionFactory对象,
	SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder()
	//创建SqlSessionFactory对象
	SqlSessionFactory factory = builder.build(in);
	
3. SqlSessionFactory : 重量级对象,程序创建一个对象耗时较长,使用资源较多.在整个项目中,有一个就够用了.
	SqlSessionFactory(接口) : 接口实现类 : DefaultSqlSessionFactory
	SqlSessionFactory作业: 获取SqlSession对象.
	SqlSession SqlSession = factory.openSession();
	openSession()方法说明: 无参时,表示非自动提交事务,
						 带参数(true),表示获取自动提交事务
						 带参数(false),表示非自动提交事务,

4. SqlSession 
	SqlSession接口:定义了操作数据的方法 
		例如: selectOne() , selectList() , insert() , update() , delete()已经控制事务的方法.
	SqlSession接口的实现类DefaultSqlSession
	作用要求: 
		SqlSession对象不是线程安全的,需要在方法内部使用,
		在执行sql语句之前,使用openSession()获取SqlSession,
		在执行完sql语句后,需要执行SqlSession.close()方法关闭它,
		这样才能保证他的使用是线程安全的.


MyBatis工具类

public class MyBatisUtils {

    private static SqlSession sqlSession;

    static {
        try {
            InputStream in = Resources.getResourceAsStream("mybatis.xml");
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
            sqlSession = factory.openSession(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
	//获取sqlSession对象
    public static SqlSession getSqlSession(){
        return sqlSession;
    }
	
    //关闭sqlSession对象
    public static void closeSqlSession(SqlSession sqlSession){
        sqlSession.close();
    }

}

使用 MyBatis 动态代理简化执行操作

		/*
        *   使用mybatis的动态代理机制 , 使用SqlSession.getMapper(dao接口)
        *   getMapper能获取dao接口对应的实现类对象.
        *
        * */
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserDao dao = sqlSession.getMapper(UserDao.class);
        // dao 是JDK的动态代理
        // 输出dao
        System.out.println(dao.getClass().getName());
        //调用dao的方法,执行数据库操作
        List<User> users = dao.selectUser();
        //关闭资源
        MyBatisUtils.closeSqlSession(sqlSession);
        for (User user : users) {
            System.out.println(user);
        }
        
        
/*
        *   List<User> users = dao.selectUser();
        *   1.dao对象,类型是StudentDao , 全限定名称是: com.dsm.dao.UserDao
        *       全限定名称和 namespace 是一致的
        *
        *   2.方法名称 , selectStudents , 这个方法就是mapper文件中的id值 selectStudents
        *
        *   3.通过dao中方法的返回值也可以确定MyBatis要调用的方法
        *       如果返回值是List , 调用的是 SqlSession.selectList方法.
        *       如果返回值是 int , 或者是非list , 看 mapper 文件中的标签是<insert> , <update>等
        *    就会调用SqlSession的insert update等方法
        *
        *   mybatis的动态代理: mybatis根据 dao的方法调用, 获取执行sql语句的信息.
        *       mybatis根据你的dao接口, 创建出一个dao接口的实现类, 并创建这个类的对象.完成SqlSession调用方法, 访问数据库
        * */

版权声明:本文为DSM781314056原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。