Spring Boot微服务框架整合之通用mapper插件(tk.mybatis)

继我上次的Springboot框架整合,整合了初步的微服务框架,还有mybatis整合实现数据库查询数据的demo

现在给大家再整合一个本人觉得比较好用的通用mapper插件(tk.mybatis),这个插件里面封装好了我们需要用到的很多sql语句,不过这个插件是通过我们去调用它封装的各种方法来实现sql语句的效果。这样就不用像mybatis那样每次写一个接口就要写一条sql语句。这样大大减少了我们的工作量。

我们先搭建好一个配置了mybatis能跑起来的maven项目,不会的点击下面链接去搭建:

springboot框架的demo项目(不知道的可以去看看,https://blog.csdn.net/lktao_96/article/details/79654959)。

1,首先我们添加tk.mybatis的依赖包



    tk.mybatis
    mapper
    3.3.9

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 extends Mapper , MySqlMapper {
    //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 {
    //不需要写方法
}

6,新建UserInfoservice和UserInfoserviceImpl

UserInfoservice.class:

public interface UserInfoservice{
	 List selectALL()  ;
}

UserInfoserviceImpl.class:

@Autowired
UserInfoDao userinfodao;
@Override
public List selectALL(){
          return userinfodao.selectAll();//调用父类MyMapper的方法查询数据
}

7,新建UserInfocontroller

UserInfocontroller.class:

	@Autowired
	private UserInfoservice userinfoservice;
//新增的接口方法
    @RequestMapping("/getall")
    @ResponseBody List getall()  {
        return userinfoservice.selectALL();
    }

8,右击application跑起来,如果报出有关mysql或者sql语句的错误,检查application.properties文件数据库配置是否正确;检查bean(实体类)的类名是否与数据库表名一致,不一致是否添加@Table(name = "表名")注解声明;检查bean的变量名是否与该表名的列名一致,不一致是否添加@Column(name = "列名")注解声明。实体类代码参看上面的UserInfo.class类。


你可能感兴趣的:(springboot)