早期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 ...
随机推荐
- 用Maven创建web项目
使用eclipse插件创建一个web project 首先创建一个Maven的Project如下图 我们勾选上Create a simple project (不使用骨架) 这里的Packing 选择 ...
- [Tyvj 1728] 普通平衡树
大名鼎鼎的板子题w 照例先贴题面 Describtion 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. ...
- 关于SGA与memory_target 大小冲突照成数据库无法挂载问题
关于SGA与memory_target 大小冲突照成数据库无法挂载问题 错误信息: ORA-00844: Parameter not taking MEMORY_TARGET into accou ...
- 22. leetcode 242. Valid Anagram(由颠倒字母顺序而构成的字)
22. 242. Valid Anagram(由颠倒字母顺序而构成的字) Given two strings s and t, write a function to determine if t i ...
- 用于NLP的CNN架构搬运:from keras0.x to keras2.x
本文亮点: 将用于自然语言处理的CNN架构,从keras0.3.3搬运到了keras2.x,强行练习了Sequential+Model的混合使用,具体来说,是Model里嵌套了Sequential. ...
- overlay 是如何隔离的?- 每天5分钟玩转 Docker 容器技术(53)
不同的 overlay 网络是相互隔离的.我们创建第二个 overlay 网络 ov_net2 并运行容器 bbox3. bbox3 分配到的 IP 是 10.0.1.2,尝试 ping bbox1( ...
- MyEclipse Web 项目导入 Eclipse 中需要改的文件
来自为知笔记(Wiz)
- js获取url,截取url参数,截取url后文件名
获取当前: var url = window.location.href; 百度为例: var url=window.location.href; console.info(url); http:// ...
- HTML中表格
HTML表格 [表格table] 表格用table表示,表格中的每一行tr表示,一行中的每一列用td表示 th表示的是:表头.表头中的文字,默认为加粗居中.th要放在tr中,用于替换掉td. [tab ...
- mysql 报错 session halted的解决办法,实际工作中的结论。
写后台程序,发现执行到sql语句时就报错session halted,如下图: 也上网搜过蛮多方法,都不能解决我的问题.后来自己发现了症结所在,其实很简单:执行insert的语句没有包含not nul ...