引入依赖 Spring Boot对于MyBatis的支持需要引入mybatis-spring-boot-starter的pom文件。 搜索 mvnrepository 然后在项目的 pom.xml 中添加依赖如下 <!-- https:///artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>3.0.1</version> </dependency>
以及mysql的依赖 <!-- https:///artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.32</version> </dependency>
添加MyBatis配置 添加MyBatis配置类,配置相关扫描路径,包括DAO,Model,XML映射文件的扫描。 import javax.annotation.Resource; import javax.sql.DataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
@Configuration @MapperScan("com.biglead.demo.mapper") // 扫描DAO public class MybatisConfig { @Resource private DataSource dataSource;
@Bean public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setTypeAliasesPackage("com.biglead.demo.pojo"); // 扫描Model
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); //对应的mapper sessionFactory.setMapperLocations(resolver.getResources("classpath*:**/sqlmap/*.xml")); // 扫描映射文件
return sessionFactory.getObject(); } }
com.biglead.demo.pojo 数据对象实体所在的包 classpath*:**/sqlmap/*.xml MyBatis 对应的 xml 所在的包 com.biglead.demo.mapper MyBatis 对应的 mapper 接口所在的包
添加数据源配置打开 application.yml ,添加MySQL数据源连接信息。 server: port: 8899 spring: mvc: pathmatch: matching-strategy : ant-path-matcher datasource: url: jdbc:mysql://mysql:3306/spring_boot?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8&useSSL=false username: testadmin password: qwert.12345 driver-class-name: com.mysql.jdbc.Driver
数据库中创建表CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_name` varchar(255) DEFAULT NULL, `user_age` varchar(255) DEFAULT NULL, `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='用户表';
然后插入几条数据 INSERT INTO `spring_boot`.`t_user` (`id`, `user_name`, `user_age`, `create_time`) VALUES (1, '张三', '22', '2023-03-14 12:09:20'); INSERT INTO `spring_boot`.`t_user` (`id`, `user_name`, `user_age`, `create_time`) VALUES (2, '李四', '33', '2023-03-14 12:09:24');
编写 Controller import com.biglead.demo.common.R; import com.biglead.demo.pojo.UserInfo; import com.biglead.demo.service.UserService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import java.util.List;
@RestController @RequestMapping("user") public class UserController { @Resource private UserService userService; @GetMapping(value="/list") public R hello() { List<UserInfo> userInfoList = userService.findList(); return R.okData(userInfoList); } }
- @RestController是@ResponseBody和@Controller的组合注解。
- @Controller 注解将 UserController 类声明成一个控制器
- @ResponseBody注解的作用是将控制器的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到Response对象的body区,通常用来返回JSON数据或者是XML数据
CustomConfigService.java public interface UserService { List<UserInfo> findList(); }
UserServiceImpl .java import com.biglead.demo.mapper.UserMapper; import com.biglead.demo.pojo.UserInfo; import com.biglead.demo.service.UserService; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import java.util.List;
@Service public class UserServiceImpl implements UserService { @Resource private UserMapper userMapper; @Override public List<UserInfo> findList() { return userMapper.selectList(); } }
UserMapper.java 是一个接口 import java.util.List;
public interface UserMapper { List<UserInfo> selectList(); }
对应的UserMapper.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "http:///dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.biglead.demo.mapper.UserMapper"> <resultMap id="BaseResultMap" type="com.biglead.demo.pojo.UserInfo"> <id column="user_id" jdbcType="BIGINT" property="userId"/> <result column="create_time" property="createTime"/> <result column="user_name" property="userName"/> <result column="user_age" property="userAge"/> </resultMap>
<select id="selectList" resultMap="BaseResultMap"> select id, user_name, user_age, create_time from t_user </select> </mapper>
UserInfo 数据模型 import lombok.Data; import lombok.ToString;
import java.io.Serializable; import java.time.LocalDateTime;
@Data @ToString public class UserInfo implements Serializable { private Long userId; private String userName ; private String userAge; private LocalDateTime createTime; }
配置 maven 打包资源 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <!-- 打包时拷贝MyBatis的映射文件 --> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/sqlmap/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.*</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
然后运行项目
在Postman 中访问 http://localhost:8899/user/list
项目源码在这里 https://gitee.com/android.long/spring-boot-study/tree/master/biglead-api-02-mybatis
|