发表于: 2017-09-14 22:51:23

2 826


今天完成的事情:

1.学习了Mybaits框架

(1)Mybatis是一个持久性框架,它对JDBC的操作过程进行封装,使开发者只需要关注SQL本身,而不需要浪费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果检索等。

2.Mybatis架构图(图片来自网络)

3.

(1)mybatis配置

SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

(2)通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂

(3)由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

(4)mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

(5)Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

(6)Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

(7)Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

4.案例实践

package me.gacl.test;

import java.io.IOException;  

import java.io.InputStream;

import java.io.Reader;

import me.gacl.domain.User;

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class Test1 {

    public static void main(String[] args) throws IOException {

        //mybatis的配置文件

        String resource = "conf.xml";

        //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)

        InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource);

        //构建sqlSession的工厂

        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);

        //使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)

        //Reader reader = Resources.getResourceAsReader(resource); 

        //构建sqlSession的工厂

        //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);

        //创建能执行映射文件中sql的sqlSession

        SqlSession session = sessionFactory.openSession();

        /**

         * 映射sql的标识字符串,

         * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,

         * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL

         */

        String statement = "me.gacl.mapping.userMapper.getUser";//映射sql的标识字符串

        //执行查询返回一个唯一user对象的sql

        User user = session.selectOne(statement, 1);

        System.out.println(user);

    }

}

运行结果:

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: 

### Error building SqlSession.

### Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: org.xml.sax.SAXParseException; lineNumber: 20; columnNumber: 18; 元素类型为 "mappers" 的内容必须匹配 "(mapper*,package*)"。

at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23)

at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:79)

at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:63)

at me.gacl.test.Test1.main(Test1.java:20)

很不幸,出现了很多错误,现在还在排查中,,,,

明天的计划

1.继续排查错误原因

2.继续任务一第17步

遇到的问题

1.目前就上述案例运行错误,需要排查。

2.对于JDBC,Mybatis里各种步骤及各个配置文件关系还需要加强理解。

收获

1.线下学习节奏很紧凑,我需要加快脚步。


返回列表 返回列表
评论

    分享到