继我上次的Springboot框架整合,整合了初步的微服务框架,还有mybatis整合实现数据库查询数据的demo
现在给大家再整合一个本人觉得比较好用的通用mapper插件(tk.mybatis),这个插件里面封装好了我们需要用到的很多sql语句,不过这个插件是通过我们去调用它封装的各种方法来实现sql语句的效果。这样就不用像mybatis那样每次写一个接口就要写一条sql语句。这样大大减少了我们的工作量。
我们先搭建好一个配置了mybatis能跑起来的maven项目,不会的点击下面链接去搭建:
springboot框架的demo项目(不知道的可以去看看,https://blog.csdn.net/lktao_96/article/details/79654959)。
tk.mybatis
mapper
3.3.9
UserInfo.class代码:
//注解声明数据库某表明
@Table(name = "USER")//如果实体类名字与数据库不一致又不使用注解会报错
public class UserInfo {
// 注解声明该表的字段名//如果实体类变量与数据库列名不一致又不使用注解会报错
@Column(name = "id")
private Integer id;
@Column(name = "code")//如果实体类变量与数据库列名不一致又不使用注解会报错
private String code;
//添加get,set
}
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;
}
}
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 再次提醒:该接口不能被扫描到
}
新建一个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 {
//不需要写方法
}
UserInfoservice.class:
public interface UserInfoservice{
List selectALL() ;
}
UserInfoserviceImpl.class:
@Autowired
UserInfoDao userinfodao;
@Override
public List selectALL(){
return userinfodao.selectAll();//调用父类MyMapper的方法查询数据
}
UserInfocontroller.class:
@Autowired
private UserInfoservice userinfoservice;
//新增的接口方法
@RequestMapping("/getall")
@ResponseBody List getall() {
return userinfoservice.selectALL();
}