Mybatis框架-2
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的更多相关文章
- Mybatis框架的多对一关联关系(六)
一.一对多的关联映射 一对多关联查询多表数据 1接口 public interface IDeptDAO { //根据部门编号查询该部门单个查询 public Emp getEmpById(Integ ...
- Spring+SpringMvc+Mybatis框架集成搭建教程
一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...
- Mybatis框架中实现双向一对多关系映射
学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...
- Hibernate框架与Mybatis框架的对比
学习了Hibernate和Mybatis,但是一直不太清楚他们两者的区别的联系,今天在网上翻了翻,就做了一下总结,希望对大家有帮助! 原文:http://blog.csdn.net/firejuly/ ...
- 初识Mybatis框架,实现增删改查等操作(动态拼接和动态修改)
此第一次接触Mybatis框架确实是有点不适应,特别是刚从Hibernate框架转转型过来,那么为什么要使用Mybatis框架,Mybatis框架和Hibernate框架又有什么异同呢? 这个问题在我 ...
- Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询
在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...
- SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程
1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One ...
- Spring3.0 与 MyBatis框架 整合小实例
本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...
- 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...
- 详解Java的MyBatis框架中SQL语句映射部分的编写
这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML 文件 ...
随机推荐
- Web Audio API之手把手教你用web api处理声音信号:可视化音乐demo
1.Web Audio API 介绍 Web Audio API 提供了在Web上控制音频的一个非常有效通用的系统 ,这些通用系统通俗的讲就是我们可以利用Web Audio API提供的各种方法操作各 ...
- poj 2541 Binary Witch
Binary Witch http://poj.org/problem?id=2541 Time Limit: 1000MS Memory Limit: 65536K Descript ...
- Linux下设置mysql和tomcat开机启动
本文基于CentOS 64位 一.mysql设置开机启动 1.cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql ...
- java与C#的基础语法区别--持续更新
1.判断字符串是否相等 java : equals()比较的是对象的内容(区分字母的大小写格式),但是如果使用“==”比较两个对象时,比较的是两个对象的内存地址,所以不相等.即使它们内容相等,但是不同 ...
- 【转载】Quick 中的触摸事件
原文地址 http://cn.cocos2d-x.org/article/index?type=quick_doc&url=/doc/cocos-docs-master/manual/fram ...
- Python 关于时间和日期函数使用 -- (转)
python中关于时间和日期函数有time和datatime 1.获取当前时间的两种方法: import datetime,time now = time.strftime("%Y-%m ...
- Android应用程序App应用上线流程
对于很多初级开发者,可能对app应用上线不太了解,本文跟大家介绍一下怎么上线app应用.上线App并不是一件很困难的事情,App的应用功能也不需要很强大,甚至不用联网,只有简单的一两个页面的App应用 ...
- parse_str
之前没有遇到过parse_str,其意思就是“把查询字符串解析到变量中”也就是$str会被解析为变量. <?php $data = "a=1&b=2";parse_s ...
- 【Python学习笔记】使用Python进行主成分分析
使用sklearn库中的PCA类进行主成分分析. 导入要用到的库,还没有的直接pip安装就好了. from sklearn.decomposition import PCA import numpy ...
- foreign key constraint fails错误的原因
建表:CREATE TABLE Course ( Cno Char(4) PRIMARY KEY, Cname Char(40), Cpno Char(4), Ccredit Int, FOREIGN ...