ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

【MyBatis系列4】MyBatis与Spring Boost整合

【MyBatis系列4】MyBatis与Spring Boost整合 主要通过示例讲解MyBatis和Spring Boost整合的流程。前言上个月看同事写的项目代码看到MyBatis这块发现里面没有XML文件我就问他“MyBatis和Spring集成我之前写过Demo不是应该有XML文件配置的么”然后他说“这个是Spring Boost不需要XML文件配置”我一脸蒙圈当时就感觉Java的工具真TM多一时这样一时那样搞的我连代码都看不懂。文章《【MyBatis系列2】MyBatis与Spring整合》已经讲述了与Spring的整合下面我们就看看MyBatis和Spring Boost是如何整合的。项目准备DB结构CREATE TABLE user_test ( uid tinyint(2) NOT NULL, uname varchar(20) DEFAULT NULL, usex varchar(10) DEFAULT NULL, PRIMARY KEY (uid) ) ENGINEInnoDB DEFAULT CHARSETutf8DB初始数据uidunameusex1张三女2陈恒男3楼仔男集成示例项目结构我们先看一下项目结构pom.xmlDB使用的是Mysqlpom.xml文件如下?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.example/groupId artifactIddemo/artifactId version0.0.1-SNAPSHOT/version packagingjar/packaging namedemo/name descriptionDemo project for Spring Boot/description parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.0.5.RELEASE/version relativePath/ !-- lookup parent from repository -- /parent properties project.build.sourceEncodingUTF-8/project.build.sourceEncoding project.reporting.outputEncodingUTF-8/project.reporting.outputEncoding java.version1.8/java.version /properties dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-jdbc/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.mybatis.spring.boot/groupId artifactIdmybatis-spring-boot-starter/artifactId version1.3.2/version /dependency dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId scoperuntime/scope /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId version1.16.10/version /dependency /dependencies build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins /build /project资源文件本文不使用application.properties文件而使用更加简洁的application.yml文件。将resource文件夹下原有的application.properties文件删除创建application.yml配置文件备注其实SpringBoot底层会把application.yml文件解析为application.properties本文创建了两个yml文件application.yml和application-dev.yml分别来看一下内容application.ymlspring: profiles: active: devapplication-dev.ymlserver: port: 8080 spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://xxx:3104/xm_jointly?characterEncodingutf8 username: xx password: xxx mybatis: mapper-locations: classpath:mapper/*Mapper.xml type-aliases-package: com.example.entity #showSql logging: level: com: example: mapper : debug因为现在一个项目有好多环境开发环境测试环境准生产环境生产环境每个环境的参数不同所以我们就可以把每个环境的参数配置到yml文件中这样在想用哪个环境的时候只需要在主配置文件中将用的配置文件写上就行如application.yml。在Spring Boot中多环境配置文件名需要满足application-{profile}.yml的格式其中{profile}对应你的环境标识比如application-dev.yml开发环境application-test.yml测试环境application-prod.yml生产环境至于哪个具体的配置文件会被加载需要在application.yml文件中通过spring.profiles.active属性来设置其值对应{profile}值。UserMapper.xml?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.example.dao.UserDao !-- 根据uid查询一个用户信息 -- select idselectUserById parameterTypeInteger resultTypecom.example.entity.MyUser select * from user_test where uid #{uid} /select !-- 查询所有用户信息 -- select idselectAllUser resultTypecom.example.entity.MyUser select * from user_test /select !-- 添加一个用户#{uname}为 com.mybatis.po.MyUser 的属性值 -- insert idaddUser parameterTypecom.example.entity.MyUser insert into user_test (uid,uname,usex) values(#{uid},#{uname},#{usex}) /insert !--修改一个用户 -- update idupdateUser parameterTypecom.example.entity.MyUser update user_test set uname #{uname},usex #{usex} where uid #{uid} /update !-- 删除一个用户 -- delete iddeleteUser parameterTypeInteger delete from user_test where uid #{uid} /delete /mapper代码文件MyUser.java/** * springtest数据库中user表的持久类 */ Data public class MyUser { private Integer uid; // 主键 private String uname; private String usex; }UserDao.javaRepository Mapper public interface UserDao { /** * 接口方法对应的SQL映射文件中的id */ public MyUser selectUserById(Integer uid); public ListMyUser selectAllUser(); public int addUser(MyUser user); public int updateUser(MyUser user); public int deleteUser(Integer uid); }UserServer.javaService RequestMapping(user) public class UserServer { Autowired private UserDao userMapper; ResponseBody RequestMapping(getuser/{id}) public String test(PathVariable int id) { MyUser user userMapper.selectUserById(id); System.out.println(user.toString()); return user.toString(); } }HelloWorldMainApplication.javaSpringBootApplication public class HelloWorldMainApplication { public static void main(String[] args) { // Spring应用启动起来 SpringApplication.run(HelloWorldMainApplication.class, args); } }测试启动服务然后在网页输入http://localhost:8080/user/getuser/1结果如下输入http://localhost:8080/user/getuser/2结果如下整个示例的内容我基本没有讲解为什么要这样集成因为原理基本和Spring的集成类似如果大家对MyBatis与Spring的集成非常清楚这个看起来会非常简单具体每一步的原因请先参考文章《【MyBatis系列2】MyBatis与Spring整合》不同的部分后面我会进行说明。Spring Boost vs Spring两者的相同的地方原理和核心机制是一样的对代码的编码部分是一样的都需要DB类MyUser、接口UserDao、映射文件UserMapper.xml。两者不同的地方之前Spring和MyBatis集成时的一些配置比如sqlSessionFactory、MapperScannerConfigurer、mybatis-config.xml等之前在Spirng中都是写在applicationContext.xml配置中但是在Spring Boost中都找不到了变成了application.yml和application-dev.yml的配置。查找UserMapper.xml文件是直接写在了application-dev.yml这个还是作为MyBatis的配置项。还有一点不知道是不是我用错了我在Spring中可以写个Test测试两者的集成但是在Spring Boost中不能通过Test进行内部调用需要走URL请求的方式可能是程序启动时加载了Spring Boost框架我自己写的Demo没有启动Spring Boost框架导致这个只是我自己的理解后面有空我会再研究一下。
返回列表