对于上一节中的查询我们还可以通过接口的方式进行编程,开发环境和上一节一样

1、全局配置文件mybatis_config.xml(和上一节一样)

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
  3. <configuration>
  4. <environments default="development">
  5. <environment id="development">
  6. <transactionManager type="JDBC" />
  7. <!-- 配置数据库源信息 -->
  8. <dataSource type="POOLED">
  9. <property name="driver" value="com.mysql.jdbc.Driver" />
  10. <property name="url" value="jdbc:mysql://localhost:3306/spring_mybatis" />
  11. <property name="username" value="root" />
  12. <property name="password" value="pjf520" />
  13. </dataSource>
  14. </environment>
  15. </environments>
  16. </configuration>

2、JAVA代码实体类(和上一节一样)

  1. package com.pjf.mybatis.po;
  2.  
  3. public class Hotel {
  4. private int hotelId;
  5. private String hotelName;
  6. private String hotelAddress;
  7. private int price;
  8.  
  9. public int getHotelId() {
  10. return hotelId;
  11. }
  12.  
  13. public void setHotelId(int hotelId) {
  14. this.hotelId = hotelId;
  15. }
  16.  
  17. public String getHotelName() {
  18. return hotelName;
  19. }
  20.  
  21. public void setHotelName(String hotelName) {
  22. this.hotelName = hotelName;
  23. }
  24.  
  25. public String getHotelAddress() {
  26. return hotelAddress;
  27. }
  28.  
  29. public void setHotelAddress(String hotelAddress) {
  30. this.hotelAddress = hotelAddress;
  31. }
  32.  
  33. public int getPrice() {
  34. return price;
  35. }
  36.  
  37. public void setPrice(int price) {
  38. this.price = price;
  39. }
  40.  
  41. @Override
  42. public String toString() {
  43. return "Hotel [hotelId=" + hotelId + ", hotelName=" + hotelName + ", hotelAddress=" + hotelAddress + ", price="
  44. + price + "]";
  45. }
  46.  
  47. }

3、(新增)编写hotelMapper接口

  1. package com.pjf.mybatis.dao;
  2.  
  3. import com.pjf.mybatis.po.Hotel;
  4.  
  5. public interface HotelMapper {
  6.  
  7. public Hotel getHotel(Integer i);
  8. }

4、(修改)编写sql映射文件hotelMapper.xml

这里修改了namespace,定义为接口的类全名,上一节这里可以随便写。

然后修改了sql的id,对应到接口中的方法,这样xml和接口就一一对应了

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  3. <!-- 这里的namespace写hotelMapper接口的类全名,和接口一一对应 -->
  4. <mapper namespace="com.pjf.mybatis.dao.HotelMapper">
  5.  
  6. <!-- 这里的id写hotelMapper接口对应的方法名 -->
  7. <select id="getHotel" resultType="com.pjf.mybatis.po.Hotel">
  8. select id,hotel_name as
  9. hotelName, hotel_address as hotelAddress, price from hotel
  10. where
  11. id=#{id}
  12. </select>
  13.  
  14. </mapper>

5、(修改)编写测试类

  1. package com.pjf.mybatis;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import org.apache.ibatis.io.Resources;
  6. import org.apache.ibatis.session.SqlSession;
  7. import org.apache.ibatis.session.SqlSessionFactory;
  8. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  9. import org.junit.Test;
  10.  
  11. import com.pjf.mybatis.dao.HotelMapper;
  12. import com.pjf.mybatis.po.Hotel;
  13.  
  14. public class TestHotel {
  15.  
  16. public SqlSessionFactory sqlSessionFactory() throws IOException {
  17. // mybatis的配置文件
  18. String resource = "mybatis_config.xml";
  19. // 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)TestHotel.class.getClassLoader()
  20. InputStream is = Resources.getResourceAsStream(resource);
  21. // 构建sqlSession的工厂
  22. SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
  23. return sessionFactory;
  24. }
  25.  
  26. @Test
  27. public void getHotel() throws IOException {
  28. //如果有多个会话,会新建多个SqlSessionFactory,将重复的内容通过函数提取出来了
  29. SqlSessionFactory sessionFactory = sqlSessionFactory();
  30. // 打开jdbc会话
  31. SqlSession session = sessionFactory.openSession();
  32. // 创建hotelMapper类的实例
  33. // 虽然这是个接口,但是mybatis会通过动态代理新建一个实体类
  34. // 可以通过System.out.println(hotelMapper.getClass())查看该类的类型
  35. // 输出class com.sun.proxy.$Proxy5,可以看到是一个代理类
  36. HotelMapper hotelMapper = session.getMapper(HotelMapper.class);
  37. System.out.println(hotelMapper.getClass());
  38.  
  39. Hotel hotel = hotelMapper.getHotel(1001);
  40. System.out.println(hotel);
  41. session.close();
  42. }
  43. }

可以看到结果和之前一致。

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. MyBatis源码解析【7】接口式编程

    前言 这个分类比较连续,如果这里看不懂,或者第一次看,请回顾之前的博客 http://www.cnblogs.com/linkstar/category/1027239.html 修改例子 在我们实际 ...

  5. Mybatis笔记二:接口式编程

    目录 旧方法的弊端 接口式编程 接口式编程的好处 接口式编程的增删改查 旧方法的弊端 在Mybatis笔记一中,我们使用命名空间+id的方式实现了Mybatis的执行,不过这里的命名空间是我们随便写的 ...

  6. mybaits接口式编程

    Mybatis是接口式编程实现对.xml中sql语句的执行,其过程如下(取自慕课网视频<通过自动回复机器人学Mybatis---加强版>): 1.加载配置信息2.通过加载配置信息加载一个代 ...

  7. MyBatis3-topic04,05 -接口式编程

    笔记要点 /**接口式编程: * 1. 原生: Dao 接口-->Dao接口的实现类 * mybatis: Mapper --> 有一个与之对应的 XXMapper.xml * 2. Sq ...

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

    早期MyBatis开发与接口式Mybatis开发的简介 一.早期版本的myBatis使用 导jar包            1.配置mybatis.xml的配置文件                1) ...

  9. 深度学习初探——符号式编程、框架、TensorFlow

    一.命令式编程(imperative)和符号式编程(symblic) 命令式: import numpy as np a = np.ones(10) b = np.ones(10) * 2 c = b ...

  10. MyBatis学习(三)---MyBatis和Spring整合

    想要了解MyBatis基础的朋友可以通过传送门: MyBatis学习(一)---配置文件,Mapper接口和动态SQL http://www.cnblogs.com/ghq120/p/8322302. ...

随机推荐

  1. Java MVC 分页实例

    共4个文件 requestLogList.jsp RequestInfoController.java RequestInfoBean.java RequestInfoService.java 1.r ...

  2. 关于svn提交的时候强制写注释

    本文固定链接: http://www.linuxyan.com/linux-service/229.html 转载请注明: admin 2012年09月29日 于 ㄨ销声匿迹.Linux 发表 在sv ...

  3. WPF中播放视频音频

    首先要在WPF中播放视频和音频,我们就需要用到MediaElement控件,下面我们示例播放音频和视频. 用MediaElement播放音频: 第一步:将你需要播放的音频(mp3)放在你WPF项目的D ...

  4. Vue 前端面试题[转]

    https://mp.weixin.qq.com/s/Uxhx2dJ1Xbm6N3Gl7wNZNw Vue 前端面试题 游荡de蝌蚪 前端开发 1周前 作者:游荡de蝌蚪 https://segmen ...

  5. 树状数组 简单题 cf 961E

    题目链接 : https://codeforces.com/problemset/problem/961/E One day Polycarp decided to rewatch his absol ...

  6. java第九次作业:第九章例题3个

    作业1: 例题9.1 制作圆类,根据圆的半径求出周长及面积 package com.swift; //抽象的方法构成类,把属性和方法进行封装 public class Circle { // 两个方面 ...

  7. ZJOI2018游记Round1

    广告 ZJOI2018Round2游记 All Falls Down 非常感谢学弟学妹们捧场游记虽然这是一篇假游记 ZJOI Round1今天正式落下帷幕.在这过去的三天里遇到了很多朋友,见识了很多有 ...

  8. mysql 5.5安装/卸载使用总结

    安装 卸载 1.在控制面板->卸载与更改程序 中卸载mysql 2.删除安装目录下的mysql文件夹 3.删除隐藏文件夹C:\ProgramData\中的MySQL,否则再次安装时会卡在 sta ...

  9. (28)zabbix用户宏变量详解macro

    zabbix宏变量让zabbix变得更灵活,变量可以定义在主机.模板以及全局,变量名称类似:{$MACRO},宏变量都是大写的.认识了宏变量,你会感叹zabbix越发的强大. 变量可以用于如下地方: ...

  10. FTP实验报告

    FTP实验报告 制作人:全心全意 准备工作: linux1:192.168.100.4 关闭防火墙.selinux机制 配置yum源 匿名访问 1.安装vsftpd服务和客户端 [root@local ...