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 ); 表