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

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

66bf8cf4177af875b13fbfdb03289eab8cc.jpg

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

此时再启动就没问题了。

c876a3e2362ec2302b2854d6cedbf42d056.jpg

4,再配置mybatis

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

cb7bbddfac397ca0cd0fba41703c62c3254.jpg

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>

结构

aec525ef2faf8065b736ab38bdc6ec6990b.jpg

测试还需配置数据源,在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

cbf07ccfb1e7db204c55f0406311ae08782.jpg

 

配置初始页面

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文件,73103e1ad645ca8b547b93f1ceeed6be63d.jpg

因为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的扫描

转载于:https://my.oschina.net/u/3796880/blog/1927340

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值