Mybaties 使用mapper方式实现

之前写过一篇mybaties以xml方式实现,随着对mybaties的理解,觉得xml方式不方便,写了mysql还得再实现一种方法,代码读起来也比较费时。最近走通了以mapper的方式实现,特别像 springboot中使用mybaties,代码结构更佳,写此贴让我们远离JDBC编程,走上快乐开发路途。

先看看目录树,其中有些无关的代码在帖子中不在贴出。目录结构遵循 springboot结构,dao.mapper主要是映射数据库的操作接口,domain存放实体类,resources放配置文件和sql操作文件
Mybaties 使用mapper方式实现_第1张图片

1. 数据库信息 db.properties,类似如下

mysql.driver = com.mysql.jdbc.Driver
#mysql.url = jdbc:mysql://xxx:3306/cloud_style?characterEncoding=utf-8&useAffectedRows=true
#mysql.username = xx
#mysql.password = xxxx

2. mybaties.xml为 mybaties的配置文件,这里面配置 database信息和sql操作xml, 如下:





        
        

        
        
            
            
                
                
                
                
                    
                    
                    
                    
                    
                
            
        
        
            
            
        


3. sql.xml 这里面写sql语句,其中操作结果是实体类的,可以直接指定 resultMap属性,这种映射更自由,数据库中某表字段不需要全取时,就需要resultMap自定义映射规则。一般类型可指定 resultType即可,这两个属性注意使用方式。需要注意的是指定mapper的namespace空间类似如下文件,这里面包含了实体类映射,基本类映射,单参数,多参数,动态表名等操作,可自行学习修改。






  
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
  

  
    
    
    
  

  
    
    
  

  
  

  

  

  

  

  

  

4. 写mapper映射接口,不需要实现。实体类具体就不贴代码了,自己根据自己需要创建。多参数需要使用Param注解,参数名字和sql.xml中一致

package dao.mapper;

import domain.DagJobsBean;
import domain.LogDetailBean;
import domain.LogMetaBean;
import java.util.List;
import org.apache.ibatis.annotations.Param;

public interface WarehouseMapper {
  List selectDistinctIdFromLogMeta();

  List selectParents(int srcLogId);

  List selectChildren(int logId);

  LogMetaBean selectFromLogMeta(int id);

  List selectLogDetailByLogId(@Param("logId") int logId, @Param("timeFuzzyMatch") String timeFuzzyMatch);

  DagJobsBean selectDiagnosisAndClusterFromDagJobs(int id);

  float selectCostFromJobinfo(@Param("tableName") String tableName, @Param("jobId") String jobId);
}

5.建立 sqlsession 工厂,能够获取mapper对象 如下:

import dao.mapper.WarehouseMapper;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

class SessionFactory {

  public static WarehouseMapper getWarehouseMapper() throws IOException {
    String resource = "mybatis.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession session = sqlSessionFactory.openSession();
    return session.getMapper(WarehouseMapper.class);
  }
}

6. 在需要的地方取 mapper即可操作

import dao.mapper.WarehouseMapper;
import domain.LogMetaBean;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;

public class WarehouseMain {

  private static WarehouseMapper mapper;
  

  private static void init() throws IOException {
    mapper = SessionFactory.getWarehouseMapper();
  }

  public static void main(String[] args) throws IOException {
    init();
    WarehouseCost warehouseCost = new WarehouseCost(mapper, price);
    List warehouseIdList = mapper.selectDistinctIdFromLogMeta();
   
    for (HashMap.Entry entry : warehouseIdList.entrySet()) {
      System.out.println(entry.getKey() + "   " + entry.getValue());
    }
  }
}


 

你可能感兴趣的:(java)