MyBatis外掛使用–通用Mapper

天風浪浪海山蒼蒼發表於2017-02-14

原文連結:MyBatis外掛使用–通用Mapper

通用Mapper可以簡化CRUD操作,不必單獨為每一Mapper指定CRUD介面
所需jar包mapper-3.3.9.jar,persistence-api-1.0.jar

XML配置

在spring配置檔案中配置:

    <!-- 配置通用Mapper -->
    <bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.isea533.mybatis.mapper"/>
    <property name="properties">
        <value>
            mappers=tk.mybatis.mapper.common.Mapper
        </value>
    </property>
    </bean>

使用方法

只要extends tk.mybatis.mapper.common.Mapper<T>就擁有了通用Mapper中所有方法

public interface Test1Mapper extends Mapper<Test1>{

}

常用方法


import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;

import tk.mybatis.mapper.entity.Condition;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yupont.gs.dao.mapper.Test1Mapper;
import com.yupont.gs.model.Test1;

/**
 * 通用Mapper常用方法:
 * 
 * 等號的CRUD:
 * List<T> select(T record); 根據實體中的屬性值進行查詢,查詢條件使用等號
 * T selectByPrimaryKey(Object key); 根據主鍵欄位進行查詢,方法引數必須包含完整的主鍵屬性,查詢條件使用等號
 * List<T> selectAll(); 查詢全部結果,select(null)方法能達到同樣的效果
 * T selectOne(T record); 根據實體中的屬性進行查詢,只能有一個返回值,有多個結果是丟擲異常,查詢條件使用等號
 * int selectCount(T record); 根據實體中的屬性查詢總數,查詢條件使用等號
 * int insert(T record); 儲存一個實體,null的屬性也會儲存,不會使用資料庫預設值
 * int insertSelective(T record); 儲存一個實體,null的屬性不會儲存,會使用資料庫預設值
 * int updateByPrimaryKey(T record); 根據主鍵更新實體全部欄位,null值會被更新
 * int updateByPrimaryKeySelective(T record); 根據主鍵更新屬性不為null的值
 * int delete(T record); 根據實體屬性作為條件進行刪除,查詢條件使用等號
 * int deleteByPrimaryKey(Object key); 根據主鍵欄位進行刪除,方法引數必須包含完整的主鍵屬性
 * 
 * 條件的CRUD:
 * List<T> selectByCondition(Object condition); 根據Condition條件進行查詢
 * int selectCountByCondition(Object condition); 根據Condition條件進行查詢總數
 * int updateByCondition(@Param("record") T record, @Param("example") Object condition); 根據Condition條件更新實體record包含的全部屬性,null值會被更新
 * int updateByConditionSelective(@Param("record") T record, @Param("example") Object condition); 根據Condition條件更新實體record包含的不是null的屬性值
 * int deleteByCondition(Object condition); 根據Condition條件刪除資料
 * 
 * 
 *
 */
public class CommonMapperTest {
    
    public static Test1Mapper mapper = ((SqlSessionFactory) new ClassPathXmlApplicationContext("spring-db.xml").getBean("sqlSessionFactory")).openSession().getMapper(Test1Mapper.class);
    
    @Test
    public void selectAll(){
        PageHelper.startPage(2, 5); //第一個引數offset是當前頁數,第二個引數limit是每頁顯示多少資料
        //Condition c = new Condition(Test1.class);
        //c.createCriteria().andCondition("name in (`zhaoliu`,`zhangsan`)");
        List<Test1> list = mapper.selectAll();
        PageInfo<Test1> page = new PageInfo<Test1>(list);
        System.out.println(page.getTotal());
        for (Test1 test1 : list) {
            System.out.println(test1.getName());
        }
    }
    
    @Test
    public void insertSelective(){
        Test1 test = new Test1();
        test.setAge(33);
        test.setName("zhaoliu");
        mapper.insertSelective(test);
        System.out.println(test.getId());
    }
    
    @Test
    public void selectOne(){
        Test1 test = new Test1();
        test.setAge(22);
        Test1 t = mapper.selectOne(test);
        System.out.println(t.getName());
    }
    
    @Test
    public void SelectByConditionMapper(){
        Condition condition=new Condition(Test1.class);
        condition.createCriteria().andCondition("name like `%zhangsan%`");
        condition.setOrderByClause("name desc");
        List<Test1> list = mapper.selectByExample(condition);
        System.out.println(list.size());
    }
    
    @Test
    public void generatorCode() throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException{
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(new ClassPathResource("generatorConfig.xml").getInputStream());
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
    }
}

參考資料http://git.oschina.net/free/M…

相關文章