总结Mybaits的操作心得
                            来源:爱站网时间:2020-07-27编辑:网友分享
                        
                        
                        Mybaits大家都了解吗?其实在开发中或多或少都会接触的,它支持SQL查询、存储过程和高级映射等的结构,别着急,今天爱站技术频道就和大家分享总结Mybaits的操作心得,一起跟随小编过来看看吧。
                        Mybaits大家都了解吗?其实在开发中或多或少都会接触的,它支持SQL查询、存储过程和高级映射等的结构,别着急,今天爱站技术频道就和大家分享总结Mybaits的操作心得,一起跟随小编过来看看吧。
建表语句:
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 )
column:表中的字段 property:实体当中的字段名 select:引入的另一个xxxMapper.xml的getCompanyInfo方法
这样当查询用的映射时检测到有select就会执行你引入的另一个Mapper的查询方法,查询条件是company_id= 查询方法的参数
运行结果
companyName =
形式二:关联查询
映射配置实体测试类一样:
column:表中的字段 property:实体当中的字段名 resultMap :引入另一个Mapper的映射
值得注意的是:因为是嵌套映射,所以形式二在两个实体字段名一样的情况下会引发字段赋值的紊乱,例如两个实体都有name 当第一个实体name有值,第二个实体name没有值的时候,查询出来的结果是两个实体name都有值,且都是一样的为第一个实体的name值
运行结果为
companyName = 宏伟集团
显然运行结果不是我们想要的结果
以上简单的Demo希望能帮助初学Mybatis童鞋!!
以上就是爱站技术频道小编为大家解答的总结Mybaits的操作心得,对想要学习的人来说,可以提前了解一下这些专业知识,确保能让项目的顺利开发。
 
                    