早期MyBatis开发与接口式Mybatis开发的简介

Posted 大伟_Dawei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了早期MyBatis开发与接口式Mybatis开发的简介相关的知识,希望对你有一定的参考价值。

早期MyBatis开发与接口式Mybatis开发的简介

一、早期版本的myBatis使用  

         导jar包
            1、配置mybatis.xml的配置文件
                1)、需要加载数据库配置文档           

    <properties resource="db.properties" />

                2)、配置数据源,数据库连接池、处理事务方式

 <environments default="development">
     <environment id="development">
           <transactionManager type="JDBC"/>
           <!-- 链接数据库 的数据池 -->
           <dataSource type="POOLED">
                 <property name="username" value="${jdbc.username}" />
                 <property name="password" value="${jdbc.password}" />
                 <property name="url" value="${jdbc.url}" />
                 <property name="driver" value="${jdbc.driver}" />
            </dataSource>
      </environment>
</environments>

                3)、配置映射文件 即xml中配置的sql语句文件 文件位置需要使用/ 不能使用 .

 <mapper url="file:///var/mappers/AuthorMapper.xml"/>
 <mapper resource="org/mybatis/builder/PostMapper.xml"/>
 <mappers>
      <mapper resource="com/da/wei/mapper.xml"/>
 </mappers>

            2、配置映射mapper.xml
             

  <mapper namespace="com.cn.mybatis.mapper.EmployeeMapper">
      <!-- 命名空间使用将要映射执行方法的接口文件  在此处,原始的方法中,命名空间的作用并不明显-->
      <!-- 查询所以字段信息 -->
      <select id="selectAllEmployee" resultType="com.cn.mybatis.entity.Employee">   
         SELECT     emp_id AS empId,emp_name AS empName,emp_gender AS empGender,emp_email AS empEmail FROM employee
      </select>
      <!-- 通过id号查询员工信息 -->
      <select id="selectEmployeeById" resultType="com.cn.mybatis.entity.Employee" parameterType="java.lang.Integer">
         SELECT     emp_id AS empId,emp_name AS empName,emp_gender AS empGender,emp_email AS empEmail
          FROM employee WHERE emp_id = #{empId}
      </select>
  </mapper>

            3、执行sql操作
                执行步骤:
                    1、配置资源文件
                    2、设置输入流
                    3、通过输入流创建会话工厂
                         new SqlSessionFactoryBuilder().build(iS);
                    4、通过会话工厂创建会话
                        sqlSessionFactory.openSession();
                    5、通过会话执行sql
                        sqlSession.selectOne("com.cn.mybatis.mapper.EmployeeMapper.selectEmployeeById",1);
                        其中第一个参数是映射过去的参数,即需要执行的方法体的全限定名
                        第二个是参数,需要与设置的值类型(方法体的参数类型统一)
                        这里可以直接强转到想获得的类型,默认为Object                       
                        sqlSession.selectList("com.cn.mybatis.mapper.EmployeeMapper.selectAllEmployee",Employee.class);
                        这里查询返回list 可以通过使用类类型设置返回值的类型,可是不能使用参数                

              6、关闭会话
                  sqlSession.close();

 1   private static SqlSessionFactory getSqlSessionFactory(){
 2       //1、配置资源文件
 3       String source = "mybatis.xml";
 4       //2、设置输入流
 5       InputStream iS = null;
 6       //3、创建会话工厂
 7       SqlSessionFactory sqlSessionFactory = null;
 8       try {
 9             //4、将配置文件以流的方式读入
10             iS = Resources.getResourceAsStream(source);
11             //5、根据配置文件创建会话工场
12            sqlSessionFactory = new SqlSessionFactoryBuilder().build(iS);
13            return sqlSessionFactory;
14              } catch (IOException e) {
15               // TODO Auto-generated catch block
16                e.printStackTrace();
17             }
18       return null;
19 }
20 public static void test01(){
21     SqlSessionFactory sqlSessionFactory = null;
22     SqlSession sqlSession = null;
23     //获取会话工厂
24     sqlSessionFactory = getSqlSessionFactory();
25     if(sqlSessionFactory!=null){
26         //6、由会话工程创建会话
27         sqlSession = sqlSessionFactory.openSession();
28         //7、由会话执行sql
29        Employee employee = sqlSession.selectOne("com.cn.mybatis.mapper.EmployeeMapper.selectEmployeeById",1);
30        System.out.println(employee);
31        System.out.println("==============标准割==============");
32        List<Employee> listEmployee = sqlSession.selectList("com.cn.mybatis.mapper.EmployeeMapper.selectAllEmployee",Employee.class);
33         //    System.out.println(listEmployee);
34         for(Employee emp : listEmployee){
35                 System.out.println(employee);
36           }           //sqlSession.selectList("com.cn.mybatis.mapper.EmployeeMapper.selectAllEmployee", rowBounds)
37          sqlSession.close(); 
38    }
39 }

        早期版本的myBatis其执行的过程为,    
            1、在使用时,通过引用资源mybatis.xml,创建会话工厂
            2、业务执行时,加载mybatis的配置文件
                在mybatis中加载数据库的配置文件db.properties文件,进行数据库数据源配置,同时进行数据连接池,数据库事务管理的配置。
            3、在mybatis中加载sql映射文件mapper.xml
            4、会话工厂创建会话,通过创建出来的会话进行功能调用
                调用时,其中的statement参数需要执行,执行方法的全限定名。
            5、使用过后进行会话的关闭。                      

 二、接口式版本开发        

      接口版本配置基本一致          

    1、mybatis.xml配置
                其中映射使用的mapper.xml需要指定到对应的包下
            2、mapper.xml配置
                按照开发规范,这里需要将mapper的名字配置与接口方法同名且在同一包下。
                    且命名空间此时用有效需要设置,其值是对应的mapper.xml的接口文件全限定名。
            3、使用

      在调用时不再是以前的那种statement的配置方式了
                通过创建出来的会话,通过获取映射的方式,获取mapper方法接口的代理对象,使用其代理对象进行方法体的直接调用
                //由会话工程创建会话
                sqlSession = sqlSessionFactory.openSession();
                //通过会话获取方法->代理对象
                EmployeeMapper employeeMapper = sqlSession.getMapper(com.cn.mybatis.mapper.EmployeeMapper.class);
                List<Employee> listEmployee = employeeMapper.selectAllEmployee();
                Employee employee = employeeMapper.selectEmployeeById(4);    

 以上两种方式的比较:            

  1、接口方式的sql语句mapper.xml的需要按照规范,与接口方法放在同包下,且保持同名。
                    早期方法只需要在mybatis下指定对应的地址即可
                接口的方式更加规范和易读,可以提高开发效率。    
            2、接口方法在调用时,接口采用通过会话工厂创建代理对象的方式,使用代理对象调用接口中的方法使之实现。
                    早期方法使用会话直接使用,使用会话的方法指定对应的statement(方法的全限定名)进行sql操作。
                接口方式由于直接调用方法,因此可以对参数进行检验验证。

 











































以上是关于早期MyBatis开发与接口式Mybatis开发的简介的主要内容,如果未能解决你的问题,请参考以下文章

JAVAEE框架技术之10-myBatis注解式开发

JAVAEE框架技术之10-myBatis注解式开发

MyBatis| MyBatis的注解式开发

13.MyBatis注解式开发

MyBatis 源码分析——SqlSession接口和Executor类

mybatis的mapper接口动态代理开发