×

springboot mybatis

SpringBoot快速入门及整合mybatis

我的笔记 我的笔记 发表于2018-02-19 11:15:38 浏览3311 评论0

抢沙发发表评论

如果大家觉得好,请关注我的头条号!

什么是springboot?

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

特点:

1. 创建独立的Spring应用程序

2. 嵌入的Tomcat,无需部署WAR文件

3. 简化Maven配置

4. 自动配置Spring

5. 提供生产就绪型功能,如指标,健康检查和外部配置

6. 绝对没有代码生成和对XML没有要求配置

springboot入门

创建maven工程,添加springboot依赖

<!-- springboot依赖jar -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.8.RELEASE</version>
</dependency>

配置springboot入口类

package com.fyd;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author fyd
* @description springboot的入口类
* 2017-12-27上午9:44:47
*/
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}

常见问题一:

错误: 找不到或无法加载主类 com.aaa.MyApplication

解决方法

<!-- springboot编译插件 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

成功图标

SpringBoot快速入门及整合mybatis

修改启动图标

1.在src/main/resources下新建一个banner.txt文档

2.通过http://patorjk.com/software/taag网站生成需要的字符

使用springboot配置controller

创建cotroller

package com.fyd.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author fyd
* @description 普通控制器
* 2017-12-27上午10:30:29
*/
@Controller
@RequestMapping("/hello")
public class HeolloWorld {
@RequestMapping("/hahaha")
public String firstBoot() {
System.out.println("aaaaaaaaaaaaaaa");
return "aaa";//跳转到aaa.jsp
}
}

添加springboot系统配置文件application.properties

#配置服务端口号
server.port=9090
#配置项目名称
server.CONTEXT_PATH=/qqq
#配置springmvc的前缀和后缀
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp


测试

常见问题:

找不到jsp的错误Whitelabel Error Page

解决方法:

<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>8.5.24</version>
<scope>provided</scope>
</dependency>


SpringBoot快速入门及整合mybatis

springboot注入bean属性

编写属性文件*.properties

stu.stuId=2000
stu.stuName=hemukun
stu.sex=女

编写实体类,并依靠注解注入属性

package com.fyd.entity;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
/**
* @author fyd
* @description 学生实体类
* 2017-12-27上午11:06:36
*/
@Component
@ConfigurationProperties(prefix="stu")
@PropertySource("classpath:stu.properties")
public class Student {
private Integer stuId;
private String stuName;
private String sex;
public Integer getStuId() {
return stuId;
}
public void setStuId(Integer stuId) {
this.stuId = stuId;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}

测试

package com.fyd.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.aaa.entity.Student;
/**
* @author fyd
* @description 普通控制器
* 2017-12-27上午10:30:29
*/
@Controller
@RequestMapping("/hello")
public class HeolloWorld {
@Autowired
private Student student;
@RequestMapping("/hahaha")
public String firstBoot(HttpServletRequest resquest) {
System.out.println(student.getStuName());
System.out.println("aaaaaaaaaaaaaaa");
resquest.setAttribute("stu",student );
return "aaa";
}
}

SpringBoot快速入门及整合mybatis<!-- mybatisjar --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <!-- mysql连接jar --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency> <!-- 德鲁伊数据库连接池依赖的jar --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.29</version> </dependency>

配置数据库连接池

package com.fyd.config;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
@Configuration
public class DruidConfig {
private Logger logger = LoggerFactory.getLogger(DruidConfig.class);
@Value("${spring.datasource.url}")
private String dbUrl;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.initialSize}")
private int initialSize;
@Value("${spring.datasource.minIdle}")
private int minIdle;
@Value("${spring.datasource.maxActive}")
private int maxActive;
@Value("${spring.datasource.maxWait}")
private int maxWait;
@Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
private int timeBetweenEvictionRunsMillis;
@Value("${spring.datasource.minEvictableIdleTimeMillis}")
private int minEvictableIdleTimeMillis;
@Value("${spring.datasource.validationQuery}")
private String validationQuery;
@Value("${spring.datasource.testWhileIdle}")
private boolean testWhileIdle;
@Value("${spring.datasource.testOnBorrow}")
private boolean testOnBorrow;
@Value("${spring.datasource.testOnReturn}")
private boolean testOnReturn;
@Value("${spring.datasource.filters}")
private String filters;
@Value("${spring.datasource.logSlowSql}")
private String logSlowSql;
@Bean
public ServletRegistrationBean druidServlet() {
ServletRegistrationBean reg = new ServletRegistrationBean();
reg.setServlet(new StatViewServlet());
reg.addUrlMappings("/druid/*");
reg.addInitParameter("loginUsername", username);
reg.addInitParameter("loginPassword", password);
reg.addInitParameter("logSlowSql", logSlowSql);
return reg;
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new WebStatFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
filterRegistrationBean.addInitParameter("profileEnable", "true");
return filterRegistrationBean;
}
@Bean
public DataSource druidDataSource() {
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(dbUrl);
datasource.setUsername(username);
datasource.setPassword(password);
datasource.setDriverClassName(driverClassName);
datasource.setInitialSize(initialSize);
datasource.setMinIdle(minIdle);
datasource.setMaxActive(maxActive);
datasource.setMaxWait(maxWait);
datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
datasource.setValidationQuery(validationQuery);
datasource.setTestWhileIdle(testWhileIdle);
datasource.setTestOnBorrow(testOnBorrow);
datasource.setTestOnReturn(testOnReturn);
try {
datasource.setFilters(filters);
} catch (SQLException e) {
logger.error("druid configuration initialization filter", e);
}
return datasource;
}
}

properties属性

# 数据库访问配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/aaa-te?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.datasource.username=root
spring.datasource.password=admin
# 下面为连接池的补充设置,应用到上面所有数据源中
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置获取连接等待超时的时间
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
spring.datasource.logSlowSql=true

mapper接口和mappper映射文件

package com.fyd.mapper;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
/**
* @author fyd
* @description userinfo mapper接口
* 2017-12-27上午11:25:31
*/
@Mapper
public interface UserInfoMapper {
List<Map> findAllUserInfo();
}

service接口和实现类

package com.fyd.service;
import java.util.List;
import java.util.Map;
/**
* @author fyd
* @description 用户业务接口
* 2017-12-27上午11:29:49
*/
public interface UserInfoService {
List<Map> findAllUserInfo();
}
package com.fyd.service.impl;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.aaa.mapper.UserInfoMapper;
import com.aaa.service.UserInfoService;
/**
* @author fyd
* @description 用户业务实现类
* 2017-12-27上午11:30:55
*/
@Service
public class UserInfoServiceImpl implements UserInfoService {
@Autowired
private UserInfoMapper userInfoMapper;
@Override
public List<Map> findAllUserInfo() {
return userInfoMapper.findAllUserInfo();
}
}

测试

package com.fyd.controller;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.aaa.entity.Student;
import com.aaa.service.UserInfoService;
/**
* @author fyd
* @description 普通控制器
* 2017-12-27上午10:30:29
*/
@Controller
@RequestMapping("/hello")
public class HeolloWorld {
@Autowired
private Student student;
@Autowired
private UserInfoService userInfoServiceImpl;
@RequestMapping("/hahaha")
public String firstBoot(HttpServletRequest resquest) {
List<Map> findAllUserInfo = userInfoServiceImpl.findAllUserInfo();
for (Map map : findAllUserInfo) {
System.out.println(map.toString());
}
System.out.println(findAllUserInfo.size());
System.out.println(student.getStuName());
System.out.println("aaaaaaaaaaaaaaa");
resquest.setAttribute("stu",student );
return "aaa";
}
}

常见错误

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.aaa.mapper.UserInfoMapper.findAllUserInfo

at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:225) ~[mybatis-3.4.4.jar:3.4.4]

at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48) ~[mybatis-3.4.4.jar:3.4.4]

at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65) ~[mybatis-3.4.4.jar:3.4.4]

at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58) ~[mybatis-3.4.4.jar:3.4.4]

解决方法,在系统配置文件中加入

#mybatis

mybatis.mapper-locations = classpath:mybatis/mapper/*.xml

版权付亚东笔记博客所有,禁止转载!!付亚东Java笔记博客

我的笔记博客版权我的笔记博客版权