1.Mybatis中的接口形式

  在Mybatis中使用接口形式将通过代理对象调用方法,从而实现sql的执行

  1)定义一个接口  

package mapper;

import java.util.List;

import pojo.User;

public interface UserMapper {
public List<User> findAll();
}

  2)是通过代理对象调用方法

//测试接口方式
@Test
public void test04(){ SqlSession session = factory.openSession();
//获取接口对象
UserMapper userMapper = session.getMapper(UserMapper.class);
System.out.println(userMapper.getClass()); List<User> userList = userMapper.findAll();
for (User user : userList) {
System.out.println(user);
}
}

  3)映射配置文件中,namespace的值是包名.接口名-->mapper.UserMapper

            写sql标签的id为方法名 ---> findAll

<select id="findAll" resultType="User">
<include refid="selectUser"/>
</select>

通过接口形式的原理:

  当通过接口执行接口方法时,首先Mybatis会为接口创建代理对象.通过代理对象调用方法时,

  首先会根据接口的类型mapper.UserMapper匹配

  映射文件中的namespace.

  如果匹配成功,之后接口方法匹配映射文件中的sql的ID,

  如果匹配成功则调用sql语句完成操作.

2.手动封装结果集

  需求:

   当结果集中的字段的名称和对象属性名称不一致时(或者说pojo中存在自定义引用类型属性),则不能实现自动的映射.

  解决方案:

   将自动封装改成手动封装即 resultType 改成使用 resultMap 属性(一下是一对一的自关联查询)

 <select id="findAll" resultMap="deptRm">
select * from
      dept_p d
left join
      (select dept_id p_id,dept_name p_name from dept_p) p
on d.parent_id = p.p_id
    order by dept_id
</select>
<resultMap type="Dept" id="deptRm" autoMapping="true">
<id column="dept_id" property="deptId"/> <association property="parentDept" javaType="Dept">
<id column="p_id" property="deptId"/>
<result column="p_name" property="deptName"/>
</association>
</resultMap>

bean:

  

association:一般在实际开发中用于一个bean中存在另一个bean进行数据封装。

autoMapping:若存在引用类型属性时应该添加该属性后就会实现自动映射。

association中的property标识bean中的属性。

JavaType标识bean的全限定名称。

若出现部分不同时主键必须要设置,其他属性如果列名没有发生变化则不需要设置。

mybatis中如果操作的是单表,那么除主键之外,如果结果集中的字段的名称和属性名一致,可以自动完成映射.

3.一对一关联关系:

  如果是多表关联查询,结果集中的字段名称和主对象中的属性名一致,可以通过autoMapping="true"实现自动映射.

  一对一封装的具体实现过程:

    要求:结果集中不允许出现同名字段,否则mybaits不能正确解析。

<!--一对一关联查询  -->
<select id="oneTOne" resultMap="userOneTOne">
select * from
user u
left join
userinfo info
on u.id = info.user_id
</select> <resultMap type="pojo.User" id="userOneTOne" autoMapping="true">
<!--主键封装 -->
<id column="id" property="id"/> <!--一对一封装 -->
<association property="info" javaType="pojo.UserInfo">
<id column="user_id" property="userId"/>
<result column="tel" property="tel"/>
<result column="qq" property="qq"/>
</association>
</resultMap>

  一对一封装时 association 与javaType一起联用  

 4.一对多关联关系: 

  一对多关联封装时,需要使用集合进行封装。

<!--一对多关联封装-->
<select id="oneTMore" resultMap="deptOneTMore">
select d.dept_id,d.dept_name,u.id,u.name,u.age,u.sex from
dept d
left join
user u
ON d.dept_id = u.dept_id
</select> <resultMap type="pojo.Dept" id="deptOneTMore">
<!--主对象封装完成 -->
<id column="dept_id" property="deptId"/>
<result column="dept_name" property="deptName"/>
<!--一对多关联封装 -->
<collection property="userList" ofType="pojo.User">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="sex" property="sex"/>
</collection>
</resultMap>

  一对多封装时 Collection 和 ofType 一起使用  

 5.多对多关联关系

  多对多其实就是双向一对多。

<!-- 三表联查 -->
<select id="findT_S" resultMap="t_s">
select * from (select t.t_id,t.t_name,t.t_sex,s_t.student_id from
teacher t
left join
s_t
on t.t_id = s_t.teacher_id)t left join
student s
on t.student_id = s.id
</select> <resultMap type="pojo.Teacher" id="t_s">
<id column="t_id" property="tId"/>
<result column="t_name" property="tName"/>
<result column="t_sex" property="tSex"/> <!--多对多封装 -->
<collection property="studentList" ofType="pojo.Student">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
</collection>
</resultMap>

  student 、teacher、s_t 关联表 --> 查询出了一个老师的全部学生

Mybatis框架-2的更多相关文章

  1. Mybatis框架的多对一关联关系(六)

    一.一对多的关联映射 一对多关联查询多表数据 1接口 public interface IDeptDAO { //根据部门编号查询该部门单个查询 public Emp getEmpById(Integ ...

  2. Spring+SpringMvc+Mybatis框架集成搭建教程

    一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...

  3. Mybatis框架中实现双向一对多关系映射

    学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...

  4. Hibernate框架与Mybatis框架的对比

    学习了Hibernate和Mybatis,但是一直不太清楚他们两者的区别的联系,今天在网上翻了翻,就做了一下总结,希望对大家有帮助! 原文:http://blog.csdn.net/firejuly/ ...

  5. 初识Mybatis框架,实现增删改查等操作(动态拼接和动态修改)

    此第一次接触Mybatis框架确实是有点不适应,特别是刚从Hibernate框架转转型过来,那么为什么要使用Mybatis框架,Mybatis框架和Hibernate框架又有什么异同呢? 这个问题在我 ...

  6. Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询

    在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...

  7. SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...

  8. Spring3.0 与 MyBatis框架 整合小实例

    本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...

  9. 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)

    手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...

  10. 详解Java的MyBatis框架中SQL语句映射部分的编写

    这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML 文件 ...

随机推荐

  1. 关于mysql 删除数据后物理空间未释放

    转载自:http://www.cnblogs.com/shawnloong/archive/2013/02/07/2908911.html OPTIMIZE TABLE 当您的库中删除了大量的数据后, ...

  2. JavaMail实现邮件的发送

    1,拷贝mail.jar 和activation.jar到项目中 2,开启邮箱的 POP3/SMTP服务,以QQ邮箱为例 进去QQ邮箱-->设置-->账号-->进行设置如下图 注意: ...

  3. flask-login源码梳理

  4. Windows/Linux javac/java编译运行引入所需的jar包

    > Windows 假设要引用的jar放在D:/test目录下,名字为t1.jar, java源文件放在D:/test/src目录下,名字为t2.java. 编译: javac  -cp  d: ...

  5. Linux系统文件权限体系详解

    准备工作:先简单了解Linux文件权限 在Linux系统中,ls -l 命令可以查看文件的权限,如 [zhaohuizhen@localhost Test]$ ls -l a -rw-rw-r--. ...

  6. java 深度拷贝 复制 深度复制

    1.深度拷贝.复制代码实现 最近需要用到比较两个对象属性的变化,其中一个是oldObj,另外一个是newObj,oldObj是newObj的前一个状态,所以需要在newObj的某个状态时,复制一个一样 ...

  7. js_!和!!的使用

    js中有些特殊的数据(“” 0 null undefined NaN),请求后台返回的数据中往往都有一些这样的数据,需要对这些数据进行过滤. 过滤代码 var a = 0;//0 "&quo ...

  8. canvas_简单练习

    效果图 实现原理: 1.定义canvas标签. 2.获取canvas标签节点,创建canvas2D. 3.在canvas进行画图. 效果代码: <!DOCTYPE html> <ht ...

  9. Android控件——ToggleButton多状态按钮(实现灯泡的开关)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxoAAAFxCAIAAAB7jkm1AAAgAElEQVR4nOy9eXgUVb7/Dy7j3BnH8T

  10. Centos 7 smb 安装使用

    安装: yum install samba 添加smb用户: smbpasswd -a root /etc/samba/smb.conf 追加: [public] path = / valid use ...