使用selectList,selectOne..的缺陷

  刚开始学习mybatis的时候,使用selectList或者selectOne,传入要调用的mapper,如果又参数要传递的话,就需要将参数进行封装为对象,或者保存到map中,然后传入一个map或者对象,这样的话,在mapper.xml中才可以接收到传入的参数。

  这个过程其实是很麻烦的,使用session.selectOne("......")来调用mapper定义的方法(id),和我们平时开发时调用方法的形式有点相似,但是由于需要处理参数的封装,就显得不爽了。

  mybatis提供了getMapper方法,可以很方便的解决这个问题,最终达到的效果就是:使用mapperName.idName(paramlist)的形式来调用mapperName中的idName方法,传入paralist参数。

创建Person.java实体类

  类的全路径为lixin.gan.pojo.Person

  包含id、name、age、addr四个属性。

package lixin.gan.pojo;

public class Person {

	private int id;
private String name;
private int age;
private String addr; //省略了 有参和无参构造方法、getter、setter、toString }

  

创建PersonMapper.xml映射文件

  创建包:lixin.gan.mapper,包内创建PersonMapper.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="lixin.gan.mapper.PersonMapper"> <select id="selectAll" resultType="Person">
<!-- public List<Person> selectAll(); -->
select * from person
</select> <select id="selectById" resultType="Person">
<!-- public Person selectById(int id); -->
select * from person where id=#{0}
</select> <select id="selectByLimit" resultType="Person">
<!-- public List<Person> selectByLimit(int start, int offset);#{0}获取start, #{1}获取offset -->
<!-- select * from person limit #{0}, #{1} --> <!-- public List<Person> selectByLimit(@Param("start") int start,@Param("offset") int offset); -->
<!-- 使用注解后,参数会被组装为一个map,然后传入,那么就可以使用#{key}来使用传入的参数了 -->
select * from person limit #{start}, #{offset}
</select> <select id="selectByAddr" resultType="Person">
select * from person where addr=#{addr}
</select> </mapper>

  需要注意的是,namespace属性值要设定为当前文件名的全路径(不包含.xml后缀)。parameterType可以省略。

创建PersonMapper.java接口

  在lixin.gan.mapper包下面,也就是和PersonMapper.xml在一个地方,创建一个PersonMapper.java文件,文件名必须与xml文件保持对应,这里的PersonMapper.xml对应PersonMapper.java。注意,其实新建的接口所在的package,是与其对应的xml文件中的namespace相同的,而且必需相同。

  PersonMapper.java这个接口中,只需要声明xml中定义的方法(与id对应),不需要实现接口。

package lixin.gan.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import lixin.gan.pojo.Person;

public interface PersonMapper {
public List<Person> selectAll(); public Person selectById(int id); //public List<Person> selectByLimit(int start, int offset);
public List<Person> selectByLimit(@Param("start") int start,@Param("offset") int offset); public List<Person> selectByAddr(String addr);
}

创建mybatis.xml配置文件

  在项目的src目录下创建mybatis.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置别名 -->
<typeAliases>
<package name="lixin.gan.pojo"/>
</typeAliases> <environments default="mysql">
<environment id="mysql">
<transactionManager type="jdbc"></transactionManager>
<dataSource type="pooled">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments> <mappers>
<mapper resource="lixin/gan/mapper/PersonMapper.xml"></mapper>
<!-- 或者使用package指定包下面的所有interface -->
<!-- <package name="lixin.gan.mapper"></package> -->
</mappers>
</configuration>

  

  

运行测试代码

package lixin.gan.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List; 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 lixin.gan.mapper.PersonMapper;
import lixin.gan.pojo.Person; public class Test {
public static void main(String[] args) throws IOException { InputStream config = Resources.getResourceAsStream("mybatis.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config); SqlSession session = factory.openSession(); // 以前的做法
//List<Person> list1 = session.selectList("lixin.gan.mapper.PersonMapper.selectAll"); // 现在的做法
PersonMapper personMapper = session.getMapper(PersonMapper.class); List<Person> list1 = personMapper.selectAll();
for (Person p : list1) {
System.out.println(p);
} Person p1 = personMapper.selectById(1);
System.out.println(p1); List<Person> list2 = personMapper.selectByLimit(2,2);
for (Person p : list1) {
System.out.println(p);
} } }

  

mybatis 使用接口绑定的更多相关文章

  1. mybatis之接口绑定

    接口绑定方案 mybatis中,提供了一套接口绑定方案,程序员可以提供一个接口,然后提供对应接口的一个mapper.xml文件.MyBatis会自动将接口和xml文件进行绑定.实际上就是mybatis ...

  2. MyBatis之接口绑定方案及多参数传递

    1.说明   所谓的MyBatis接口绑定,指的是实现创建一个接口后,把mapper.xml 由mybatis 生成接口的实现类,通过调用接口对象就可以获取mapper.xml 中编写的sql.在SS ...

  3. 什么是 MyBatis 的接口绑定?有哪些实现方式?

    接口绑定,就是在 MyBatis 中任意定义接口,然后把接口里面的方法和 SQL 语句绑 定, 我们直接调用接口方法就可以,这样比起原来了 SqlSession 提供的方法我们可 以有更加灵活的选择和 ...

  4. Mybatis 接口绑定

    MyBatis的接口绑定: 参考链接:http://blog.csdn.net/chris_mao/article/details/48836039 接口映射就是在IBatis中任意定义接口,然后把接 ...

  5. mybatis 接口绑定 和 动态SQL

    一.MyBatis 接口绑定方案及多参数传递 1.作用:实现创建一个接口后把mapper.xml由mybatis生成接口的实现类,通过调用接口对象就可以获取mapper.xml中编写的sql 2.后面 ...

  6. Mybatis实现了接口绑定,使用更加方便。

    1.Mybatis实现了接口绑定,使用更加方便. 在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件, 而Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生 ...

  7. MyBatis系列(二) MyBatis接口绑定与多参数传递

    前言 通过上一篇博文的,已经可以做到通过MyBatis连接数据库,现在再来介绍一种方法通过接口绑定SQL语句. 不使用接口绑定的方式 不使用接口绑定的方式,是通过调用SqlSession中的selec ...

  8. http80端口转发(实现微信公众号接口绑定IP时,同时支持多个公众号)

    http80端口转发 背景 微信公众平台接口绑定服务器时,如果使用IP需要使用80端口,此组件可实现一个IP上绑定多个公众平台接口 使用方法 http://(IP)/WeixinMP/(转发的地址Ba ...

  9. 生成跨语言的类型声明和接口绑定的工具(Djinni )

    Djinni 是一个用来生成跨语言的类型声明和接口绑定的工具,主要用于 C++ 和 Java 以及 Objective-C 间的互通. 示例接口定义文件: # Multi-line comments ...

随机推荐

  1. 使用VBA批量CSV转XLS(97-2003)

    Sub EditCsvToXls() Application.ScreenUpdating = False '文件目录 ChDir "C:\Users\QA-Department\Deskt ...

  2. FastReport 循环打印表格数据

    1,在UI上拖放一个表格控件 2.设置表格头部信息,需要显示的数据以及边框颜色 3.选中表格控件设置事件代码: private void Table1_ManualBuild(object sende ...

  3. 浅谈"n个球"和"m个盒子"之间的乱伦关系

    无视标题,从我做起 update in 2018.10.1: 补充了"至多为1的四中情况" 这玩意儿的官方名字应该是叫"Twelvefold way",共用12 ...

  4. 使用vue-cli 初始化 vue 项目

    1. 安装nodejs 2. 安装 vue-cli npm install -g vue-cli 安装前可以通过设置代理为淘宝仓库地址,以加快下载速度. npm config set registry ...

  5. thymeleaf的配置

    1.在springboto项目中使用thymeleaf标签,必须先添加依赖,如下. <dependency> <groupId>org.springframework.boot ...

  6. ArcGIS API for JavaScript 4.2学习笔记[20] 使用缓冲区结合Query对象进行地震点查询【重温异步操作思想】

    这个例子相当复杂.我先简单说说这个例子是干啥的. 在UI上,提供了一个下拉框.两个滑动杆,以确定三个参数,使用这三个参数进行空间查询.这个例子就颇带空间查询的意思了. 第一个参数是油井类型,第二个参数 ...

  7. ios手机录屏软件哪个好

    苹果手机中的airplay镜像,是苹果手机系统的一大特色,可以轻松把手机屏幕投射电脑,这个功能使苹果手机相较安卓手机投屏会更加轻松,那么如何实现苹果手机投射电脑屏幕?下面小编便来分享ios手机录屏软件 ...

  8. 在AndroidStudio上使用AddressSanitizer

    在AndroidStudio上使用AddressSanitizer AddressSanitizer是Google主导的一个开源内存问题检测工具.现在也开始支持Android平台,且受Google推荐 ...

  9. C#监控指定目录的文件变化的代码

    如下的资料是关于C#监控指定目录的文件变化的代码. FileSystemWatcher watcher = new FileSystemWatcher();watcher.Path = @" ...

  10. wap2app(五)-- 微信授权登录以及踩过的坑

    应用场景是:用Hbuilder打包app,在app中点击微信授权登录或者某一操作,调起微信授权登录,用户授权后拿到用户信息. 一.登录插件配置 先配置微信登录参数 appid和appsecret,在m ...