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

下面小编就为大家带来一篇基于Mybatis映射的一点心得(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

以前一直使用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 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 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 )

select * from company where id = #{id}

select * from bloc where name = #{name}

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

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

运行结果

companyName =

形式二:关联查询

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

select * from bloc b left join company c on b.company_id = c.id where b.name = #{name}

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

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

运行结果为

companyName = 宏伟集团

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

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

这篇基于Mybatis映射的一点心得(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程之家。

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...