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