Spring Boot 整合 MyBatis

官方中文文档 官页

配置

引入mybatis star 和数据源支持

    <!-- mybatis支持 -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.2</version>
    </dependency>
    <!-- jdbc数据源支持 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
     <!-- 连接驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

mybatis-spring-boot-starter 这个在mybits官页文档中: http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/

MyBatis-Spring-Boot-Starter将会做如下一些事情

自动检测现有的DataSource

  • 将创建并注册SqlSessionFactory的实例, 该实例使用SqlSessionFactoryBean将该DataSource作为输入进行传递
  • 将创建并注册从SqlSessionFactory中获取的SqlSessionTemplate的实例;
  • 自动扫描您的mappers, 将它们链接到SqlSessionTemplate并将其注册到Spring上下文, 以便将它们注入到您的bean中;

就是说, 使用了该Starter之后, 只需要定义一个DataSource即可(application.properties中可配置), 它会自动创建使用该DataSource的SqlSessionFactoryBean以及SqlSessionTemplate; 会自动扫描你的Mappers, 连接到SqlSessionTemplate, 并注册到Spring上下文中;

  • 没有配置数据库的情况

    只要指定任何spring.datasource的相关配置, Spring Boot会在classpath中搜索H2, hsqldb等内存数据库的jar包, 如果找到了, 就会自动配置一个内存数据库的DataSource, 所以, 我们只要引入jar包即可;

  • 指定数据源类型

    spring.datasource.type=包名.类名
  • 使用两个数据源 参考: 扩展 使用两个数据源

  • mysql 8小时问题

    #验证连接的有效性
    spring.datasource.test-while-idle=true

映射器

@Mapper
public interface PostMapper {
 
	/*
	 */
	@Select("select * from post where id = #{id}")
	public Post selectOne(@Param("id") Long id);
	
    //分页查询
    @Select("select * from post order by record_date desc limit  #{start}, #{setSize}")
	public List<Post>getForPageList(@Param("start")long start, @Param("setSize")int setSize);
 
	//返回id
	@Insert(" insert into post ( url,mark,record_date,directory, post_type,content)  values (#{url},#{mark},#{record_date},#{directory},#{post_type} ,#{content}) ")
	@Options(useGeneratedKeys = true, keyProperty = "id")
	public long insert(Post post);
	
}

测试

@RunWith(SpringRunner.class)
@SpringBootTest(classes = AppMain.class)//classes = AppMain.class  指定应用的主入口类
public class TestMybits {
    @Autowired
	SqlSessionTemplate sqlSessionTemplate;
 
	@Test
	public void test() {}
		PostMapper mapp = sqlSessionTemplate.getMapper(PostMapper.class);
		Post post = new Post();
		post.setContent("123321");
		post.setMark("BATCH");
		//mapp.insert(post);//插入
		System.out.println("insert="+post);
 
        Post post = mapp.selectOne(1l);//查询
		System.out.println("selectOne="+post);
	}
}
//create table post(id int primary key auto_increment ,url varchar(255), mark varchar(20) , record_date DATETIME,  directory varchar(50) ,post_type varchar(20) ,content text ); 表