文档章节

Idea搭建springboot+mvc+mybatis超详细,记录遇见的坑

我真是小菜鸡
 我真是小菜鸡
发布于 2018/08/13 23:41
字数 1133
阅读 19
收藏 0

new->project->spring Initializr->next->next->选中web下的web及sql下的mybatis->项目名

1,更改maven为自己安装的mavan(file->settings->build,Execution,deployment->build Tools->mavwn,修改成自己的配置)

2,默认是springboot 2.0.4-RELEASE版本,建议换成1.5.9-RELEASE

<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>1.5.9.RELEASE</version>
   <relativePath/> <!-- lookup parent from repository -->
</parent>

3.首先咱们先能让项目跑起来,建一个controller来捕获请求。

@Controller
public class MainController {
    @RequestMapping("index")
    @ResponseBody
    public String index(){
        String string="HELLO WORLD";
        return string;
    }
}

这里注意:

1),文件路径,新建的controller类一定在DomeApplication启动类的平级或里面一级,否则无法注册mapped

2),此时会报错:Cannot determine embedded database driver class for database type NONE

一看就是database,一开始很蒙,还没配置怎么会报错?查资料了解到-----------

这是因为spring boot默认会加载org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration类,DataSourceAutoConfiguration类使用了@Configuration注解向spring注入了dataSource bean。因为工程中没有关于dataSource相关的配置信息,当spring创建dataSource bean因缺少相关的信息就会报错

因为我仅仅只是使用spring boot来写一些很简单的例子来学习它,在Application类上增加@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})

阻止spring boot自动注入dataSource bean

此时再启动就没问题了。

4,再配置mybatis

新建文件夹,dao,data,新建类User

package com.example.demo.data;

import org.springframework.stereotype.Component;

@Component
public class User {
    private String id;
    private String userId;
    private String userName;
    private String nickname;
    private String password;
    private String isAdmin;

    public String getId() {
        return id;
    }

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

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getIsAdmin() {
        return isAdmin;
    }

    public void setIsAdmin(String isAdmin) {
        this.isAdmin = isAdmin;
    }

    @Override
    public String toString() {
        return "{"
                + "id: " + id
                + ", userId: " + userId
                + ", userName: " + userName
                + ", nickname: " + nickname
                + ", password: " + password
                + ", isAdmin: " + isAdmin + "}";
    }
}

2,新建一个controller,查询数据用

public class FinduserController {

    @Autowired
    IUserService userService;

    @RequestMapping(value = "/search", method = RequestMethod.POST)
    @ResponseBody
    public Map spiderLisSearch() {
        Map map = userService.getUserById("1");
        return map;
    }
}

顺利成章的需要创建service,及实现

public interface IUserService {
    Map getUserById(String id);
}
@Service
public class UserServiceImpl  implements IUserService{

    @Override
    public Map<String, Object> getUserById(String id) {
        SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
        try {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            Map<String, Object> map = userMapper.getUserById(id);
            sqlSession.commit();
            return map;
        } finally {
            sqlSession.close();
        }
    }
}

这时发现,需要配置mybatis

public class MyBatisUtil {
    private static SqlSessionFactory sqlSessionFactory = null;
    private MyBatisUtil() {
    }
    static {
        Reader reader = null;
        try {
            reader = Resources.getResourceAsReader("mybatis-config.xml");
        } catch (IOException e) {
            throw new RuntimeException(e.getMessage());
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    }
    public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }
}

再配置mybatis配置文件

mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <properties resource="application.properties"></properties>
    <typeAliases>
        <package name="com.example.demo.data"/>
    </typeAliases>
    <environments default="dataSource">
        <environment id="dataSource">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${dataSource.driverClassName}"/>
                <property name="url" value="${dataSource.url}"/>
                <property name="username" value="${dataSource.username}"/>
                <property name="password" value="${dataSource.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <package name="com.example.demo.dao"/>
    </mappers>
</configuration>

 

还需新建Dao层,之间操作数据库

@Mapper
public interface UserMapper {
    Map<String, Object> getUserById(String id);
}
<?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.example.demo.dao.UserMapper">
    <resultMap type="com.example.demo.data.User" id="usermap">
        <id column="id" property="id" />
        <result column="user_id" property="userId" />
        <result column="user_name" property="userName" />
        <result column="nickname" property="nickname" />
        <result column="password" property="password" />
        <result column="is_admin" property="isAdmin" />
    </resultMap>
    <select id="getUserById" parameterType="String" resultType="map">
        SELECT
        id,
        user_id,
        user_name,
        nickname,
        password,
        is_admin
        FROM
        demo_user
        WHERE
        id = #{_parameter }
    </select>
</mapper>

结构

测试还需配置数据源,在application.properties

dataSource.url=jdbc:oracle:thin:@localhost:1521:orcl
dataSource.username= scott
dataSource.password=123456
dataSource.driverClassName=oracle.jdbc.driver.OracleDriver

这时oracle.jdbc.driver.OracleDriver会报错,因为jdbc的问题,springboot没有提供支持,所以需要手动打入maven包。

<dependency>
   <groupId>com.oracle</groupId>
   <artifactId>ojdbc6</artifactId>
   <version>11.2.0.3</version>
</dependency>

此时启动项目,访问查询数据的controller,发现报错,

Invalid bound statement (not found): com.example.demo.dao.dao.UserMapper.getUserById

原因是找不到UserMapping.xml

解决:在pom文件中的<build>下添加

<!--找不到map.xml-->
<resources>
   <resource>
      <directory>src/main/java</directory>
      <includes>
         <include>**/*.properties</include>
         <include>**/*.xml</include>
      </includes>
      <filtering>false</filtering>
   </resource>
   <resource>
      <directory>src/main/resources</directory>
      <includes>
         <include>**/*.properties</include>
         <include>**/*.xml</include>
         <!--坑!!!-->
         <include>**/*.html</include>
      </includes>
      <filtering>false</filtering>
   </resource>
</resources>

OK

 

配置初始页面

springboot与jsp兼容的不好,所以建议使用thymeleaf,添加依赖

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

新建测试类:

@Controller
public class SampleController {

    @RequestMapping(value = "/")
    public ModelAndView test(ModelAndView mv) {
        mv.setViewName("hello");
        mv.addObject("title","欢迎使用Thymeleaf!");
        return mv;
    }
}

同时需要新建同样的名字的html文件,

因为thymeleaf会默认到templates中找对应的模板,

至此,springboot+mvc+mybatis搭建完成,明天整理整理顺序,OK

如果报错,报,找不到网页文件,就看刚在pom配置的

<resource>
   <directory>src/main/resources</directory>
   <includes>
      <include>**/*.properties</include>
      <include>**/*.xml</include>
      <!--坑!!!-->
      <include>**/*.html</include>
   </includes>
   <filtering>false</filtering>
</resource>

是否配置了html的扫描

© 著作权归作者所有

共有 人打赏支持
上一篇: 面试遇到的难题
下一篇: 浅谈Redis和Hbase
我真是小菜鸡
粉丝 1
博文 18
码字总数 15522
作品 0
吕梁
私信 提问
初始go语言,并搭建windows开发环境

2018.10.12来到新公司 来到新公司后,需要先熟悉现有代码。公司有一部分代码是用go实现的,所以今天把go的开发环境搭建了一下。现在记录一下遇到的坑,及解决办法。 1,第一步是安装go的开发...

我真是小菜鸡
2018/10/13
0
0
Windows 下Spark 快速搭建Spark源码阅读环境

最近开始学习Spark,想搭建一个Spark的源码阅读环境。找了一些资料。如 http://m.blog.csdn.net/blog/zhongwen7710/42401445 和 http://guozhongxin.com/pages/2014/10/15/sparksourcecode....

我是彩笔
2015/11/19
0
1
Demo Show | 蚂蚁金服 mPaaS IDEA 插件实践

前言 本文将结合上周在 JetBrains 开发者大会分享的《mPaaS IDEA 插件实践》,深入展开 mPaaS 在 IDEA 插件开发之路上踩过的坑和沉淀的思考,希望能够带来一些参考性: mPaaS 冷启动过程如何...

josephjin
2018/12/18
0
0
2.2 Selenium 环境搭建

Java 环境搭建 下载JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装JDK 配置Java 环境 校验是否安装完成 控制台输入: java –version 提示版......

米阳MeYoung
2018/04/24
0
0
蚂蚁金服 mPaaS IDEA 插件实践Demo演示

前言 本文深入展开 mPaaS 在 IDEA 插件开发之路上踩过的坑和沉淀的思考,希望能够带来一些参考性: ● mPaaS 冷启动过程如何通过工具选择优化接入成本 ● IDEA Plugin 开发过程中 踩过的坑 ...

技术小能手
2018/11/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Docker的系统资源限制及验证

1 、限制容器的资源 默认情况下, 容器没有资源限制 ,可以使用主机内核调度程序允许的尽可能多的给定资源。 Docker 提供了控制容器可以 使用多少内存或 CPU 的方法 ,设置 docker run 命令的...

微笑向暖wx
4分钟前
1
0
Redis5.0之Stream案例应用解读

非常高兴有机会和大家在这里交流Redis5.0之Stream应用。今天的分享更多的是一个抛砖引玉,欢迎大家提出更多关于Redis的思考。 首先,我们来个假设,这里有个杯子,这个杯子是去年我老婆送的,...

中间件小哥
5分钟前
1
0
阿里开发者们的第20个感悟:好的工程师为人写代码,而不仅是为编译器

1月17日,好的工程师为人写代码,而不仅是为编译器。这是我们送给开发者的第20个感悟。 李响,作为开源项目etcd作者更为开发者所熟知。etcd是2013年由李响,Brandon Philips, Alex Polvi 所发...

阿里云官方博客
6分钟前
1
0
Linux vmstat命令详解

导读 Linux命令千千万,而我们在日常工作中真真切切用到的命令应该不超过50个,在接下来的日子里,我会对我经常使用的命令,以及使用过程中不熟悉的命令进行一个总结,一是自我总结,加深记忆...

问题终结者
6分钟前
1
0
MacOS Docker安装及使用

MacOS Docker 安装 Homebrew 安装 macOS 我们可以使用 Homebrew 来安装 Docker。 Homebrew 的 Cask 已经支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 来进行安装: # 安装命令...

火力全開
8分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部