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.手动封装结果集

  需求:

   当结果集中的字段的名称和对象属性名称不一致时,则不能实现自动的映射.

  解决方案:

   将自动封装改成手动封装即 resultType 改成使用 resultMap 属性

//将结果集实现手动封装映射
<select id="findMap" resultMap="userRM">
    select id user_id,name ,age ,sex from user
</select>
<!--type:表示封装的类型  -->
<resultMap type="pojo.User" id="userRM">
    <!--指定主键 必须写  -->
    <id column="user_id" property="id"/>
    <!-- <result column="user_name" property="name"/>
    <result column="user_age" property="age"/>
    <result column="user_sex" property="sex"/> -->
</resultMap>

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

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 关联表 --> 查询出了一个老师的全部学生

时间: 2024-10-12 10:45:45

Mybatis框架-2的相关文章

MyBatis框架中Mapper映射配置的使用及原理解析(七) MapperProxy,MapperProxyFactory

从上文<MyBatis框架中Mapper映射配置的使用及原理解析(六) MapperRegistry> 中我们知道DefaultSqlSession的getMapper方法,最后是通过MapperRegistry对象获得Mapper实例: public <T> T getMapper(Class<T> type, SqlSession sqlSession) { final MapperProxyFactory<T> mapperProxyFactory =

MyBatis框架(一)

MyBatis介绍: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github. MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statement.手动设置参数.结果集检索等jdbc繁杂的过程代

MyBatis框架中Mapper映射配置的使用及原理解析(三) 配置篇 Configuration

从上文<MyBatis框架中Mapper映射配置的使用及原理解析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder> 我们知道XMLConfigBuilder调用parse()方法解析Mybatis配置文件,生成Configuration对象. Configuration类主要是用来存储对Mybatis的配置文件及mapper文件解析后的数据,Configuration对象会贯穿整个Mybatis的执行流程,为Mybatis的执行过程提供必要的配

MyBatis框架中Mapper映射配置的使用及原理解析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder

在 <MyBatis框架中Mapper映射配置的使用及原理解析(一) 配置与使用> 的demo中看到了SessionFactory的创建过程: SqlSessionFactory sessionFactory = null; String resource = "mybatisConfig.xml"; try { sessionFactory = new SqlSessionFactoryBuilder().build(Resources .getResourceAsRea

MyBatis框架Maven资源

<!-- MyBatis框架 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> <!-- MySql数据库驱动 --> <dependency> <groupId>mysql&

mybatis框架搭建学习初步

mybatis框架搭建步骤:1. 拷贝jar到lib目录下,而且添加到工程中2. 创建mybatis-config.xml文件,配置数据库连接信息 <environments default="development"> <environment id="mysql"> <transactionManager type="JDBC"></transactionManager> <dataSou

MyBatis框架知识整理

MyBatis框架 一.介绍: MyBatis实际上是Ibatis3.0版本以后的持久化层框架[也就是和数据库打交道的框架]! 和数据库打交道的技术有: 原生的JDBC技术---> Spring的JdbcTemplate技术 这些工具都是提供简单的SQL语句的执行,但是和我们这里学的MyBatis框架还有些不同,框架是一整套的东西,例如事务控制,查询缓存,字段映射等等. 我们用原生JDBC操作数据库的时候都会经过: 编写sql---->预编译---->设置参数----->执行sql

Mybatis框架之动态SQL书写方式小结

动态SQL简介 动态SQL是Mybatis框架中强大特性之一.在一些组合查询页面,需要根据用户输入的查询条件生成不同的查询SQL,这在JDBC或其他相似框架中需要在代码中拼写SQL,经常容易出错,在Mybatis框架中可以解决这种问题. 使用动态SQL元素与JSTL相似,它允许我们在XML中构建不同的SQL语句.常用元素为: 判断元素:if,choose 关键字元素:where,set,trim 循环元素:foreach if元素 if元素是简单的条件判断逻辑,满足指定条件时追加if元素内的SQ

Mybatis框架

1.Mybatis框架: Mybatis是一个半自动的对象关系映射(ORM),实现结果集的自动封装,sql写到配置文件中: Mybatis使用的是DTD约束. 2.Mybatis模块调用: 3.SqlMapConfig.xml :Mybatis框架的核心配置. default="MySql"---> 默认使用MySQL数据库 映射配置中的resource=""--> 单个对象的映射文件 1 <?xml version="1.0"

Hibernate框架与Mybatis框架的对比

学习了Hibernate和Mybatis,但是一直不太清楚他们两者的区别的联系,今天在网上翻了翻,就做了一下总结,希望对大家有帮助! 原文:http://blog.csdn.net/firejuly/article/details/8190229 第一章     Hibernate与MyBatis Hibernate 是当前最流行的O/R mapping框架,它出身于sf.net,现在已经成为Jboss的一部分. Mybatis 是另外一种优秀的O/R mapping框架.目前属于apache的