手把手教你如何玩转SpringBoot整合MyBatis(全注解开发和热部署及其JSP配置详解)

 

     当写了前一篇关于SpringBoot的文章之后,有很多朋友就提问说,关于SpringBoot整合Mybatis,还有SpringBoot热部署,并且还有说关于整合JSP配置的一些问题,然后决定写这一篇文章来帮有疑惑的朋友来解决一下问题。(SpringBoot整合Hibernate的使用,及其SpringBoot的基本知识可以参考之前的一篇章  SpringBoot基础学习  )

github项目源码地址:https://github.com/qq496616246/SpringBootAndMybatis

如果你想看其他的环境搭建,那么请参考我的其余博文。

手把手教你阿里云服务器(Ubuntu系统)如何部署Web开发环境
地址:https://blog.csdn.net/cs_hnu_scw/article/details/79125582
手把手教你如何玩转SSH(Spring+Strus2+Hibernate)
地址:https://blog.csdn.net/cs_hnu_scw/article/details/77888051
手把手教你如何玩转SSH(Spring+SpringMVC+Hibernate)
地址:https://blog.csdn.net/cs_hnu_scw/article/details/78849772
手把手教你如何玩转SSM框架搭建(Maven版本)
地址:https://blog.csdn.net/cs_hnu_scw/article/details/80709822
手把手教你如何玩转SSM框架整合(非Maven版本)
地址:https://blog.csdn.net/cs_hnu_scw/article/details/78157672
手把手教你如何玩转SpringBoot整合Mybatis(mapper.xml方式开发)
地址:https://blog.csdn.net/cs_hnu_scw/article/details/80693248
手把手教你如何玩转SpringBoot整合MyBatis(mybatis全注解开发和热部署及其JSP配置详解)
地址:https://blog.csdn.net/cs_hnu_scw/article/details/78961232

主要讲解内容如下:

(1)SpringBoot整合Mybatis

(2)热部署

(3)Mybatis注解开发的一些常用例子

一:环境

windows7 +IDEA + mysql

二:开始搭建环境

(1)创建一个SpringBoot的项目工程-----------------(这个我就不多说了,如果不知道的就看上面提到的连接里面的文章,里面说得非常非常详细了)

(2)在pom.xml文件中添加JSP和Mybatis的依赖

温馨提示一点:

1:对于SpringBoot本身不提供Mybatis的,但是Mybatis却有提供支持SpringBoot,所以,关于这个导入依赖的时候要注意一点

2:大家可以通过  Maven中心仓库   这个地方去寻找对应的依赖,我觉得挺实用的

添加的内容如下:

<!--添加相应的数据库依赖-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
			<version>1.5.9.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.5</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.1.1</version>
		</dependency>
		<!--配置JSP依赖-->
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>
			<version>8.5.23</version>
		</dependency>

注意:不管你们配的是什么版本,但是一定要保证版本是能够兼容即可。。。。。

(3)编写application.properties配置文件的内容

#配置关于数据库的一些内容
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot?useSSL=false
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=XXXXX
spring.datasource.password=XXXXXXXXXXX


#配置Controller层返回JSP
#前缀 ,如果这里最后添加了一个/,那么就不需要在controller的函数返回的时候加/,否则就需要添加,一般都是在这里添加
#后缀
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

(4)编写实体类

package com.hnu.scw.model;

/**
 * @author Administrator
 * @create 2018-01-03 10:33
 * @desc 对应数据库中的实体类
 **/
public class Person {
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

(5)搭建mapping映射

温馨提示:我习惯采用全注解编程,所以没有使用mapping.xml的文件,如果习惯用xml文件来编写mybatis的话,那么就需要在application.properties文件中指定mapping文件的地方和实体位置,就需要添加如下代码:

如果按照我的习惯,那么直接进行下面内容即可(跳过上面的配置)

package com.hnu.scw.mapper;
import com.hnu.scw.model.Person;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

/**
 * function : 针对Person实体进行的crud操作
 */
@Mapper
public interface PersonMapping {
    /**
     * 添加person数据
     * @param person
     */
    @Insert("insert into person (name) values(#{name})")
    public void addPerson(Person person);

    /**
     * 根据id查询到person数据
     * @param id
     * @return
     */
    @Select("select * from person where id = #{id}")
    public Person getPersonById(Integer id);
}

(6)搭建service层

package com.hnu.scw.service;

import com.hnu.scw.mapper.PersonMapping;
import com.hnu.scw.model.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author scw
 * @create 2018-01-03 10:40
 * @desc 进行对person实体操作的service,这里就不写接口了,但是实际开发中,应该要面向接口编程
 **/
@Service
public class PersonService {
    @Autowired
    public PersonMapping personMapping ;

    /**
     * 添加person数据
     * @param person
     */
    public void addPerson(Person person){
        personMapping.addPerson(person);
    }

    /**
     * 根据id获取person数据
     * @param id
     * @return
     */
    public Person getPersonById(Integer id){
       return personMapping.getPersonById(id);
    }
}

(7)搭建controller层

package com.hnu.scw.controller;

import com.hnu.scw.model.Person;
import com.hnu.scw.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author scw
 * @create 2018-01-03 10:31
 * @desc 测试SpringBoot整合Mybatis的controller层
 **/
@Controller
public class PersonController {

    @Autowired
    public PersonService personService;

    /**
     * 添加person数据
     * @param person
     * @return
     */
    @RequestMapping(value = "person/add")
    public String addPerson(Person person){
        personService.addPerson(person);
        return "success";
    }

    /**
     * 根据ID查询数据
     * @param id
     * @param model
     * @return
     */
    @RequestMapping(value = "person/getperson")
    public String addPerson(Integer id , Model model){
        Person person = personService.getPersonById(id);
        model.addAttribute("person" , person);
        return "ok";
    }

}

(8)搭建JSP的配置---------------重点又来了

第一步:在src/main/下,创建一个webapp文件目录

第二步:创建一个WEB-INF文件目录-----------这也就对应我们之前步骤中application.properties配置的路径内容

第三步:在WEB-INF目录下,创建jsp目录

第四步:创建对应的Jsp即可

所以,对应的目录结构如下所示:----------其中的JSP页面没有什么特别,就是普通的JSP页面而已,所以这里不贴了,我只是演示一下而已

(9)重点中的重点,认真看的一步---------将webapp目录设置为web资源,从而实现右击选择new,可以出现JSP页面的创建

注意:大家可以先不要这样配置,可以先试试,右击选择new,看是否有JSP这个选项哦~~~~~~~~~~~~~~~

这个其实是因为,SpringBoot默认只支持html,所以就对jsp没有这个支持了。。另外,本来默认的静态文件和页面可以放在resource目录下的public下面即可,这是SpringBoot默认支持扫描的路径,一共是支持四个文件目录,关于这个可以参考我写的关于SpringBoot的内容。

第一步:

第二步:

第三步:

第四步:

第五步:

第六步:

双击箭头的位置,然后修改成我们创建的那个webapp的那路径即可。

第七步:

OK,最后的结果就是这样,然后点击右下角的Apply即可,然后再去项目中右击,就会发现出现了new JSP这个选项了。

第八步:

(10)运行main函数,即可。。。。。。。。。。。如果出现了预期的情况,那么就说明配置成功啦~~恭喜你~~~~~~~

好了,贴一张整个项目的工程结构:

注意:在这里面配置的过程可能出现的异常问题:

(1)mysql连接不上,那么就确认你的电脑里面安装了mysql,并且打开了mysql的服务

(2)服务器端口不对,默认的端口是8080,如果需要修改,则可以在application.properites文件中添加server.port=XXXX即可

(3)访问路径是对的,可是返回的JSP却不出现,而且还报了org.apache.tomcat.util.security.Escape异常,那么恭喜你,在你配置的依赖中,出现了jar冲突,这个一般是因为配置的下面这个版本不对,配置8.5.23即可,不能够配置9.0.+的版本。

<dependency>
	<groupId>org.apache.tomcat.embed</groupId>
	<artifactId>tomcat-embed-jasper</artifactId>
</dependency>

(4)提示mapper的bean无法获取

解决方法:是因为在依赖中没有配置如下的依赖

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>1.1.1</version>
</dependency>

三:如何实现SpringBoot的热部署

热部署原理:

配置文件中用了spring-boot-devtools主要是因为这是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动更快。其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。即devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机)

温馨提示:使用了热部署之后,千万不要频繁的进行ctrl+s(保存)操作,因为这样的话,就会自动进行部署重启了,这样会影响性能的哦~!

步骤:

(1)pom.xml添加依赖

<!--配置SpringBoot的热部署-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
	<optional>true</optional>
</dependency>
<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<fork>true</fork><!--注意要修改这里-->
				</configuration>
			</plugin>

(2)在application.properties配置文件中添加缓存禁止配置

#禁用缓存---要配置,否则无法生效
spring.thymeleaf.cache=false
spring.freemarker.cache=false
spring.groovy.template.cache=false
spring.velocity.cache=false

(3)修改IDEA的配置

1:ctrl+shift+A,然后输入make project automatically

2:ctrl+shift+A,输入Registry

然后再勾选

(4)修改浏览器中的缓存禁止---因为我都是用的谷歌浏览器,所以就以该浏览器做代表,其他浏览器类似即可

1:ctrl+shift+J,,,调出开发者功能

2:选择Network

3:勾选禁止缓存

四:Mybatis注解的一些技术使用

(1)插入数据之后需要返回插入数据的对应Id

@Insert("insert into question (description) " +
            "values(#{currentQuestion.description})")
@Options(useGeneratedKeys = true, keyProperty = "currentQuestion.id")
void insertQuestion(@Param("currentQuestion")Question question);

备注:1:配置@Options(useGeneratedKeys=true, keyProperty="对象.属性") 这个的作用是设置是否使用JDBC的getGenereatedKeys()方法获取主键并赋值到keyProperty设置的对象的属性中,说白了就是把自增长的主键值赋值给对象相应的属性 
2.:在插入后,使用对象.主键属性的getXXId()方法 获取主键值

(2)参数是List集合

@Select("<script>" +
            "select * " +
            "from question " +
            "where " +
            "chapter in " +
                "<foreach  collection='chapters' item='item' open='(' separator=',' close=')'>" +
                "#{item}" +
                "</foreach>" +
            "</script>")
    List<Question> queryQuestionByChapter(@Param("chapters") List<String> chapters);

(3)参数是数组

@Select("<script> select * from question " +
            "where " +
            "id in " +
                "<foreach  collection='questionIds' item='item' open='(' separator=',' close=')'>" +
                "#{item}" +
                "</foreach>" +
            "</script>")
    List<Question> queryQuestionDetaileById(@Param("questionIds") String[] questionIds);

 

OK,所有的内容到此就结束了,是不是发现挺简单的呢?但是里面包含的内容却很多并且很重要,关键还是要掌握哦~!欢迎指定~@!!~~~

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值