上一篇是搭建了一个springboot+mybatis的项目demo,我们发现,整个项目除了文件,其他配置文件,如、mapper.xml都不需要,甚至数据库java配置类也不需要。非常的方便,但是这方便却来得稀里糊涂,另外搭建一个springboot+mybatis的方式非常多,但是这对于一个初学者而言,并不是一个好事,因为很容易弄混,所以本片旨在于弄清楚springboot集成mybatis时,该框架默认做了那些东西。本文还是拿上一篇文件的demo进行演示,具体搭建过程不在演示。
1、springboot项目架构
2、整个项目除了文件和application.properties文件外,没有其他配置文件。
文件内容(部分jar包没有用到,也还是加上去了):
-
<?xml version="1.0" encoding="UTF-8"?>
-
<project xmlns="/POM/4.0.0" xmlns:xsi="http:///2001/XMLSchema-instance"
-
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.">
-
<modelVersion>4.0.0</modelVersion>
-
-
<groupId></groupId>
-
<artifactId>blog</artifactId>
-
<version>0.0.1-SNAPSHOT</version>
-
<packaging>jar</packaging>
-
-
<name>blog</name>
-
<description>Demo project for Spring Boot</description>
-
-
<parent>
-
<groupId></groupId>
-
<artifactId>spring-boot-starter-parent</artifactId>
-
<version>2.0.</version>
-
<relativePath/> <!-- lookup parent from repository -->
-
</parent>
-
-
<properties>
-
<>UTF-8</>
-
<>UTF-8</>
-
<>1.8</>
-
<!-- spring版本号 -->
-
<>5.0.</>
-
</properties>
-
-
<dependencies>
-
<!-- 单元测试 -->
-
<dependency>
-
<groupId>junit</groupId>
-
<artifactId>junit</artifactId>
-
<version>4.11</version>
-
<scope>test</scope>
-
</dependency>
-
-
<dependency>
-
<groupId></groupId>
-
<artifactId>spring-boot-starter-web</artifactId>
-
</dependency>
-
-
<dependency>
-
<groupId></groupId>
-
<artifactId>spring-boot-starter-test</artifactId>
-
<scope>test</scope>
-
</dependency>
-
<dependency>
-
<groupId></groupId>
-
<artifactId>spring-boot-starter-thymeleaf</artifactId>
-
</dependency>
-
<dependency>
-
<groupId></groupId>
-
<artifactId>mybatis-spring-boot-starter</artifactId>
-
<version>1.3.2</version>
-
</dependency>
-
-
<!-- JSTL (JSP standard Tag Library) JSP 标准标签库 -->
-
<dependency>
-
<groupId></groupId>
-
<artifactId>jstl</artifactId>
-
</dependency>
-
<dependency>
-
<groupId></groupId>
-
<artifactId>tomcat-embed-jasper</artifactId>
-
<scope>provided</scope>
-
<!--<scope>provided</scope> 注意,这个scope需要被注释掉-->
-
</dependency>
-
<dependency>
-
<groupId></groupId>
-
<artifactId>-api</artifactId>
-
<scope>provided</scope>
-
</dependency>
-
-
<!--Spring Boot的JPA依赖包-->
-
<dependency>
-
<groupId></groupId>
-
<artifactId>spring-boot-starter-data-jpa</artifactId>
-
</dependency>
-
-
<dependency>
-
<groupId>mysql</groupId>
-
<artifactId>mysql-connector-java</artifactId>
-
<version>5.1.38</version>
-
</dependency>
-
<!-- 数据库连接池 -->
-
<dependency>
-
<groupId></groupId>
-
<artifactId>druid</artifactId>
-
<version>1.1.10</version>
-
</dependency>
-
<!--在导入druid数据源时,也就是外部数据源,我们必须导入相关依赖,因此我尝试将springboot默认数据源的相关依赖也导入-->
-
<dependency>
-
<groupId></groupId>
-
<artifactId>commons-dbcp2</artifactId>
-
<version>2.2.0</version>
-
</dependency>
-
-
<!-- /artifact//mybatis-spring -->
-
<dependency>
-
<groupId></groupId>
-
<artifactId>mybatis-spring</artifactId>
-
<version>1.3.1</version>
-
</dependency>
-
<!-- /artifact//ibatis-core -->
-
<dependency>
-
<groupId></groupId>
-
<artifactId>ibatis-core</artifactId>
-
<version>3.0</version>
-
</dependency>
-
<!--整合mybatis-->
-
<dependency>
-
<groupId></groupId>
-
<artifactId>mybatis-spring-boot-starter</artifactId>
-
<version>1.3.2</version>
-
</dependency>
-
<!-- 数据库驱动 -
-
/artifact//spring-jdbc -->
-
<dependency>
-
<groupId></groupId>
-
<artifactId>spring-jdbc</artifactId>
-
<version>5.0.</version>
-
</dependency>
-
-
<!-- aop -->
-
<dependency>
-
<groupId></groupId>
-
<artifactId>spring-aop</artifactId>
-
<version>${}</version>
-
</dependency>
-
-
<dependency>
-
<groupId></groupId>
-
<artifactId>spring-aspects</artifactId>
-
<version>${}</version>
-
</dependency>
-
-
<dependency>
-
<groupId></groupId>
-
<artifactId>aspectjrt</artifactId>
-
<version>1.6.11</version>
-
</dependency>
-
<dependency>
-
<groupId></groupId>
-
<artifactId>aspectjweaver</artifactId>
-
<version>1.6.11</version>
-
</dependency>
-
<dependency>
-
<groupId>cglib</groupId>
-
<artifactId>cglib</artifactId>
-
<version>2.1_3</version>
-
</dependency>
-
<!-- end -->
-
-
<!--redis jar包-->
-
<dependency>
-
<groupId></groupId>
-
<artifactId>spring-boot-starter-data-redis</artifactId>
-
<version>2.0.</version>
-
</dependency>
-
</dependencies>
-
<build>
-
<plugins>
-
<plugin>
-
<groupId></groupId>
-
<artifactId>spring-boot-maven-plugin</artifactId>
-
</plugin>
-
</plugins>
-
<!--注意此次必须要放在此目录下才能被访问到
-
<resources>
-
<resource>
-
<directory>src/main/webapp</directory>
-
-
<targetPath>META-INF/resources</targetPath>
-
<includes>
-
<include>**/**</include>
-
</includes>
-
</resource>
-
<resource>
-
<directory>src/main/resources</directory>
-
<filtering>true</filtering>
-
<includes>
-
<include>**/*</include>
-
</includes>
-
</resource>
-
</resources> -->
-
</build>
-
</project>
文件内容主要是配置了下数据库连接信息(必须配置)以及tomcat server的端口号(默认是8080,如果没有修改tomcat端口号,这部分也是可以不用配置的),项目中文件配置内容如下:
-
#tomcat端口号
-
=9999
-
#mysql配置
-
=jdbc:mysql://localhost:3306/ssmstu?useUnicode=true&characterEncoding=utf8
-
=root
-
=bjtungirc
-
-class-name=
-
=
3、接下来就可以直接写controller、mapper、model、service里面的java代码了
首先按model开始讲起:
a、 定义了一个POJO类
-
package ;
-
-
public class Person {
-
-
private Integer id;
-
private String name;
-
private Integer age;
-
-
public Integer getId() {
-
return id;
-
}
-
-
public void setId(Integer id) {
-
= id;
-
}
-
-
public String getName() {
-
return name;
-
}
-
-
public void setName(String name) {
-
= name;
-
}
-
-
public Integer getAge() {
-
return age;
-
}
-
-
public void setAge(Integer age) {
-
= age;
-
}
-
-
@Override
-
public String toString() {
-
return
-
"hljs-ln-numbers">
", name='" + name + '\'' +
-
", age=" + age
-
;
-
}
-
}
b、DAO层设计---mapper---》 是一个接口类,在springmvc框架中,我们是需要为每一个mapper类写xml配置文件,例如,该文件负责具体的mapper类中的方法实现,因此我们不需要写dao的实现,就可以直接在service里面直接调用dao的方法了,mybatis会默认把映射为dao的实现。
在springboot中,我们甚至不用创建文件,可以直接在里面,添加注解进行dao层操作,然后在启动类里面添加@MapperScan("") //包扫描,即可。
内容如下:
-
package ;
-
-
import ;
-
import ;
-
import ;
-
-
import ;
-
-
@Repository
-
public interface UserMapper {
-
@Select("SELECT * FROM person WHERE id = #{id}") //具体dao层方法的实现
-
Person selectUser(int id);//返回一个person对象
-
-
@Select("select * from person order by id")
-
ArrayList<Person> selectAllUser();//返回一个person对象
-
}
-
-
启动类
-
package ;
-
-
import ;
-
import ;
-
import ;
-
import ;
-
-
@MapperScan("") //包扫描(很重要,否则注解无效)
-
@EnableWebMvc
-
@SpringBootApplication
-
public class BlogApplication {
-
-
public static void main(String[] args) {
-
(, args);
-
}
-
}
c、服务层--->service-----> 主要是对应业务方法中的实现
-
package ;
-
-
import ;
-
import ;
-
import ;
-
import ;
-
import ;
-
import ;
-
-
import ;
-
-
-
@Service
-
public class UserService {
-
-
@Autowired
-
public UserMapper userMapper;
-
-
// 获取单个用户信息
-
@Transactional //添加事务管理
-
public Person selectUser(int id) {
-
return (id);
-
}
-
-
//获取所有的用户信息
-
@Transactional
-
public ArrayList<Person> selectAllUser() {
-
-
return ();
-
-
}
-
-
}
d、业务调度-- 主要是对业务逻辑的调度代码,具体实现是在service层里面
-
package ;
-
-
import ;
-
import ;
-
import ;
-
import ;
-
import ;
-
import ;
-
import ;
-
import ;
-
-
//@RestController
-
@Controller
-
//@ResponseBody
-
//testController返回的不是页面,Controller返回的是页面 testController=Controller + ResponseBody
-
public class UserController {
-
@Autowired
-
private UserService userService;
-
-
@RequestMapping("/showUser/{id}")
-
public String selectUser (@PathVariable int id,Model model){
-
("name", (id).toString());
-
return "greets";
-
-
}
-
@RequestMapping("/showUser/all")
-
public String selectAllUser(){
-
return ().toString();
-
-
}
-
@RequestMapping("/name")
-
public String name() {
-
("============================================");
-
return "hello";
-
}
-
-
/**
-
@RequestMapping("/greet")
-
public String greeting(@RequestParam(value = "name", required = false, defaultValue = "World") String name,
-
Model model) {
-
("name", name);
-
return "greets";
-
}
-
**/
-
-
}
注意:
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