解决问题:
SpringBoot2.0集成MyBatis持久化框架?
本章基于SpringBoot专栏(二) -- 搭建第一个SpringBoot项目的代码。
1. 导入依赖和修改Spring配置文件
1.1 在pom.xml中导入Mybatis第三方依赖和mysql数据库连接驱动包,如图:
1.2 修改SpringBoot配置文件
spring: profiles: active: dev
# 为SpringBoot添加数据源,包括url,username,password,数据库驱动名 datasource: url: jdbc:mysql://192.168.43.167:3306/mungerTest01 username: root password: Munger_123 driver-class-name: com.mysql.jdbc.Driver
# SpringBoot第三方依赖,mybatis的配置文件 mybatis: typeAliasesPackage: com.mungerz.dao mapperLocations: classpath:mapper/*.xml
1.3 使用工具自动生成MyBatis持久代码
详情见博客:利用MyBatis生成器自动生成实体类、DAO接口和Mapping映射文件。
1.4 把代码放到SpringBoot项目中。
添加业务代码:
ApiController.java
package com.mungerz.controller; import com.mungerz.service.ApiService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Map; // RestController注解:说明该类是一个Controller,并且参数和返回值都要求符合Restful要求(即Json字符串) @RestController // RequestMapping注解:Controller的类的映射地址。 @RequestMapping("/api") public class ApiController { // Autowired自动注入注解:相当于new ApiService,不过这个工作是由Spring容器自己完成的。AutoWired可以注入Controller,Service,Component这几种类。 @Autowired private ApiService apiService; // RequestMapping注解:方法的映射地址 @RequestMapping("/info") public Map<String, Object> info(Map<String, Object> params){ return apiService.info(params); } @RequestMapping("/insert") public Map<String, Object> insert(Map<String, Object> params){ return apiService.insert(params); } }
ApiService.java
package com.mungerz.service; import java.util.Map; // Service层接口 public interface ApiService { Map<String, Object> info(Map<String, Object> params); Map<String, Object> insert(Map<String, Object> params); }
ApiServiceImpl.java
package com.mungerz.service; import com.mungerz.dao.StudentMapper; import com.mungerz.domain.Student; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.Map; // Service注解:说明该类是一个Service类,从逻辑上我们可以知道这个类属于Service层,应该写业务逻辑;从功能上,这个类是可以通过Autowired注解注入的。 @Service public class ApiServiceImpl implements ApiService {
@Autowired private StudentMapper studentMapper; @Override public Map<String, Object> info(Map<String, Object> params) { Map<String, Object> result = new HashMap<>(); result.put("result", "hello world"); return result; } public Map<String, Object> insert(Map<String, Object> params){ Student student = new Student(); student.setAge(25); student.setName("mungerz"); studentMapper.insert(student); Map<String, Object> result = new HashMap<>(); result.put("result", "insert ?"); return result; } }
StudentMapper.xml中的代码有改动:(因为表的主键是自增的,自动生成的默认需要传入自增主键)
<insert id="insert" parameterType="com.mungerz.domain.Student"> insert into student (name, age ) values (#{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER} ) </insert>
注意:文件目录中,mapper的目录是和application.xml中配置的路径对应的。
1.4 测试(省略)
(转载请标明出处)