mybatis与Spring Boot的整合
有两种方式:
1、使用mybatis官方提供的Spring Boot整合包。
2、使用Spring和mybatis的整合方式
如何选择?
根据项目需要,来进行选择。
例如:如果是简单的CRUD,明显使用第一种方式。如果比较复杂,且涉及到多个表的,建议使用第二种方式,这样可以很方便的控制Mybatis的各种配置。
一、使用mybatis官方提供的Spring Boot整合包。
这里使用的是maven,所以首先导入相关的依赖。
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
在application.properties配置mysql的连接配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT spring.datasource.username=root spring.datasource.password=mysqladmin
在mysql数据库中创建一个User表
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
创建User表的映射实体类User
public class User { private Long id; private String name; private int age; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
创建UserMapper
@MapperScanpublic interface UserMapper { @Select("select * from user where name = #{name}") User findByName(@Param("name") String name); @Insert("insert into User(name, age) values(#{name}, #{age})") int insertUser(@Param("name") String name, @Param("age") int age);}
进行单元测试
@RunWith(SpringJUnit4ClassRunner.class)@SpringApplicationConfiguration(classes = DemoApplication.class) //DemoApplication为该项目的入口类public class DemoApplicationTests { @Autowired private UserMapper userMapper; @Test public void find() throws Exception { userMapper.insertUser("126", 16); User u = userMapper.findByName("126"); Assert.assertEquals(16, u.getAge()); }}
二、使用Spring和mybatis的整合方式
在这里我使用了通用Mapper
首先,建立一个Spring Boot项目
导入相关的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- 通用Mapper -->
<dependency>
<groupId>com.github.abel533</groupId>
<artifactId>mapper</artifactId>
<version>2.3.4</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.jolbox</groupId>
<artifactId>bonecp-spring</artifactId>
<version>0.8.0.RELEASE</version>
</dependency>
在application.properties配置mysql的连接配置
spring.datasource.type=com.jolbox.bonecp.BoneCPDataSource spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT spring.datasource.username=root spring.datasource.password=mysqladmin
使用bonecp连接池,spring.datasource.type=com.jolbox.bonecp.BoneCPDataSource
创建mybatis的配置类MybatisConfig
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import javax.sql.DataSource;
@Configuration
public class MybatisConfig {
@Autowired
private DataSource dataSource;
@Bean
@ConditionalOnMissingBean //当容器没有指定的Bean的情况下创建该对象
public SqlSessionFactoryBean sqlSessionFactoryBean(){
SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
//设置数据源
sqlSessionFactoryBean.setDataSource(dataSource);
//设置mybatis的主配置文件
ResourcePatternResolver resourcePatternResolver=new PathMatchingResourcePatternResolver();
Resource mybatisXml=resourcePatternResolver.getResource("classpath:mybatis-config.xml");
sqlSessionFactoryBean.setConfigLocation(mybatisXml);
//设置别名包
sqlSessionFactoryBean.setTypeAliasesPackage("com.example.demo.pojo");
return sqlSessionFactoryBean;
}
}
建立mybatis的主配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 驼峰的自动映射 -->
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
<plugins>
<plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor">
<!--主键自增回写方法,默认值MYSQL-->
<property name="IDENTITY" value="MYSQL" />
<!--通用Mapper接口,多个通用接口用逗号隔开 -->
<property name="mappers" value="com.github.abel533.mapper.Mapper" />
</plugin>
</plugins>
</configuration>
建立Mapper接口的扫描类MapperScannerConfig
import org.mybatis.spring.mapper.MapperScannerConfigurer;import org.springframework.boot.autoconfigure.AutoConfigureAfter;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configuration@AutoConfigureAfter(MybatisConfig.class) //保证在MyBatisConfig实例化之后再实例化该类public class MapperScannerConfig { /* mapper接口的扫描器 */ @Bean public MapperScannerConfigurer mapperScannerConfigurer(){ MapperScannerConfigurer mapperScannerConfigurer=new MapperScannerConfigurer(); mapperScannerConfigurer.setBasePackage("com.example.demo.mapper"); return mapperScannerConfigurer; }}
创建User表的映射实体类User
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Table(name="user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private int age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
创建UserMapper接口
import com.example.demo.pojo.User;
import com.github.abel533.mapper.Mapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
public interface UserMapper extends Mapper<User> {
@Select("select * from user where name = #{name}")
User findByName(@Param("name") String name);
@Insert("insert into User(name, age) values(#{name}, #{age})")
int insertUser(@Param("name") String name, @Param("age") int age);
}
单元测试
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = DemoApplication.class) //DemoApplication为该项目的入口类
public class DemoApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void find() throws Exception {
User user=new User();
user.setName("ceshi");
user.setAge(19);
userMapper.insertSelective(user);
User u = userMapper.findByName("126");
Assert.assertEquals(16, u.getAge());
}
}
目录结构如下:

来源:https://www.cnblogs.com/tianzhebuzhu/p/7662776.html