2、在web中使用mybatis

本文介绍如何在Spring Boot项目中集成MyBatis框架,实现简易的CRUD操作。主要内容包括Spring Boot、Spring和Spring MVC的关系,创建使用MyBatis的Web应用,配置依赖,编写控制器和服务层代码,以及使用Thymeleaf模板引擎展示数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值