IDEA搭建Springboot+mybatis简单demo

首先

Inteliji IDEA是一个较好的开发java项目的IDE,安装使用都很方便,博主之前都是用eclipse的,在公司实习的时候发现启动一个大型的web项目时,eclipse既耗时也容易报错,很是麻烦,所以在熟悉了IDEA的操作后,打算在博客中记录下之前学习的知识,方便后面查看。

开始进入主题:

1、用IDEA开始搭建一个Springboot项目

2、点击next,填写项目包的一些信息

3、选中打钩的地方

4、一个简单的sprinboot项目搭建好了,项目架构如下图所示,删除掉三个文件夹

5、由上图可知,java是存放业务代码,现在com.xz.blog包下除了启动类,其余都是空的,需要我们来添加controller、mapper、model、service等包;resources是存放项目资源,templates放置模板(页面)。推荐使用thymeleaf,也可以集成Jsp,static放置静态资源。js,images等。

6、pom.xml文件,采用maven方式管理项目jar包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.xz</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>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <!-- spring版本号 -->
        <spring.version>5.0.8.RELEASE</spring.version>
    </properties>

    <dependencies>
        <!-- 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <!-- JSTL (JSP standard Tag Library) JSP 标准标签库 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
            <!--<scope>provided</scope> 注意,这个scope需要被注释掉-->
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>

        <!--Spring Boot的JPA依赖包-->
        <dependency>
            <groupId>org.springframework.boot</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>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!--在导入druid数据源时,也就是外部数据源,我们必须导入相关依赖,因此我尝试将springboot默认数据源的相关依赖也导入-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>2.2.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.ibatis/ibatis-core -->
        <dependency>
            <groupId>org.apache.ibatis</groupId>
            <artifactId>ibatis-core</artifactId>
            <version>3.0</version>
        </dependency>
        <!--整合mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!-- 数据库驱动 -
         https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.0.8.RELEASE</version>
        </dependency>

        <!-- aop -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.6.11</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</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>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.0.4.RELEASE</version>
        </dependency>

    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</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>

7、controller、mapper、model、service下业务代码撰写

Person.java实体类

package com.xz.blog.model;

public class Person {

    private Integer id;
    private String name;
    private Integer age;

    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;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

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

UserService.java,由于是演示demo,所以就没有写接口类以及impl实现类。

package com.xz.blog.service;

import com.xz.blog.mapper.UserMapper;
import com.xz.blog.mapper.UserMapper;
import com.xz.blog.model.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;


@Service
public class UserService {

    @Autowired
    public UserMapper userMapper;

   // 获取单个用户信息
    public Person selectUser(int id) {
        return userMapper.selectUser(id);
    }

    //获取所有的用户信息
    public ArrayList<Person> selectAllUser() {

        return userMapper.selectAllUser();

    }

}

UserMapper.java类,对数据库操作的封装

package com.xz.blog.mapper;

import com.xz.blog.model.Person;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;

@Repository
public interface UserMapper {
    @Select("SELECT * FROM person WHERE id = #{id}")
    Person selectUser(int id);//返回一个person对象

    @Select("select * from person order by id")
    ArrayList<Person> selectAllUser();//返回一个person对象
}

UserController.java实体类 

package com.xz.blog.controller;

import com.xz.blog.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

//@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){
        model.addAttribute("name", userService.selectUser(id).toString());
        return "greets";

    }
    @RequestMapping("/showUser/all")
    public String selectAllUser(){
        return userService.selectAllUser().toString();

    }
    @RequestMapping("/name")
    public String name() {
        System.out.println("============================================");
        return "hello";
    }

    /**
    @RequestMapping("/greet")
    public String greeting(@RequestParam(value = "name", required = false, defaultValue = "World") String name,
                           Model model) {
        model.addAttribute("name", name);
        return "greets";
    }
    **/

}

BlogApplication.java启动类  

package com.xz.blog;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@MapperScan("com.xz.blog.mapper")  //包扫描
@EnableWebMvc
@SpringBootApplication
public class BlogApplication {

    public static void main(String[] args) {
        SpringApplication.run(BlogApplication.class, args);
    }
}

8、项目的配置文件application.properties,springboot牺牲项目的自由度来减少配置的复杂度,换句话说就是大部分的配置采用约定俗称,无需我们进行更改,配置文件只有application.properties一个,当然spingboot也支持自定义的配置文件,但是当同时又多个配置文件时,application.properties文件中的配置优先级更高。

server.port=9999

#设置spring-boot 编码格式
spring.banner.charset=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8




#视图层控制 用mvc方式访问templates下的HTML  -----start-------
#让springboot支持jsp
#spring.mvc.view.prefix=classpath:/templates/
#spring.mvc.view.suffix=.jsp
#spring.mvc.static-path-pattern=/static/**


spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
##开发时关闭缓存,不然没法看到实时页面
spring.thymeleaf.cache=false
#thymeleaf这样配置就可以直接访问static下的HTML(和mvc访问方式二选一)
spring.thymeleaf.prefix = classpath:/templates/
spring.thymeleaf.suffix = .html
#-------------end-----------------------------------



#mysql配置
spring.datasource.url=jdbc:mysql://localhost:3306/ssmstu?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=bjtungirc
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
mybatis.typeAliasesPackage=com.tqh.demo.model

#数据库连接池配置druid(springboot暂不支持该数据库连接池)
#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#spring.datasource.filters=stat
#spring.datasource.maxActive= 20
#spring.datasource.initialSize= 1
#spring.datasource.maxWait= 60000
#spring.datasource.minIdle =1
#spring.datasource.timeBetweenEvictionRunsMillis= 60000
#spring.datasource.minEvictableIdleTimeMillis=300000
#spring.datasource.validationQuery= select 'x'
#spring.datasource.testWhileIdle= true
#spring.datasource.testOnBorrow=false
#spring.datasource.testOnReturn= false
#spring.datasource.poolPreparedStatements=true
#spring.datasource.maxOpenPreparedStatements= 20

# REDIS
# Redis数据库索引(默认为0)
spring.redis.database=0 
# Redis服务器地址 (默认为127.0.0.1)
spring.redis.host=132.232.28.164
# Redis服务器连接端口 (默认为6379)
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
#spring.redis.password=
## 连接池最大连接数(使用负值表示没有限制)
#spring.redis.pool.max-active=8
## 连接池最大阻塞等待时间(使用负值表示没有限制)
#spring.redis.pool.max-wait=-1
## 连接池中的最大空闲连接
#spring.redis.pool.max-idle=8
## 连接池中的最小空闲连接
#spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=2000ms


#log
logging.file=log.log
logging.level.com=info
logging.level.org=info
logging.level.com.my=debug
debug=true
logging.level.com.my.web = debug


#如果采用自定义的mybatis.xml文件,就需要配置下面的文件的内容,主要是定位xml文件的位置,xml文件中有具体的sql操作
#不加的话,就直接是在mapper类中@Select(sql),直接写sql操作。
# mybatis配置 mybatis.config-location=classpath:mybatis-config.xml // 配置文件位置   mybatis.typeAliasesPackage// 实体类包
#mybatis.typeAliasesPackage=com.tqh.demo/model
#mybatis.mapper-locations=classpath:mappers/*.xml


# AOP 切面
# 添加@EnableAspectJAutoProxy。
spring.aop.auto= true
# 是否要创建基于子类(CGLIB)的代理(true),而不是基于标准的基于Java接口的代理(false)。
spring.aop.proxy-target-class= false


# 应用程序上下文初始化器
# 应用指标。
#spring.application.index=
# 应用程序名称。
spring.application.name=


# 国际化(消息源自动配置)
#
spring.messages.basename= messages
# 以逗号分隔的基础名称列表,每个都在ResourceBundle约定之后。
# 加载的资源束文件缓存到期,以秒为单位。 设置为-1时,软件包将永久缓存。
#spring.messages.cache-seconds= -1

# 设置是否返回到系统区域设置,如果没有找到特定语言环境的文件。
spring.messages.fallback-to-system-locale= true

#smtp邮件
# Email (MailProperties)  邮件属性
# 默认MimeMessage编码。
spring.mail.default-encoding= UTF-8
# SMTP服务器主机。 例如`smtp.example.com`
spring.mail.host=
# 会话JNDI名称。 设置时,优先于其他邮件设置。
spring.mail.jndi-name=
# 登录SMTP服务器的密码。
spring.mail.password=
# SMTP服务器端口。
spring.mail.port=
# 其他JavaMail会话属性。
spring.mail.properties.*=
# SMTP服务器使用的协议。
spring.mail.protocol= smtp
# 测试邮件服务器在启动时可用。
spring.mail.test-connection= false
# 登录SMTP服务器的用户。
spring.mail.username=

9、页面配置

templates存放的是页面 都是默认的路径,其中返回的页面类型缺省都是.html后缀 。所以此处写页面不需要在application.properties中进行配置或者覆盖设置

需要注意以下几点:

1、sprinbboot默认采用的是thymeleaf来解析页面视图,不支持jsp(可自行配置),因此在application.properties中,需要配置如下:

#视图层控制 用mvc方式访问templates下的HTML  -----start-------
#让springboot支持jsp
#spring.mvc.view.prefix=classpath:/templates/
#spring.mvc.view.suffix=.jsp
#spring.mvc.static-path-pattern=/static/**


spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
##开发时关闭缓存,不然没法看到实时页面
spring.thymeleaf.cache=false
#thymeleaf这样配置就可以直接访问static下的HTML(和mvc访问方式二选一)
spring.thymeleaf.prefix = classpath:/templates/
spring.thymeleaf.suffix = .html
#-------------end-----------------------------------

2、UserController.java中需要添加@Controller,而不是@RestController,testController返回的不是页面,Controller返回的是页面 testController=Controller + ResponseBody。

3、启动类中BlogApplication,需要添加@MapperScan("com.xz.springboot.mapper") //包扫描,否则注解无效。

10、测试页面hello.html 和greets.html

hello.html  在templates文件夹下放置hello.html

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>Full Layout - jQuery EasyUI Demo</title>
</head>
<body>
<input type="button" value="点我" />
<input type="text" style="height:100px;width:90%" id="input"/>
</body>
</html>

greets.html  在templates文件夹下放置greets.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Getting Started: Serving Web Content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'Hello, ' + ${name} + '!'" />
</body>
</html>

11、springboot集成mybatis的方式有如下两种(本项目采用的是方式一)

方式一:application.properties配置(或自定义配置文件)+UserMapper.java中注解方式

application.properties配置:

UserMapper.java中注解方式:

方式二:application.properties配置(或自定义配置文件)+mapper-mybatis.xml

mapper-mybatis.xml内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xz.springboot.mapper.UserMapper">
    <select id="selectAllUser"  resultType="Person">
        select * from person order by id
    </select>
    <select id="selectUser"  parameterType="int" resultType="Person">
        select * from person where id=#{id}
    </select>
</mapper>

12、数据库表设计--person.sql表

13、springboot+mybatis的整体项目架构如下:

14、运行项目

点击按钮,运行项目

浏览器输入localhost:9999/name,输出结果

浏览器输入http://localhost:9999/showUser/1,输出结果

15、至此一个简单的springboot+mybatis的项目已经搭建完毕!!

如有问题,欢迎讨论!

具体代码见:https://github.com/xia123zheng/study

猜你喜欢

转载自blog.csdn.net/qq_35571554/article/details/82184122