Mybatis一

来源:互联网 发布:可利电气经营数据 编辑:程序博客网 时间:2024/06/11 05:38

Mybatis架构

1、  mybatis配置    SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。    mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。    此文件需要在SqlMapConfig.xml中加载.2、  通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂3、  由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。4、  mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,      一个是基本执行器、一个是缓存执行器。5Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。      mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。6Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor    通过  Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc    编程中对preparedStatement设置参数。7Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过    Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程    中对结果的解析处理过程。

mybatis核心包、依赖包、数据驱动包

ant-1.9.6.jarant-launcher-1.9.6.jarasm-5.2.jarcglib-3.2.5.jarcommons-logging-1.2.jarjavassist-3.21.0-GA.jarjunit-4.9.jarlog4j-1.2.17.jarlog4j-api-2.3.jarlog4j-core-2.3.jarmybatis-3.4.4.jarmysql-connector-java-5.1.7-bin.jarognl-3.1.14.jarslf4j-api-1.7.25.jarslf4j-log4j12-1.7.25.jar
    <!-- id:sql语句唯一标识 parameterType:指定传入参数类型     resultType:返回结果集类型     #{}:启动占位作用,如果传入的是基本类型,那么名称随意 -->    ${}拼接符:字符串原样拼接如果传入的是基本类型,那么${}中的变量名必须是value    注意:使用拼接符有可能造成sql注入,在页面输入的时候可以加入校验,不可输入sql关键字,不可输入空格

会话工厂

    private SqlSessionFactory sqlSessionFactory =  null;    @Before    public void create  SqlSessionFactory() throws Exception {        // 配置文件        String resource = "SqlMapConfig.xml";        // 通过流将核心配置文件读取进来        InputStream inputStream = Resources.getResourceAsStream(resource);        // 通过核心配置文件输入流来创建会话工厂        sqlSessionFactory = new SqlSessionFactoryBuilder()                    .build(inputStream);        // 通过工厂创建会话            sqlSession = sqlSessionFactory.openSession();            // 第一个参数:调用的sql语句= namespace.Id            User user = sqlSession.selectOne("test.findUserById", 10);    }

Mapper动态代理方式

映射文件

<!-- mapper接口代理实现编写规则:    1. 映射文件中的namespace要等于接口的全路径名称    2. 映射文件中sql语句的id要等于接口的方法名称    3. 映射文件中传入参数类型要等于接口方法的传入参数类型    4. 映射文件中返回结果集类型等于接口方法的返回值类型 --><mapper namespace="com.bf.mapper.UserMapper">

通过getMapper方法实例化接口

session = factory.openSession();            UserMapper mapper = session.getMapper(UserMapper.class);

加载映射文件

        <!--              使用class属性引入接口的全路径名称             使用规则:1. 接口名称和映射文件名称除扩展名外要完全相同                    2. 接口和映射文件要放在同一个目录下         -->        <mapper class="com.bf.mapper.UserMapper"/>

    // 动态代理形式中,如果返回结果集为List,那么mybatis会在生成的实现类中自动使用selectList方法    List<User> findUsersByName(String name);

SqlMapConfig.xml配置文件

configuration 配置properties 属性settings 设置typeAliases 类型命名typeHandlers 类型处理器objectFactory 对象工厂plugins 插件environments 环境environment 环境变量transactionManager 事务管理器dataSource 数据源databaseIdProvider 数据库厂商标识mappers 映射器
    <typeAliases>    <!-- 使用包扫描的方式批量定义别名(按java命名规则来) -->        <package name="com.bf.pojo"/>    </typeAliases>
    <mappers>        <!-- 使用包扫描的方式批量引入mapper接口 -->        <package name="com.bf.mapper"/>    </mappers>