早期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();

   private static SqlSessionFactory getSqlSessionFactory(){
//1、配置资源文件
String source = "mybatis.xml";
//2、设置输入流
InputStream iS = null;
//3、创建会话工厂
SqlSessionFactory sqlSessionFactory = null;
try {
//4、将配置文件以流的方式读入
iS = Resources.getResourceAsStream(source);
//5、根据配置文件创建会话工场
sqlSessionFactory = new SqlSessionFactoryBuilder().build(iS);
return sqlSessionFactory;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static void test01(){
SqlSessionFactory sqlSessionFactory = null;
SqlSession sqlSession = null;
//获取会话工厂
sqlSessionFactory = getSqlSessionFactory();
if(sqlSessionFactory!=null){
//6、由会话工程创建会话
sqlSession = sqlSessionFactory.openSession();
//7、由会话执行sql
Employee employee = sqlSession.selectOne("com.cn.mybatis.mapper.EmployeeMapper.selectEmployeeById",1);
System.out.println(employee);
System.out.println("==============标准割==============");
List<Employee> listEmployee = sqlSession.selectList("com.cn.mybatis.mapper.EmployeeMapper.selectAllEmployee",Employee.class);
// System.out.println(listEmployee);
for(Employee emp : listEmployee){
System.out.println(employee);
} //sqlSession.selectList("com.cn.mybatis.mapper.EmployeeMapper.selectAllEmployee", rowBounds)
sqlSession.close(); 
}
}

早期版本的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开发的简介的更多相关文章

  1. 通过自动回复机器人学Mybatis 笔记:接口式编程

    [接口式编程]尚未遇见Spring --> 代码量反而增加 1.增加约定,减少犯错的可能(不用直接去写字符串 修改点1:命名空间 修改点2:增加接口,方法名与配置文件中的id对应 package ...

  2. 通过自动回复机器人学Mybatis笔记:接口式编程

    [接口式编程]尚未遇见Spring --> 代码量反而增加 1.增加约定,减少犯错的可能(不用直接去写字符串 修改点1:命名空间 修改点2:增加接口,方法名与配置文件中的id对应 package ...

  3. MyBatis的接口式编程Demo

    很久没细看过MyBatis了,时间一长就容易忘记. 下面是一个接口式编程的例子. 这里的例子一共分为4步: 1 首先要有一个namespace为接口的全类名的映射文件,该例中是 IMyUser.xml ...

  4. 《PHP开发APP接口》笔记

    PHP开发APP接口 [TOC] 课程地址 imooc PHP开发APP接口 学习要点 APP接口简介 封装通信接口方法 核心技术 APP接口实例 服务器端 -> 数据库|缓存 -> 调用 ...

  5. spring和mybatis的整合开发(基于MapperScannerConfigurer的整合开发(适用于复杂项目,接口较多的情况))

    在实际项目中,Dao层会包含很多接口,这样会导致spring配置文件过于臃肿.这时就需要采用扫描包的形式来配置mybaits中的映射器. 采用MapperScannerConfigurer来实现. M ...

  6. spring和mybatis的整合开发(基于MapperFactoryBean的整合开发(方便简单不复杂))

    MapperFactoryBean是mybati-spring团队提供的一个用于根据mapper接口生成mapper对象的类. 在spring配置文件中可以配置以下参数: 1.mapperInterf ...

  7. mybatis学习(三)——接口式编程

    对于上一节中的查询我们还可以通过接口的方式进行编程,开发环境和上一节一样 1.全局配置文件mybatis_config.xml(和上一节一样) <?xml version="1.0&q ...

  8. MyBatis开发Dao的原始Dao开发和Mapper动态代理开发

    目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Ma ...

  9. SSM框架之Mybatis(3)dao层开发

    Mybatis(3)dao层开发 以实现类完成CRUD操作 1.持久层dao层接口的书写 src\main\java\dao\IUserDao.java package dao; import dom ...

随机推荐

  1. 用Maven创建web项目

    使用eclipse插件创建一个web project 首先创建一个Maven的Project如下图 我们勾选上Create a simple project (不使用骨架) 这里的Packing 选择 ...

  2. [Tyvj 1728] 普通平衡树

    大名鼎鼎的板子题w 照例先贴题面 Describtion 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. ...

  3. 关于SGA与memory_target 大小冲突照成数据库无法挂载问题

    关于SGA与memory_target 大小冲突照成数据库无法挂载问题   错误信息: ORA-00844: Parameter not taking MEMORY_TARGET into accou ...

  4. 22. leetcode 242. Valid Anagram(由颠倒字母顺序而构成的字)

    22. 242. Valid Anagram(由颠倒字母顺序而构成的字) Given two strings s and t, write a function to determine if t i ...

  5. 用于NLP的CNN架构搬运:from keras0.x to keras2.x

    本文亮点: 将用于自然语言处理的CNN架构,从keras0.3.3搬运到了keras2.x,强行练习了Sequential+Model的混合使用,具体来说,是Model里嵌套了Sequential. ...

  6. overlay 是如何隔离的?- 每天5分钟玩转 Docker 容器技术(53)

    不同的 overlay 网络是相互隔离的.我们创建第二个 overlay 网络 ov_net2 并运行容器 bbox3. bbox3 分配到的 IP 是 10.0.1.2,尝试 ping bbox1( ...

  7. MyEclipse Web 项目导入 Eclipse 中需要改的文件

    来自为知笔记(Wiz)

  8. js获取url,截取url参数,截取url后文件名

    获取当前: var url = window.location.href; 百度为例: var url=window.location.href; console.info(url); http:// ...

  9. HTML中表格

    HTML表格 [表格table] 表格用table表示,表格中的每一行tr表示,一行中的每一列用td表示 th表示的是:表头.表头中的文字,默认为加粗居中.th要放在tr中,用于替换掉td. [tab ...

  10. mysql 报错 session halted的解决办法,实际工作中的结论。

    写后台程序,发现执行到sql语句时就报错session halted,如下图: 也上网搜过蛮多方法,都不能解决我的问题.后来自己发现了症结所在,其实很简单:执行insert的语句没有包含not nul ...