SpringBoot+Mybatis 框架之 @Select注解方式搭建
1、创建SpringBoot项目
两种方式:1、通过idea来New一个project项目。
2、登陆 https://start.spring.io/ 上面选择相应的配置,点击“Generate Project”按钮下载项目,完成项目初始化。
pom.xml文件的配置(其中mysql的maven配置可能会和你本地的不服,会报数据库连接的错误,如果出现这种问题,改一下数据库版本就可以):
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>demo</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-services</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--集成日志logback+slf4j --> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.2</version> </dependency> </dependencies> <!--<packaging>jar</packaging>--> <build> <finalName>demo</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.properties文件中的配置项(端口、数据库配置、debug、mybatis)
#项目的启动端口 server.port=9090 #数据库的配置 spring.datasource.url=jdbc:mysql://localhost:3306/DBName?useUnicode=true&characterEncoding=utf-8&useSSL=true spring.datasource.username= USERNAME spring.datasource.password= PASSWORD spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #显示标准输出 logging.level.com.shyroke.mapper=debug #路径是是实体类的路径,和写在所有Mapper文件中用来扫描Mapper文件的@Mapper注解联用 mybatis.type-aliases-package=com.web.test.test.domain
2、项目内部结构
3、项目的最小功能代码
这个例子是实现一个简单的查询功能:
Controller层:
package com.web.test.test.controller; import com.web.test.test.service.TeacherService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TeacherController { @Autowired private TeacherService teacherService; //Select By Id @RequestMapping("/showTeacher/{id}") public String selectTeacher(@PathVariable int id){ return teacherService.selectTeacher(id).toString(); } //Select All @RequestMapping("/selectAll") public String selectAll(){ return teacherService.selectAll().toString(); }
* 有的朋友想在return的时候直接跳转界面去,看到@RestController了吗,这个是ResponseBody和Controller的集合,意思是return的数据都变成json的格式,返回到前端,不会跳转界面。
如果想跳转页面的话,就需要把RestController改成Controller,就会跳转页面了。
* 还有些朋友想带着数据返回到重新定义的页面去,对于这种需求,我建议使用“视图解释器解析”——ModelAndVIew。ModelAndView的用法类似于这样:
@RequestMapping public ModelAndView list(Model model) { model.addAttribute("userList", userRepository.listUsers()); model.addAttribute("title", "用户管理"); // new ModelAndView(目标页面的路径, 目标页面接到的返回值名称, api封装好返回的数据) return new ModelAndView("users/list","userModel",model); }
Service层:
package com.we b.test.test.service; import com.web.test.test.domain.Teacher; import java.util.List; public interface TeacherService { Teacher selectTeacher(int id); List<Teacher> selectAll(); }
Service层的实现类,在Service文件夹下的Impl文件夹中:
package com.test.test.Service.impl; import com.test.test.Service.TeacherService; import com.test.test.domain.Teacher; import com.test.test.mapper.TeacherMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; @Service public class TeacherImpl implements TeacherService { @Autowired TeacherMapper mapper; @Override public Teacher selectTeacher(int id) { return mapper.selectTeacher(id); } @Override public List<Teacher> selectAll() { return mapper.selectAll(); } }
Mapper 相当于DAO层:
package com.we b.test.test.mapper; import com.web.test.test.domain.Teacher; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper public interface TeacherMapper { @Select ("SELECT * FROM Teacher WHERE id = #{id}") Teacher selectTeacher(int id); @Select("SELECT * FROM TEACHER WHERE 1=1") List<Teacher> selectAll(); }
Domain 实体类:
package com.web.test.test.domain; public class Teacher { private int id; private String name; public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } @Override public String toString() { return "Teacher{" +"id=" + id +", name='" + name + '\'' +'}'; } }
这样就能实现@Select标签的方式搭建SpringBoot的Mybatis框架了。挺简单的,但是我不太喜欢用这种当时,Mybatis的继承方式三种:@Select、@Provider、还有xml映射文件的方式。
@Select的方式写得太死了,不够灵活。更多的还是使用另外两种方式。这两天我会再介绍另外两种方式。