下面是详解Spring与Mybatis整合方法(基于IDEA中的Maven整合)的完整攻略,该过程中包含了2个示例:
1. 环境准备
在进行整合之前,需要先准备好以下环境:
- JDK
- Maven
- IDEA
- Spring
- Mybatis
在这里由于要使用Maven来管理依赖,所以需要找到一个可以正常运行的Maven仓库,可以使用阿里云镜像或者是Maven中央仓库。具体操作方法可以通过搜索引擎进行查询。
2. 创建Maven项目
在IDEA中先新建一个Maven项目,并在pom.xml中添加以下依赖:
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.0</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
3. 配置applicationContext.xml
在resources目录下新建一个applicationContext.xml文件,并配置Spring和Mybatis的整合信息。具体内容如下:
<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- 配置SqlSessionFactory对象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- mybatis全局配置文件路径 -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!-- DAO接口扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.dao"/>
</bean>
<!-- 注入fooService -->
<bean id="fooService" class="com.example.service.FooServiceImpl">
<property name="fooDao" ref="fooDao"/>
</bean>
<!-- 注入fooDao -->
<bean id="fooDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.example.dao.FooDao"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
4. 配置mybatis-config.xml
在resources目录下新建一个mybatis-config.xml文件,并配置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="logImpl" value="STDOUT_LOGGING"/>
</settings>
</configuration>
5. 创建数据表和实体类
在数据库中创建一个foo表,包含id和name两个字段。同时,在Java中创建一个Foo实体类,用于映射foo表的实体对象。
CREATE TABLE `foo` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
public class Foo {
private Long id;
private String name;
// Getter和Setter方法
}
6. 创建DAO接口和Mapper映射文件
在Java中创建一个FooDao接口,用于定义对foo表的操作方法,同时在resources目录下创建一个与FooDao同名的Mapper映射文件FooDao.xml,用于定义SQL语句的具体实现。代码如下:
public interface FooDao {
int insert(Foo foo);
Foo findById(Long id);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.dao.FooDao">
<insert id="insert" parameterType="com.example.entity.Foo">
insert into foo(name) values(#{name})
</insert>
<select id="findById" parameterType="java.lang.Long" resultType="com.example.entity.Foo">
select * from foo where id=#{id}
</select>
</mapper>
7. 创建服务类和控制器
在Java中创建一个FooService实现类,用于调用FooDao中的方法,同时在Spring中进行注入。在Java中创建一个FooController控制器类,用于处理HTTP请求和响应。代码如下:
@Service
public class FooServiceImpl implements FooService {
private FooDao fooDao;
@Autowired
public void setFooDao(FooDao fooDao) {
this.fooDao = fooDao;
}
@Override
public void insert(Foo foo) {
fooDao.insert(foo);
}
@Override
public Foo findById(Long id) {
return fooDao.findById(id);
}
}
@RestController
@RequestMapping(path = "/foo")
public class FooController {
private FooService fooService;
@Autowired
public void setFooService(FooService fooService) {
this.fooService = fooService;
}
@PostMapping
public void insert(@RequestBody Foo foo) {
fooService.insert(foo);
}
@GetMapping(path = "/{id}")
public Foo findById(@PathVariable Long id) {
return fooService.findById(id);
}
}
8. 示例一:单元测试
在Java中创建一个FooControllerTest类,用于进行单元测试。代码如下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:applicationContext.xml"})
public class FooControllerTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setup() {
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
@Test
public void testInsert() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.post("/foo")
.contentType(MediaType.APPLICATION_JSON)
.content("{\"name\":\"test\"}"))
.andExpect(MockMvcResultMatchers.status().isOk());
}
@Test
public void testFindById() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/foo/1"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.id", Matchers.is(1)))
.andExpect(MockMvcResultMatchers.jsonPath("$.name", Matchers.is("test")));
}
}
9. 示例二:调用API
在Postman中进行API测试。首先使用POST方法调用insert接口,请求体中包含name字段,例如{"name":"test"}。然后使用GET方法调用findById接口,并将id设置为刚刚插入数据的id值,例如/foo/1。期望的响应结果为{"id":1,"name":"test"}。如果数据库中已存在id为1的数据,则需要将测试用例中的id值设置成其他未被使用的整数。
经过这些步骤之后,就可以实现Spring和Mybatis的整合了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Spring与Mybatis整合方法(基于IDEA中的Maven整合) - Python技术站