关于Springboot-Mybatis无配置文件注解版的思考

时间:2024-10-06 07:16:38

        上一篇是搭建了一个springboot+mybatis的项目demo,我们发现,整个项目除了文件,其他配置文件,如、mapper.xml都不需要,甚至数据库java配置类也不需要。非常的方便,但是这方便却来得稀里糊涂,另外搭建一个springboot+mybatis的方式非常多,但是这对于一个初学者而言,并不是一个好事,因为很容易弄混,所以本片旨在于弄清楚springboot集成mybatis时,该框架默认做了那些东西。本文还是拿上一篇文件的demo进行演示,具体搭建过程不在演示。

 1、springboot项目架构

2、整个项目除了文件和application.properties文件外,没有其他配置文件。

      文件内容(部分jar包没有用到,也还是加上去了):

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="/POM/4.0.0" xmlns:xsi="http:///2001/XMLSchema-instance"
  3. xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId></groupId>
  6. <artifactId>blog</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <packaging>jar</packaging>
  9. <name>blog</name>
  10. <description>Demo project for Spring Boot</description>
  11. <parent>
  12. <groupId></groupId>
  13. <artifactId>spring-boot-starter-parent</artifactId>
  14. <version>2.0.</version>
  15. <relativePath/> <!-- lookup parent from repository -->
  16. </parent>
  17. <properties>
  18. <>UTF-8</>
  19. <>UTF-8</>
  20. <>1.8</>
  21. <!-- spring版本号 -->
  22. <>5.0.</>
  23. </properties>
  24. <dependencies>
  25. <!-- 单元测试 -->
  26. <dependency>
  27. <groupId>junit</groupId>
  28. <artifactId>junit</artifactId>
  29. <version>4.11</version>
  30. <scope>test</scope>
  31. </dependency>
  32. <dependency>
  33. <groupId></groupId>
  34. <artifactId>spring-boot-starter-web</artifactId>
  35. </dependency>
  36. <dependency>
  37. <groupId></groupId>
  38. <artifactId>spring-boot-starter-test</artifactId>
  39. <scope>test</scope>
  40. </dependency>
  41. <dependency>
  42. <groupId></groupId>
  43. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  44. </dependency>
  45. <dependency>
  46. <groupId></groupId>
  47. <artifactId>mybatis-spring-boot-starter</artifactId>
  48. <version>1.3.2</version>
  49. </dependency>
  50. <!-- JSTL (JSP standard Tag Library) JSP 标准标签库 -->
  51. <dependency>
  52. <groupId></groupId>
  53. <artifactId>jstl</artifactId>
  54. </dependency>
  55. <dependency>
  56. <groupId></groupId>
  57. <artifactId>tomcat-embed-jasper</artifactId>
  58. <scope>provided</scope>
  59. <!--<scope>provided</scope> 注意,这个scope需要被注释掉-->
  60. </dependency>
  61. <dependency>
  62. <groupId></groupId>
  63. <artifactId>-api</artifactId>
  64. <scope>provided</scope>
  65. </dependency>
  66. <!--Spring Boot的JPA依赖包-->
  67. <dependency>
  68. <groupId></groupId>
  69. <artifactId>spring-boot-starter-data-jpa</artifactId>
  70. </dependency>
  71. <dependency>
  72. <groupId>mysql</groupId>
  73. <artifactId>mysql-connector-java</artifactId>
  74. <version>5.1.38</version>
  75. </dependency>
  76. <!-- 数据库连接池 -->
  77. <dependency>
  78. <groupId></groupId>
  79. <artifactId>druid</artifactId>
  80. <version>1.1.10</version>
  81. </dependency>
  82. <!--在导入druid数据源时,也就是外部数据源,我们必须导入相关依赖,因此我尝试将springboot默认数据源的相关依赖也导入-->
  83. <dependency>
  84. <groupId></groupId>
  85. <artifactId>commons-dbcp2</artifactId>
  86. <version>2.2.0</version>
  87. </dependency>
  88. <!-- /artifact//mybatis-spring -->
  89. <dependency>
  90. <groupId></groupId>
  91. <artifactId>mybatis-spring</artifactId>
  92. <version>1.3.1</version>
  93. </dependency>
  94. <!-- /artifact//ibatis-core -->
  95. <dependency>
  96. <groupId></groupId>
  97. <artifactId>ibatis-core</artifactId>
  98. <version>3.0</version>
  99. </dependency>
  100. <!--整合mybatis-->
  101. <dependency>
  102. <groupId></groupId>
  103. <artifactId>mybatis-spring-boot-starter</artifactId>
  104. <version>1.3.2</version>
  105. </dependency>
  106. <!-- 数据库驱动 -
  107. /artifact//spring-jdbc -->
  108. <dependency>
  109. <groupId></groupId>
  110. <artifactId>spring-jdbc</artifactId>
  111. <version>5.0.</version>
  112. </dependency>
  113. <!-- aop -->
  114. <dependency>
  115. <groupId></groupId>
  116. <artifactId>spring-aop</artifactId>
  117. <version>${}</version>
  118. </dependency>
  119. <dependency>
  120. <groupId></groupId>
  121. <artifactId>spring-aspects</artifactId>
  122. <version>${}</version>
  123. </dependency>
  124. <dependency>
  125. <groupId></groupId>
  126. <artifactId>aspectjrt</artifactId>
  127. <version>1.6.11</version>
  128. </dependency>
  129. <dependency>
  130. <groupId></groupId>
  131. <artifactId>aspectjweaver</artifactId>
  132. <version>1.6.11</version>
  133. </dependency>
  134. <dependency>
  135. <groupId>cglib</groupId>
  136. <artifactId>cglib</artifactId>
  137. <version>2.1_3</version>
  138. </dependency>
  139. <!-- end -->
  140. <!--redis jar包-->
  141. <dependency>
  142. <groupId></groupId>
  143. <artifactId>spring-boot-starter-data-redis</artifactId>
  144. <version>2.0.</version>
  145. </dependency>
  146. </dependencies>
  147. <build>
  148. <plugins>
  149. <plugin>
  150. <groupId></groupId>
  151. <artifactId>spring-boot-maven-plugin</artifactId>
  152. </plugin>
  153. </plugins>
  154. <!--注意此次必须要放在此目录下才能被访问到
  155. <resources>
  156. <resource>
  157. <directory>src/main/webapp</directory>
  158. <targetPath>META-INF/resources</targetPath>
  159. <includes>
  160. <include>**/**</include>
  161. </includes>
  162. </resource>
  163. <resource>
  164. <directory>src/main/resources</directory>
  165. <filtering>true</filtering>
  166. <includes>
  167. <include>**/*</include>
  168. </includes>
  169. </resource>
  170. </resources> -->
  171. </build>
  172. </project>

  文件内容主要是配置了下数据库连接信息(必须配置)以及tomcat server的端口号(默认是8080,如果没有修改tomcat端口号,这部分也是可以不用配置的),项目中文件配置内容如下:

  1. #tomcat端口号
  2. =9999
  1. #mysql配置
  2. =jdbc:mysql://localhost:3306/ssmstu?useUnicode=true&characterEncoding=utf8
  3. =root
  4. =bjtungirc
  5. -class-name=
  6. =

3、接下来就可以直接写controller、mapper、model、service里面的java代码了

首先按model开始讲起:

a、   定义了一个POJO类

  1. package ;
  2. public class Person {
  3. private Integer id;
  4. private String name;
  5. private Integer age;
  6. public Integer getId() {
  7. return id;
  8. }
  9. public void setId(Integer id) {
  10. = id;
  11. }
  12. public String getName() {
  13. return name;
  14. }
  15. public void setName(String name) {
  16. = name;
  17. }
  18. public Integer getAge() {
  19. return age;
  20. }
  21. public void setAge(Integer age) {
  22. = age;
  23. }
  24. @Override
  25. public String toString() {
  26. return
  27. "hljs-ln-numbers">
    ", name='" + name + '\'' +
  28. ", age=" + age
  29. ;
  30. }
  31. }

b、DAO层设计---mapper---》  是一个接口类,在springmvc框架中,我们是需要为每一个mapper类写xml配置文件,例如,该文件负责具体的mapper类中的方法实现,因此我们不需要写dao的实现,就可以直接在service里面直接调用dao的方法了,mybatis会默认把映射为dao的实现。

     在springboot中,我们甚至不用创建文件,可以直接在里面,添加注解进行dao层操作,然后在启动类里面添加@MapperScan("") //包扫描,即可。

内容如下:

  1. package ;
  2. import ;
  3. import ;
  4. import ;
  5. import ;
  6. @Repository
  7. public interface UserMapper {
  8. @Select("SELECT * FROM person WHERE id = #{id}") //具体dao层方法的实现
  9. Person selectUser(int id);//返回一个person对象
  10. @Select("select * from person order by id")
  11. ArrayList<Person> selectAllUser();//返回一个person对象
  12. }
  13. 启动类
  1. package ;
  2. import ;
  3. import ;
  4. import ;
  5. import ;
  6. @MapperScan("") //包扫描(很重要,否则注解无效)
  7. @EnableWebMvc
  8. @SpringBootApplication
  9. public class BlogApplication {
  10. public static void main(String[] args) {
  11. (, args);
  12. }
  13. }

c、服务层--->service-----> 主要是对应业务方法中的实现

  1. package ;
  2. import ;
  3. import ;
  4. import ;
  5. import ;
  6. import ;
  7. import ;
  8. import ;
  9. @Service
  10. public class UserService {
  11. @Autowired
  12. public UserMapper userMapper;
  13. // 获取单个用户信息
  14. @Transactional //添加事务管理
  15. public Person selectUser(int id) {
  16. return (id);
  17. }
  18. //获取所有的用户信息
  19. @Transactional
  20. public ArrayList<Person> selectAllUser() {
  21. return ();
  22. }
  23. }

d、业务调度-- 主要是对业务逻辑的调度代码,具体实现是在service层里面

  1. package ;
  2. import ;
  3. import ;
  4. import ;
  5. import ;
  6. import ;
  7. import ;
  8. import ;
  9. import ;
  10. //@RestController
  11. @Controller
  12. //@ResponseBody
  13. //testController返回的不是页面,Controller返回的是页面 testController=Controller + ResponseBody
  14. public class UserController {
  15. @Autowired
  16. private UserService userService;
  17. @RequestMapping("/showUser/{id}")
  18. public String selectUser (@PathVariable int id,Model model){
  19. ("name", (id).toString());
  20. return "greets";
  21. }
  22. @RequestMapping("/showUser/all")
  23. public String selectAllUser(){
  24. return ().toString();
  25. }
  26. @RequestMapping("/name")
  27. public String name() {
  28. ("============================================");
  29. return "hello";
  30. }
  31. /**
  32. @RequestMapping("/greet")
  33. public String greeting(@RequestParam(value = "name", required = false, defaultValue = "World") String name,
  34. Model model) {
  35. ("name", name);
  36. return "greets";
  37. }
  38. **/
  39. }

注意:

1、理解@controller和@testcontroller两个注解,简单可以这么理解:

        testController返回的不是页面,Controller返回的是页面 testController=Controller + ResponseBody

2、return "greets"后,springboot是怎么定位到页面的:

      springboot的页面默认是放在:templates下面的,查询时默认文件的后缀名是html,也就是说默认是支持html文件的,但是jsp文件是不推荐的,需要额外配置。默认前缀名是通过return返回的字符串进行查找,如果找到了,就直接返回该页面文件视图,否则就直接返回默认的页面。

       当然我们也可以在代码中设置指定的访问页面路径,如下图所示,但是这种方式实现太笨重了,如果要修改默认存放目录,可以通过设置属性 -path-pattern来实现。

4、至此整个基于springboot+mybatis默认配置的项目介绍完毕了。

总结归纳:

1、springboot+mybatis只需要文件就可以了,里面只需要配置下(tomcat端口号,如果是8080,连该端口号也不需要配置),其次配置下mysql的连接属性.

2、springboot集成mybatis不需要也不需要,也不需要相应的配置类(配置事务和数据源)。原因在于springboot提供的mybatis-spring-boot-starter,使用注解解决一切问题,注意一定要在启动类里面@MapperScan("") //包扫描,否则注解会无效。(资料:/shanheyongmu/p/

3、Spring boot不建议使用jsp开发web。而是推荐使用Thymeleaf来作为模板引擎开发web项目。

      spring-boot项目静态文件目录:/src/java/resources/static 
      spring-boot项目模板文件目录:/src/java/resources/templates 
      html文件在/src/java/resources/templates下。

     如果要使用jsp来开发web,需要自行配置。

4、controller层,代码中注意理解@controller和@testcontroller两个注解,简单可以这么理解:

        testController返回的不是页面,Controller返回的是页面 testController=Controller + ResponseBody

 

最后附上一个借助于配置文件实现的springboot+mybatis+redis的项目代码

/xia123zheng/springboot_mybatis_jedis.git