Mybatis学习【1】

Mybatis(持久层框架)

1. 概述:让用户只关注sql语句本身,使用ORM思想实现结果集的封装。

        ORM:Object Relational Mappging(对象关系映射)

2. 环境搭建:

(1):创建maven项目填入mybatis和mysql驱动包的依赖坐标;

(2):创建实体类和dao的接口;

(3):创建mybatis主配置文件:SqlMapConfig.xml;

(4):创建映射配置文件IUserDao.xml。(也可以用注解配置:①在dao接口方法前写注解@Select并指定sql语句;②在主配置文件中用class指定dao接口名)

3. 使用:

(1):读取配置文件(XML解析);

(2):创建SqlSessionFactory(创建者模式);

(3):创建SqlSession对象(使用工厂创建:openSession());

(4):使用SqlSession创建dao接口的代理对象;

(5):使用代理对象执行接口方法(selectList()或其他);

(6):释放资源。

4. selectList方法执行的细节:

(1):selectList("cn.xupt.dao.IUserDao.findAll")方法通过一个字符串类型的Statement:cn.xupt.dao.IUserDao.findAll来找到对应的mapper对象,这个mapper对象中存有两个东西:

①对应方法的要执行的sql语句;

②要封装成的对象的实体类的路径(cn.xupt.domain.User)。

(2):需要给selectList提供的信息有两个:

①数据库的连接信息(那四条:驱动类路径、url、username、password);

②映射信息:其实就是mapper对象,这样的mapper对象有很多个,我们将它们存在一个map集合中,key值就是上面说的那个statement对象:cn.xupt.dao.IUserDao.findAll,value则是(1)中说的。

5. Mybatis的底层实现过程:

(1):主要的类

(2):配置文件:

(3):类的介绍:

①:Resources类是读取主配置文件(SqlMapConfg.xml)流的类;

②:Configuration类存储连接数据库的四个信息以及mappers集合(map集合);

③:Mapper类就对应了上面讲的,里面有sql语句和结果集类型;

④:XMLConfigBuilder类是解析XML文件的工具类,它有如下功能:

——将主配置文件中的连接数据库的四个信息读取出来封装成一个Configuration对象并返回;

——将每个dao配置文件中的每一个mapper对象组装好并加入到mappers中返回。

⑤:SqlSessionFactoryBuilder类用于构建工厂类(需要传入参数);

⑥:SqlSessionFactory工厂接口,这个接口里面定义了这个工厂可以生产的SqlSession对象的方法;

⑦:DefaultSqlSessionFactory类就是工厂类,它需要实现工厂接口,重写接口里的方法,让这个工厂类可以生产DefaultSqlSession这样的对象(若接口中有一个方法,此处就是工厂方法模式,若接口中有多个方法,也就是说一个工厂可以生产多个产品,此处就是抽象工厂模式);

⑧:SqlSession接口是主要和数据库交互的核心接口,它可以创建dao接口的代理对象(MapperProxy);

⑨:MapperProxy是代理对象,它可以在执行dao接口的指定方法的基础上增强它;

⑩:Executer类中有selectList(),就是jdbc访问数据库(传入con和mapper)。

(4):处理过程:

        //1.读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession session = factory.openSession();
        //4.使用SqlSession创建Dao接口的代理对象
        IUserDao userDao = session.getMapper(IUserDao.class);
        //5.使用代理对象执行方法
        List<User> users = userDao.findAll();
        for(User user : users){
            System.out.println(user);
        }
        //6.释放资源
        session.close();
        in.close();

①:用io.Resources类读取配置文件流;

②:将流传给SqlSessionFactoryBuilder让它创建一个可以生产DefualtSqlSession的工厂实现类DefualtSqlSessionFactory;

③:工厂类生产一个DefualtSqlSession对象,这个对象又通过getMapper()方法创建了一个IUserDao接口的代理对象;

④:这个代理对象通过mapper的键值寻找到sql语句和结果集类型并传参给selectList()方法让它执行查询;

⑤:释放资源。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值