1. 程式人生 > >Spring Boot微服務框架整合之通用mapper外掛(tk.mybatis)

Spring Boot微服務框架整合之通用mapper外掛(tk.mybatis)

繼我上次的Springboot框架整合,整合了初步的微服務框架,還有mybatis整合實現資料庫查詢資料的demo

現在給大家再整合一個本人覺得比較好用的通用mapper外掛(tk.mybatis),這個外掛裡面封裝好了我們需要用到的很多sql語句,不過這個外掛是通過我們去呼叫它封裝的各種方法來實現sql語句的效果。這樣就不用像mybatis那樣每次寫一個介面就要寫一條sql語句。這樣大大減少了我們的工作量。

我們先搭建好一個配置了mybatis能跑起來的maven專案,不會的點選下面連結去搭建:

1,首先我們新增tk.mybatis的依賴包

<!--通用Mapper-->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper</artifactId>
    <version>3.3.9</version>
</dependency>

2,然後去新增一個UserInfo實體類

UserInfo.class程式碼:

//註解宣告資料庫某表明
@Table(name = "USER")//如果實體類名字與資料庫不一致又不使用註解會報錯
public class UserInfo {
	// 註解宣告該表的欄位名//如果實體類變數與資料庫列名不一致又不使用註解會報錯
	@Column(name = "id")
	private Integer id;
	@Column(name = "code")//如果實體類變數與資料庫列名不一致又不使用註解會報錯
	private String code;
	//新增get,set
}

3,新建配置掃描類檔案

MyBatisConfig.class:

package com.lkt.Professional.mapper.mybatis;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.context.annotation.Bean;
public class MyBatisConfig {
	@Bean(name = "sqlSessionFactory")
	public SqlSessionFactory sqlSessionFactoryBean(){
		SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
	//  bean.setDataSource(dataSource());
		bean.setTypeAliasesPackage("com.lkt.Professional.entity");
		try {
		//基於註解掃描Mapper,不需配置xml路徑
	        //bean.setMapperLocations(resolver.getResources("classpath:mappers/*.xml"));
			return bean.getObject();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}
}

MyBatisMapperScannerConfig.class:

package com.lkt.Professional.mapper.mybatis;
import java.util.Properties;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.lkt.Professional.MyMappers.MyMapper;
import tk.mybatis.spring.mapper.MapperScannerConfigurer;
@Configuration
//必須在MyBatisConfig註冊後再載入MapperScannerConfigurer,否則會報錯
@AutoConfigureAfter(MyBatisConfig.class)
public class MyBatisMapperScannerConfig {
	@Bean
	public MapperScannerConfigurer mapperScannerConfigurer(){
		MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
		mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
		mapperScannerConfigurer.setBasePackage("com.lkt.Professional.mapper.mybatis");	
		Properties properties = new Properties();
	    properties.setProperty("mappers", MyMapper.class.getName());//MyMapper這個類接下來會建立
	    properties.setProperty("notEmpty", "false");
	    properties.setProperty("IDENTITY", "MYSQL");
	    //特別注意mapperScannerConfigurer的引入import tk.mybatis.spring.mapper.MapperScannerConfigurer;引入錯誤則沒下面這個方法	
	    mapperScannerConfigurer.setProperties(properties);
	    return mapperScannerConfigurer;
	}
}

4,新建父類MyMapper

MyMapper:(把MyMapper檔案存放在mapper資料夾的同級目錄或者上級目錄,如果掃描到了MyMapper會出現報錯)

package com.lkt.Professional.MyMappers;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
public interface MyMapper<T> extends Mapper<T> , MySqlMapper<T> {
    //FIXME 再次提醒:該介面不能被掃描到
}

5,新建dao層

新建一個UserInfoDao.class:

package com.lkt.Professional.mapper;
import org.apache.ibatis.annotations.Mapper;
import com.lkt.Professional.entity.UserInfo;
import com.lkt.Professional.MyMappers.MyMapper;
@Mapper
public interface UserInfoDao extends MyMapper<UserInfo> {
    //不需要寫方法
}

6,新建UserInfoservice和UserInfoserviceImpl

UserInfoservice.class:

public interface UserInfoservice{
	 List<UserInfo> selectALL()  ;
}

UserInfoserviceImpl.class:

@Autowired
UserInfoDao userinfodao;
@Override
public List<UserInfo> selectALL(){
          return userinfodao.selectAll();//呼叫父類MyMapper的方法查詢資料
}

7,新建UserInfocontroller

UserInfocontroller.class:

	@Autowired
private UserInfoservice userinfoservice;
//新增的介面方法
    @RequestMapping("/getall")
    @ResponseBody List<UserInfo> getall()  {
        return userinfoservice.selectALL();
    }

8,右擊application跑起來,如果報出有關mysql或者sql語句的錯誤,檢查application.properties檔案資料庫配置是否正確;檢查bean(實體類)的類名是否與資料庫表名一致,不一致是否新增@Table(name = "表名")註解宣告;檢查bean的變數名是否與該表名的列名一致,不一致是否新增@Column(name = "列名")註解宣告。實體類程式碼參看上面的UserInfo.class類。