Mybatis在企业当中使用是非常广泛的,当前spring boot也是相当火热。Mybatis为了跟上潮流,自己出了一个jar包来解决spring boot和mybatis整合的问题
Maven依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
创建项目
搭建Spring Boot项目用IDEA真的是非常简单,并且它提供了很多内置的配置。只要点几下就可以了。
IDEA -> New -> Project -> Spring Initializr -> 填写Group和Artifact -> Next -> 选择Web,勾选Web;选择SQL,勾选MyBatis和MySQL -> Next -> Finish
走完上面的流程,IDEA就自动给我们创建了spring boot
的项目,并且生成的pom.xml
已经给我们加入了Mybatis
和MySQL
的maven
配置了。
具体的pom配置,请查看下面的附件。
application.properties配置
项目创建好了,我们首先需要配置数据库和MyBatis的相关配置
mybatis.type-aliases-package=com.roachfu.tutorial.entity
## 下划线自动转驼峰
mybatis.configuration.map-underscore-to-camel-case=true
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.56.102:3306/spring_boot?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=Fanshu_123456
实体类
public class Demo implements Serializable{
private static final long serialVersionUID = -6605419946999027600L;
private Integer id;
private String demoName;
private String demoValue;
private Integer demoStatus;
private Date createTime;
private Date updateTime;
// getter().......
// setter()......
Mapper
@Mapper
public interface DemoMapper {
/**
* 获取demo的所有列表
* @return
*/
@Select("select id, demo_name, demo_value, demo_status, create_time, update_time from t_demo")
List<Demo> list();
/**
* 根据id查询一条记录
* @param id 主键id
* @return 一条记录
*/
@Select("select id, demo_name, demo_value, demo_status, create_time, update_time from t_demo where id = #{id}")
Demo selectOne(@Param("id") Integer id);
/**
* 插入一条新数据
* @param demo 数据
* @return 0|1
*/
@Insert("insert into t_demo(id, demo_name, demo_value) values (#{id}, #{demoName}, #{demoValue})")
int insert(Demo demo);
/**
* 更新一条数据
* @param demo 更新数据
* @return 0|1
*/
@Update("update t_demo set demo_name = #{demoName}, demo_value=#{demoValue}, update_time=#{updateTime}")
int update(Demo demo);
/**
* 根据id删除一条记录
* @param id 主键id
* @return 0|1
*/
@Delete("delete from t_demo where id = #{id}")
int delete(@Param("id") Integer id);
}
注意到我们在
DemoMapper
类的上面加了@Mapper
注解,不然spring
是找不到MyBatis
的Mapper
的。
当然如果你觉得需要在每个Mapper
上加注解觉得麻烦(个人比较倾向这种,可插拔),那我们也可以以扫包 的方式注入,如下代码,我们只要在Application.java
中使用@MapperScan
注解即可:
@SpringBootApplication
@MapperScan("com.roachfu.tutorial.mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
使用到的注解有:
-
@Select
查询数据 -
@Insert
插入数据 -
@Update
更新数据 -
@Delete
删除数据 -
@Param
绑定变量。SQL里面应用的变量需要和@Param绑定的一致。
测试
@RunWith(SpringRunner.class)
@SpringBootTest
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class DemoMapperTest {
@Resource
private DemoMapper demoMapper;
@Test
public void testInsert() {
Demo demo = new Demo();
demo.setId(1);
demo.setDemoName("roach");
demo.setDemoValue("蟑螂");
int flag = demoMapper.insert(demo);
Assert.assertEquals(flag, 1);
}
@Test
public void testList() {
List<Demo> demoList = demoMapper.list();
Assert.assertEquals(1, demoList.size());
}
@Test
public void testSelectOne() {
Demo demo = demoMapper.selectOne(1);
Assert.assertEquals("roach", demo.getDemoName());
Assert.assertEquals("蟑螂", demo.getDemoValue());
}
@Test
public void testUpdate() {
Demo demo = new Demo();
demo.setId(1);
demo.setDemoName("crow");
demo.setDemoValue("乌鸦");
demo.setUpdateTime(new Date());
int flag = demoMapper.update(demo);
Assert.assertEquals(1, flag);
}
@Test
public void testDelete() {
int flag = demoMapper.delete(1);
Assert.assertEquals(flag, 1);
Demo demo = demoMapper.selectOne(1);
Assert.assertEquals(demo, null);
}
}
我们需要在类上面加入下面两个注解,这样就能有Spring的上下文环境
@RunWith(SpringRunner.class)
@SpringBootTest
项目源码
附录
SQL
drop table if exists t_demo;
create table t_demo(
id int not null auto_increment,
demo_name varchar(16) not null default '' comment 'demo名称',
demo_value varchar(16) not null default '' comment 'demo 值',
demo_status tinyint unsigned not null default 1 comment 'demo状态:1=正常,2=屏蔽',
create_time datetime not null default now() comment '创建时间',
update_time datetime not null default now() comment '更新时间',
primary key (id)
)engine=innodb default charset=utf8;
pom.xml
只贴出核心的,具体的请查看源码
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>