早期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();
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开发的简介的更多相关文章
- 通过自动回复机器人学Mybatis 笔记:接口式编程
[接口式编程]尚未遇见Spring --> 代码量反而增加 1.增加约定,减少犯错的可能(不用直接去写字符串 修改点1:命名空间 修改点2:增加接口,方法名与配置文件中的id对应 package ...
- 通过自动回复机器人学Mybatis笔记:接口式编程
[接口式编程]尚未遇见Spring --> 代码量反而增加 1.增加约定,减少犯错的可能(不用直接去写字符串 修改点1:命名空间 修改点2:增加接口,方法名与配置文件中的id对应 package ...
- MyBatis的接口式编程Demo
很久没细看过MyBatis了,时间一长就容易忘记. 下面是一个接口式编程的例子. 这里的例子一共分为4步: 1 首先要有一个namespace为接口的全类名的映射文件,该例中是 IMyUser.xml ...
- 《PHP开发APP接口》笔记
PHP开发APP接口 [TOC] 课程地址 imooc PHP开发APP接口 学习要点 APP接口简介 封装通信接口方法 核心技术 APP接口实例 服务器端 -> 数据库|缓存 -> 调用 ...
- spring和mybatis的整合开发(基于MapperScannerConfigurer的整合开发(适用于复杂项目,接口较多的情况))
在实际项目中,Dao层会包含很多接口,这样会导致spring配置文件过于臃肿.这时就需要采用扫描包的形式来配置mybaits中的映射器. 采用MapperScannerConfigurer来实现. M ...
- spring和mybatis的整合开发(基于MapperFactoryBean的整合开发(方便简单不复杂))
MapperFactoryBean是mybati-spring团队提供的一个用于根据mapper接口生成mapper对象的类. 在spring配置文件中可以配置以下参数: 1.mapperInterf ...
- mybatis学习(三)——接口式编程
对于上一节中的查询我们还可以通过接口的方式进行编程,开发环境和上一节一样 1.全局配置文件mybatis_config.xml(和上一节一样) <?xml version="1.0&q ...
- MyBatis开发Dao的原始Dao开发和Mapper动态代理开发
目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Ma ...
- SSM框架之Mybatis(3)dao层开发
Mybatis(3)dao层开发 以实现类完成CRUD操作 1.持久层dao层接口的书写 src\main\java\dao\IUserDao.java package dao; import dom ...
随机推荐
- 走进json
纯做笔记,请多指教... 1,json格式: 非数组: {"key" : "value"} 数组:[{"key" : "value ...
- 将csv格式的文件数据导入mysql中
示例如下: load data infile 'test.csv'into table `test`fields terminated by ',' optionally enclosed by '& ...
- log4j(一)——为什么要用log4j?
一:试验环境 OS:win7 JDK:jdk7 Log4j:1.2.17(好尴尬,原本是想试验下log4j2的,结果阴差阳错用了这个版本,不过幸好,试验也不白试验,试验的作用是一样的) 二:先看两个简 ...
- (转)Java.lang.reflect.Method invoke方法 实例
背景:今天在项目中用到Method 的invoke方法,但是并不理解,查完才知道,原来如此! import java.lang.reflect.Method; /** * Java.lang.refl ...
- (转)systemctl 命令完全指南
场景:在使用chkconfig查看vsftpd是否看机启动时候看不到启动项,用systemctl 才看到自己想要的结果 1 总结 from:https://linux.cn/article-5926- ...
- Redux源码分析之createStore
接着前面的,我们继续,打开createStore.js, 直接看最后, createStore返回的就是一个带着5个方法的对象. return { dispatch, subscribe, getSt ...
- Social Network Analysis的Centrality总结,以及networkx实现EigenCentrality,PageRank和KatzCentrality的对比
本文主要总结近期学习的Social Network Analysis(SNA)中的各种Centrality度量,我暂且翻译为中心度.本文主要是实战,理论方面几乎没有,因为对于庞大的SNA,我可能连门都 ...
- [补档][Lydsy2017年4月月赛]抵制克苏恩
[Lydsy2017年4月月赛]抵制克苏恩 题目 小Q同学现在沉迷炉石传说不能自拔.他发现一张名为克苏恩的牌很不公平. 如果你不玩炉石传说,不必担心,小Q同学会告诉你所有相关的细节.炉石传说是这样的一 ...
- 刚装的系统C盘占空间特别大怎么办?关闭win7的系统还原和调整虚拟内存
刚装的win7系统,C盘占空间特别大,清理垃圾,清理碎片之后还是特别大,检查一下,系统才20G,C盘却占用了40G,其实是没有关闭系统还原,再就是没有调整虚拟内存.win7旗舰版(其他版本也可能这样, ...
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(一)设计一套好的RESTful API
写在前面的话 看了一下博客目录,距离上次更新这个系列的博文已经有两个多月,并不是因为不想继续写博客,由于中间这段时间更新了几篇其他系列的文章就暂时停止了,如今已经讲述的差不多,也就继续抽时间更新< ...