1 Spring boot、spring、spring mvc的关系区别
1.1 Spring boot包含spring,并简化了spring复杂繁琐的配置问题
1.2 Spring是一个实现了ioc与aop模型的框架
1.3 Spring mvc是基于servlet的web开发框架,主要解决web开发问题,是spring框架中的一个模块
2 创建第一个使用mybatis的web应用程序
3 引入spring boot依赖
<!--spring boot 依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
<relativePath/>
</parent>
<!--thymeleaf 模板引擎依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--全栈web开发依赖,包括tomcat和springMVC依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--nekohtml为HTML的扫描器和修补器,可以自动补齐html缺失-->
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
</dependency>
4 /demo/firstMybatis/controller/下编写控制器QuestionController
@Controller
@RequestMapping("/question")
public class QuestionController {
@GetMapping("/{id}")
public String showQuestion(@PathVariable Long id, Model model) throws Exception{
//读取mybatis.xml文件配置
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
//实例化SqlSessionFactory的创建对象
//SqlSessionFactory一旦创建就一直存在
//所以SqlSessionFactoryBuilder在创建完SqlSessionFactory后就可以销毁
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//根据mybatis.xml的配置来创建SqlSessionFactory
//一个web应用程序只有一个SqlSessionFactory,所以要用单例模式
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
//开启(创建)本次sql操作会话
SqlSession sqlSession = sqlSessionFactory.openSession();
//会话通过mybatis将映射的数据库操作对象实例化
IQuestionDao iQuestionDao = sqlSession.getMapper(IQuestionDao.class);
//访问数据库操作对象的方法
Question question = iQuestionDao.findOne(id);
//关闭数据库连接
sqlSession.close();
//将对象保存到model
model.addAttribute("question", question);
return "question";
}
}
5 在/resources/templates/下编写question.html页面
<html xmlns:th="http://www.w3.org/1999/xhtml">
<body>
<h2>你好,这个我的第一个基于mybatis的web页面</h2>
<h2 th:text="${question.getId()}">问题ID</h2>
<h2 th:text="${question.getTitle()}">问题标题</h2>
<h2 th:text="${question.getDescription()}">问题内容</h2>
</body>
</html>
6 在/demo/firstMybatis/下编写web应用程序的入口类WebApp
//标注这是一个spring boot的web应用程序
@SpringBootApplication
public class WebApp {
//应用程序入口,第一次访问站点时,tomcat调用此方法来其中这个web应用程序
public static void main(String[] args){
SpringApplication.run(WebApp.class);
}
}
7 右键webapp执行
7.1 访问:http://localhost:8080/查看
7.2 访问:http://localhost:8080/question/1查看
8 由于SqlSessionFactory负责创建所有会话,所以一个站点只有一个SqlSessionFactory就够了,下面采用单例模式产生SqlSessionFactory,/demo/firstMybatis/controller/下编写SqlSessionFactoryManager来负责产生单例的SqlSessionFactory
public class SqlSessionFactoryManager {
private static String mybatis_config = "mybatis.xml";
private static SqlSessionFactory sqlSessionFactory;
public static SqlSessionFactory getSqlSessionFactory()throws Exception{
if(sqlSessionFactory == null){
InputStream inputStream = Resources.getResourceAsStream(mybatis_config);
//此处创建的SqlSessionFactoryBuilder为匿名对象,使用完由GC直接回收
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
return sqlSessionFactory;
}
}
9 控制器可以修改为如下
@GetMapping("/{id}")
public String showQuestion(@PathVariable Long id, Model model) throws Exception{
//从单例模式中获取SqlSessionFactory的实例化对象
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryManager.getSqlSessionFactory();
//开启(创建)本次会话
SqlSession sqlSession = sqlSessionFactory.openSession();
//会话通过mybatis将映射的数据库操作对象实例化
IQuestionDao iQuestionDao = sqlSession.getMapper(IQuestionDao.class);
//访问数据库操作对象的方法
Question question = iQuestionDao.findOne(id);
//关闭数据库连接
sqlSession.close();
//将对象保存到model
model.addAttribute("question", question);
return "question";
}
10 访问http://localhost:8080/question/1查看