MyBatis的接口式编程Demo
很久没细看过MyBatis了,时间一长就容易忘记。
下面是一个接口式编程的例子。
这里的例子一共分为4步:
1 首先要有一个namespace为接口的全类名的映射文件,该例中是 IMyUser.xml
2 然后在mybatis的容器(就是总的配置文件)里的mappers标签内
引入第1步中的映射文件,这里是 IMyUser.xml
3 通过SqlSession对象的getMapper(IMyUserDao.class)
获取一个接口的代理对象
4 调用代理对象的具体方法,也就是对应着 IMyUser.xml中的各个select,insert
等标签,这些标签的id属性同时必须与接口中的方法名一一对应
所需要的数据库表:
-- Create table
create table MYUSER
(
id NUMBER not null,
username VARCHAR2(32) not null,
password VARCHAR2(128) not null,
administrator VARCHAR2(5) not null
); insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
values ('', 'weiyongle01', 'hr', 'hr'); insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
values ('', 'weiyongle352', 'hr', 'hr'); insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
values ('', 'weiyongle353', 'hr', 'hr'); insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
values ('', '', 'hr', 'hr'); insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
values ('', 'weiyongle355', 'hr', 'hr'); insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
values ('', 'weiyongle359', 'hr', 'hr'); insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
values ('', 'weiyongle360', 'hr', 'wyl'); insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
values ('', 'weiyongle361', 'hr', 'hr'); insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
values ('', 'weiyongle362', 'hr', 'hr'); insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
values ('', 'weiyongle363', 'hr', 'hr'); insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
values ('', 'weiyongle364', 'hr', 'hr'); insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
values ('', 'weiyongle365', 'hr', 'hr'); insert into myuser (ID, USERNAME, PASSWORD, ADMINISTRATOR)
values ('', 'weiyongle359', 'hr', 'hr');
1 MyBatis配置文件,Configuration.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright 2009-2016 the original author or authors. Licensed under the
Apache License, Version 2.0 (the "License"); you may not use this file except
in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
OR CONDITIONS OF ANY KIND, either express or implied. See the License for
the specific language governing permissions and limitations under the License. -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration>
<settings>
<setting name="useGeneratedKeys" value="false" />
<setting name="useColumnLabel" value="true" />
</settings> <!-- <typeAliases> <typeAlias alias="UserAlias" type="org.apache.ibatis.submitted.complex_property.User"/>
</typeAliases> --> <environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="" value="" />
</transactionManager>
<dataSource type="UNPOOLED">
<!-- Oracle数据库配置 -->
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl2" />
<property name="username" value="hr" />
<property name="password" value="hr" />
</dataSource>
</environment>
</environments> <!-- 配置的实体类 20161106添加 -->
<mappers>
<!-- <mapper resource="org/apache/ibatis/submitted/complex_property/User.xml" /> -->
<!-- 这个路径是从src下开始的,即以src作为根目录的,
这点和Resources.getResourcesAsStream("xx")里的xx一样,都是指向的具体文件的路径
,都是以src为根目录 -->
<mapper resource="com/test/mybatis/config/MyUser.xml" />
<!-- 接口式编程 -->
<!-- <mapper class="com.test.mybatis.dao.interf.IMyUserDao"/> -->
<mapper resource="com/test/mybatis/config/IMyUser.xml" />
</mappers> </configuration>
2 IMyUser.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2009-2016 the original author or authors. Licensed under the
Apache License, Version 2.0 (the "License"); you may not use this file except
in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
OR CONDITIONS OF ANY KIND, either express or implied. See the License for
the specific language governing permissions and limitations under the License. -->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- MyBatis接口式编程 -->
<!-- 这里的namespace一定要是接口的全类名,这样就能够保证该mapper的唯一性 -->
<mapper namespace="com.test.mybatis.dao.interf.IMyUserDao">
<!-- select标签里的id属性值 getUser 对应着 上面namespace里的方法,
实际上就是接口里定义的方法 -->
<select id="getUser" resultType="com.test.mybatis.entity.MyUser" parameterType="int">
select * from MyUser where id = #{id}
</select>
<!-- select标签里的id属性值 getUserbyUser 对应着 上面namespace里的方法,
实际上就是接口里定义的方法 -->
<select id="getUserbyUser" parameterType="com.test.mybatis.entity.MyUser" resultType="com.test.mybatis.entity.MyUser" >
select * from MyUser
where 1=1
<!-- if 标签里的 test的属性值 username实际上是指的是
parameterType的属性值 com.test.mybatis.entity.MyUser
这个类里的一个成员属性,用于getter和setter方法,
不是之前理解的对应于数据库里的字段,还有username !=''
一定要写上,如果不写的话那么这个String类型的username成员变量
就会被MyBatis框架默认为"",从而可能会影响这里配置的slq的逻辑,
从而查询出来的结果可能会与我们自己设想中的不一样 -->
<if test="username != null and username !='' ">
AND username = #{username}
</if>
<if test="administrator != null and username !='' ">
AND administrator = #{administrator}
</if>
</select> <delete id="deleteUser" parameterType="String">
delete from MyUser where id = #{id}
</delete>
</mapper>
3.IMyUserDao.java
package com.test.mybatis.dao.interf; import com.test.mybatis.entity.MyUser; /**
* MyBatis接口式编程Demo
* @author Wei
* @time 2017年3月23日 下午1:26:21
*/
public interface IMyUserDao {
public MyUser getUser(int id);
public MyUser getUserbyUser(MyUser user);
public void deleteUser(String username);
}
4. IMyUserTest.java
package com.test.mybatis.dao.interf; import java.io.IOException;
import java.io.InputStream; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.test.mybatis.entity.MyUser; /**
* 接口式编程的测试类
* @author Wei
* @time 2017年3月23日 下午2:26:22
*/
public class IMyUserTest { public IMyUserTest() {
// TODO Auto-generated constructor stub
} public static void main(String[] args) {
InputStream is = null;
SqlSessionFactory factory = null;
SqlSession sqlsession = null;
try {
is = Resources.getResourceAsStream("com/test/mybatis/config/Configuration.xml");
factory = new SqlSessionFactoryBuilder().build(is);
sqlsession = factory.openSession();
/**
* 获取接口,实际上是通过代理模式来获取的代理对象
* 1 首先要有一个namespace为接口的全类名的映射文件,该例中是 IMyUser.xml
* 2 然后在mybatis的容器(就是总的配置文件)里的mappers标签内
* 引入第1步中的映射文件,这里是 IMyUser.xml
* 3 通过SqlSession对象的getMapper(IMyUserDao.class)
* 获取一个接口的代理对象
* 4 调用代理对象的具体方法,也就是对应着 IMyUser.xml中的各个select,insert
* 等标签,这些标签的id属性同时必须与接口中的方法名一一对应
*/
IMyUserDao dao = sqlsession.getMapper(IMyUserDao.class);
MyUser user = new MyUser();
user.setUsername("weiyongle363");
// user.setAdministrator("wyl");
//调用接口的方法
user = dao.getUserbyUser(user);//正常
// user = dao.getUser(361);//正常运行
// user = dao.getUser(355);
// MyUser user = sqlsession.selectOne("com.test.mybatis.dao.interf.IMyUserDao.getUser",1);
if(user!=null){
System.out.println(user.toString());
}else{
System.out.println("没有查询到结果");
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
执行结果:

MyBatis的接口式编程Demo的更多相关文章
- Mybatis面向接口式编程
Mybatis面向接口编程 1.xml文件书写格式 <?xml version="1.0" encoding="UTF-8" ?> <!DOC ...
- MyBatis源码解析【7】接口式编程
前言 这个分类比较连续,如果这里看不懂,或者第一次看,请回顾之前的博客 http://www.cnblogs.com/linkstar/category/1027239.html 修改例子 在我们实际 ...
- mybaits接口式编程
Mybatis是接口式编程实现对.xml中sql语句的执行,其过程如下(取自慕课网视频<通过自动回复机器人学Mybatis---加强版>): 1.加载配置信息2.通过加载配置信息加载一个代 ...
- Mybatis笔记二:接口式编程
目录 旧方法的弊端 接口式编程 接口式编程的好处 接口式编程的增删改查 旧方法的弊端 在Mybatis笔记一中,我们使用命名空间+id的方式实现了Mybatis的执行,不过这里的命名空间是我们随便写的 ...
- 通过自动回复机器人学Mybatis 笔记:接口式编程
[接口式编程]尚未遇见Spring --> 代码量反而增加 1.增加约定,减少犯错的可能(不用直接去写字符串 修改点1:命名空间 修改点2:增加接口,方法名与配置文件中的id对应 package ...
- 通过自动回复机器人学Mybatis笔记:接口式编程
[接口式编程]尚未遇见Spring --> 代码量反而增加 1.增加约定,减少犯错的可能(不用直接去写字符串 修改点1:命名空间 修改点2:增加接口,方法名与配置文件中的id对应 package ...
- MyBatis3-topic04,05 -接口式编程
笔记要点 /**接口式编程: * 1. 原生: Dao 接口-->Dao接口的实现类 * mybatis: Mapper --> 有一个与之对应的 XXMapper.xml * 2. Sq ...
- MyBatis接口式编程
MyBatis使用接口连接数据库 之前学习了如何传统的使用MyBatis连接数据库,今天学习如何使用更方便快捷的方式练级数据库.使用接口连接数据库 https://www.cnblogs.com/li ...
- MyBatis源码解析【8】简单demo理解接口式编程
前言 这个分类比较连续,如果这里看不懂,或者第一次看,请回顾之前的博客 http://www.cnblogs.com/linkstar/category/1027239.html 上一次我们经过源码的 ...
随机推荐
- aspx 页面中 js 引用与页面后台的数据交互 --【 后台调用 js 】
js 中调用后台方法 一.用Response.Write方法 Response.Write("<script type='text/javascript'>alert(&qu ...
- Java高阶语法---final
背景:听说final Java高阶语法是挺进BAT必经之路. final: final关键字顾名思义就是最终不可改变的. 1.含义:final可以声明成员变量.方法.类和本地变量:一旦将引用声明为fi ...
- bitset中_Find_first()与_Find_next()函数
bitset中_Find_first()与_Find_next()函数 很有趣但是没怎么有用的两个函数. _Find_fisrt就是找到从低位到高位第一个1的位置 #include<bits/s ...
- 谷歌AI涉足艺术、太空、外科手术,再强调AI七原则
谷歌AI涉足艺术.太空.外科手术,再强调AI七原则 https://mp.weixin.qq.com/s/MJG_SvKCEBKRvL3IWpL0bA 9月18日上午,Google在上海的2018世界 ...
- MPP架构海量数据分析仓库——Greenplum介绍
一.Greenplum背景 时间回到2002年,互联网行业经过近10年的发展,数据量正处于快速增长期: 1.传统的主机计算模式在海量数据面前,除了造价昂贵外,在CPU计算和IO吞吐上不能满足海量数据的 ...
- VS2015 IIS Express Web服务器无法启动解决办法
1.运行和调试vs2015项目 提示无法运行项目,打开vs2013项目发现可以正常运行,所以推测试vs2015项目配置有问题. 2.找到项目启动项中 .csproj文件,定位到<WebProje ...
- 【eclipse】mybatis配置文件创建与mapper接口文件创建
什么是mybatis: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射. mybatis配置文件: <?xml version="1.0" ...
- javascript弹出模态窗体
function openwindow(url,name,iWidth,iHeight){ //获得窗口的垂直位置 var iTop = (window.screen.availHeight-30-i ...
- linux-arm 安装 dotnetcore
X86或者X64 安装.net core runtime 可以参照 https://www.cnblogs.com/nnhy/p/netcore_centos.html#4122354 而 ...
- 关于opencv模板匹配功能的项目测试记录
模板匹配功能介绍的很好的一篇博客:https://www.cnblogs.com/XJT2018/p/9934139.html 就如上述博客所言:“若原图像中的匹配目标发生旋转或大小变化,该算法无效. ...