基于Mybaits映射的一点心得(分享)

 更新时间:2017年11月07日 09:50:55   作者:红尾巴的猪   我要评论
下面小编就为大家带来一篇基于Mybaits映射的一点心得(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

以前一直使用Hibernate,基本上没用过Mybatis,工作中需要做映射关系,简单的了解下Mybatis的映射。

两者相差不多都支持一对一,一对多,多对多,本章简单介绍一对一的使用以及注意点。

建表语句:

CREATE TABLE `bloc` ( 
 `id` int(11) NOT NULL auto_increment, 
 `name` varchar(255) collate utf8_bin default NULL, 
 `company_id` int(11) default NULL, 
 `intro` varchar(255) collate utf8_bin default NULL, 
 PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 
 
INSERT INTO`bloc` (`id`, `name`, `company_id`, `intro`) VALUES ('1', '宏伟集团', '1', '跨国集团');
CREATE TABLE `company` ( 
 `id` int(11) NOT NULL, 
 `name` varchar(255) collate utf8_bin default NULL, 
 `intro` varchar(255) collate utf8_bin default NULL, 
 PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 
INSERT INTO company (`id`, `name`, `intro`) VALUES ('1', '', NULL);

形式一:子查询

JAVA代码:SqlSessionHelper.java

package com.demo.mybatis; 
import java.io.IOException; 
import java.io.Reader; 
import org.apache.ibatis.io.Resources; 
import org.apache.ibatis.session.SqlSessionFactory; 
import org.apache.ibatis.session.SqlSessionFactoryBuilder; 
public class SqlSessionHelper { 
 public static SqlSessionFactory getSessionFactory() throws IOException{ 
  SqlSessionFactory sessionFactory = null; 
  Reader reader = Resources.getResourceAsReader("configuration.xml"); 
  try{ 
   sessionFactory = new SqlSessionFactoryBuilder().build(reader);; 
  }catch(Exception ex){ 
   ex.printStackTrace(); 
  } 
  return sessionFactory; 
 } 
}

Test.java:

package com.demo.mybatis; 
import java.util.List; 
import org.apache.ibatis.session.SqlSession; 
import mapper.BlocMapper; 
import model.Bloc; 
public class Test { 
 /** 
  * @param args 
  */
 public static void main(String[] args) { 
  try{ 
   SqlSession sqlSession = SqlSessionHelper.getSessionFactory().openSession(); 
   BlocMapper blocMapper = sqlSession.getMapper(BlocMapper.class); 
   List<Bloc> blocs = blocMapper.getBlocList("1"); 
   for (Bloc bloc : blocs) { 
    System.out.println("companyName = "bloc.getCompany().getName()); 
   } 
  }catch(Exception ex){ 
   System.out.println(ex.getMessage()); 
  } 
 } 
}

mapper:

package mapper; 
import java.util.List; 
import model.Bloc; 
public interface BlocMapper { 
 public List<Bloc> getBlocList(String name); 
} 
package mapper; 
public interface CompanyMapper { 
} 

model:

package model; 
public class Bloc { 
 private Integer id; 
 private String name; 
 private String intro; 
 private Company company; 
 public Integer getId() { 
  return id; 
 } 
 public void setId(Integer id) { 
  this.id = id; 
 } 
 public String getName() { 
  return name; 
 } 
 public void setName(String name) { 
  this.name = name; 
 } 
 public String getIntro() { 
  return intro; 
 } 
 public void setIntro(String intro) { 
  this.intro = intro; 
 } 
 public Company getCompany() { 
  return company; 
 } 
 public void setCompany(Company company) { 
  this.company = company; 
 } 
  
}
package model; 
public class Company { 
 private Integer id; 
 private String name; 
 private Integer intro; 
 public Integer getId() { 
  return id; 
 } 
 public void setId(Integer id) { 
  this.id = id; 
 } 
 public String getName() { 
  return name; 
 } 
 public void setName(String name) { 
  this.name = name; 
 } 
 public Integer getIntro() { 
  return intro; 
 } 
 public void setIntro(Integer intro) { 
  this.intro = intro; 
 } 
  
}

映射配置如下:(如果是一堆多的话“brandObject”改成实体List属性association 改成collection )

<?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="mapper.CompanyMapper"> 
 <resultMap id="BaseResultMap" type="model.Company" > 
  <id column="id" property="id" jdbcType="INTEGER" /> 
  <result column="name" property="name" jdbcType="VARCHAR" /> 
  <result column="intro" property="intro" jdbcType="VARCHAR" /> 
 </resultMap> 
 <select id = "getCompanyInfo" parameterType="Integer" resultMap="BaseResultMap"> 
  select * from company where id = #{id} 
 </select> 
</mapper> 
<mapper namespace="mapper.BlocMapper">
 <resultMap id="BaseResultMap" type="model.Bloc" >
  <id column="id" property="id" jdbcType="INTEGER" />
  <result column="name" property="name" jdbcType="VARCHAR" />
  <result column="intro" property="intro" jdbcType="VARCHAR" />
  <association column="company_id" property="company" select="mapper.CompanyMapper.getCompanyInfo">
  </association>
 </resultMap>
 <select id="getBlocList" parameterType="String" resultMap="BaseResultMap">
  select * from bloc where name = #{name}
 </select>
</mapper>

column:表中的字段 property:实体当中的字段名 select:引入的另一个xxxMapper.xml的getCompanyInfo方法

这样当查询用的映射时检测到有select就会执行你引入的另一个Mapper的查询方法,查询条件是company_id= 查询方法的参数

运行结果

companyName = 

形式二:关联查询

映射配置实体测试类一样:

<?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="mapper.BlocMapper"> 
 <resultMap id="BaseResultMap" type="model.Bloc" > 
  <id column="id" property="id" jdbcType="INTEGER" /> 
  <result column="name" property="name" jdbcType="VARCHAR" /> 
  <result column="intro" property="intro" jdbcType="VARCHAR" /> 
  <!-- 查询会有赋值紊乱问题 --> 
  <association column="company_id" property="company" resultMap = "mapper.CompanyMapper.BaseResultMap"> 
  </association> 
  <!-- <association column="company_id" property="company" select="mapper.CompanyMapper.getCompanyInfo"> 
  </association> --> 
 </resultMap> 
 <select id="getBlocList" parameterType="String" resultMap="BaseResultMap"> 
  <!-- select * from bloc where name = #{name} --> 
  <!-- 查询会有赋值紊乱问题 --> 
  select * from bloc b left join company c on b.company_id = c.id where b.name = #{name} 
 </select> 
</mapper>

column:表中的字段 property:实体当中的字段名 resultMap :引入另一个Mapper的映射

值得注意的是:因为是嵌套映射,所以形式二在两个实体字段名一样的情况下会引发字段赋值的紊乱,例如两个实体都有name 当第一个实体name有值,第二个实体name没有值的时候,查询出来的结果是两个实体name都有值,且都是一样的为第一个实体的name值

运行结果为

companyName = 宏伟集团 

显然运行结果不是我们想要的结果

以上简单的Demo希望能帮助初学Mybatis童鞋!!

这篇基于Mybaits映射的一点心得(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持澳门金沙网上娱乐。

相关文章

  • java冒泡排序简单实例

    java冒泡排序简单实例

    本文主要介绍了JSONjava冒泡排序实例与思路分析。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • CentOS 7下JDK8的详细安装步骤

    CentOS 7下JDK8的详细安装步骤

    这篇文章主要为大家介绍了CentOS 7下JDK8的详细安装步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Spring Boot学习入门之统一异常处理详解

    Spring Boot学习入门之统一异常处理详解

    我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。下面这篇文章主要给大家介绍了关于Spring Boot学习入门之统一异常处理的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-09-09
  • java关于调用方法的汇总

    java关于调用方法的汇总

    本文小编给大家整理了在Java中关于静态调用和动态调用的方法汇总,值得大家学习和参考。
    2017-11-11
  • jQuery 动画效果代码分享

    jQuery 动画效果代码分享

    本文给大家分享一段关于jquery实现的动画效果,代码简单易懂,非常不错,感兴趣的朋友参考下
    2016-11-11
  • 详解Spring Cloud中Hystrix的请求合并

    详解Spring Cloud中Hystrix的请求合并

    这篇文章主要介绍了详解Spring Cloud中Hystrix的请求合并,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Java使用cookie显示最近查看过的书

    Java使用cookie显示最近查看过的书

    这篇文章主要为大家详细介绍了Java使用cookie显示最近查看过的书,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • java  多线程的三种构建方法

    java 多线程的三种构建方法

    这篇文章主要介绍了java 多线程的三种构建方法的相关资料,这里提供三种实现方法,希望大家能够掌握,很重要的基础知识,需要的朋友可以参考下
    2017-09-09
  • javaweb实战之商城项目开发(三)

    javaweb实战之商城项目开发(三)

    这篇文章主要针对javaweb商城项目开发进行实战演习,主要实现通用的BaseDao.java和使用resultMap映射关联对象,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • 在Spring异步调用中传递上下文的方法

    在Spring异步调用中传递上下文的方法

    这篇文章主要给大家介绍了关于如何在Spring异步调用中传递上下文的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08

最新评论