目录html
-配置数据源java
-SpringBoot自动配置数据源
mysql
-java类手动配置数据源
web
-添加MyBatis相关spring
-注解版
sql
-XML版
数据库
1.开发工具:apache
2.Spring Boot 搭建 Mybatis api
点击查看详细的搭建步骤:session
3.个人目录
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.scheduling.annotation.EnableScheduling; //@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})//禁用系统自动启用自动配置的额数据源 - 由于咱们要本身定义数据源 因此要禁用 @SpringBootApplication @EnableScheduling //@ComponentScan public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); System.out.println("启动成功"); } }
application-dev.properties配置以下
# 数据库访问配置 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://xxxx.com/wallet_supper?useUnicode=true&characterEncoding=utf8&autoReconnect=true spring.datasource.username=root spring.datasource.password=xxxxx # 下面为链接池的补充设置,应用到上面全部数据源中 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
SpringBoot的核心思惟预约优于配置的思惟
自动配置内部已经约定了spring.datasource.xxx 只要咱们配置赋值就能够了
1.启动类
package com.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})//禁用系统自动启用自动配置的额数据源 - 由于咱们要本身定义数据源 因此要禁用 @EnableScheduling public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); System.out.println("启动成功"); } }
PS:细心的朋友应该看到这么一句话
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})//禁用系统自动启用自动配置的额数据源 - 由于咱们要本身定义数据源 因此要禁用
2.Spring配置 Druid管理数据源
server.port=8080 # 数据库访问配置 spring.datasource.db.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.db.driver-class-name=com.mysql.jdbc.Driver spring.datasource.db.url=jdbc:mysql://localhost:3306/wallet_supper?useUnicode=true&characterEncoding=utf8&autoReconnect=true spring.datasource.db.username=linpeng spring.datasource.db.password=a123456 # 下面为链接池的补充设置,应用到上面全部数据源中 spring.datasource.db.initialSize=5 spring.datasource.db.minIdle=5 spring.datasource.db.maxActive=20 # 配置获取链接等待超时的时间 spring.datasource.db.maxWait=60000 # 配置间隔多久才进行一次检测,检测须要关闭的空闲链接,单位是毫秒 spring.datasource.db.timeBetweenEvictionRunsMillis=60000 # 配置一个链接在池中最小生存的时间,单位是毫秒 spring.datasource.db.minEvictableIdleTimeMillis=300000 spring.datasource.db.validationQuery=SELECT 1 FROM DUAL spring.datasource.db.testWhileIdle=true spring.datasource.db.testOnBorrow=false spring.datasource.db.testOnReturn=false # 配置监控统计拦截的filters,去掉后监控界面sql没法统计,'wall'用于防火墙 spring.datasource.db.filters=stat,wall,log4j spring.datasource.db.logSlowSql=true
咱们本身定义 spring.datasource.db.XXX
spring.datasource.db.type=com.alibaba.druid.pool.DruidDataSource
指定数据源 DruidDataSource 以下
有了上面的配置并不能完美启动注入,咱们须要写一个数据源的配置类来启动
关键做用
@Configuration
@ConfigurationProperties(prefix="spring.datasource.db") //获取properties文件中的前缀属性字段
package com.demo.dataSource; import com.alibaba.druid.pool.DruidDataSource; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; @Configuration @ConfigurationProperties(prefix="spring.datasource.db") //获取properties文件中的前缀属性字段 public class ApplicationConfig { private String url; private String username; private String password; @Bean public DataSource getDataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(url); dataSource.setUsername(username);// 用户名 dataSource.setPassword(password);// 密码 return dataSource; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
关键代码Druid数据源数据配置
@Bean 会把这个 return的dataSource数据源对象告诉Spring 去读取使用
@Bean public DataSource getDataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(url); dataSource.setUsername(username);// 用户名 dataSource.setPassword(password);// 密码 return dataSource; }
也可使用其余的数据源
DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setUrl(url); dataSource.setUsername(username);// 用户名 dataSource.setPassword(password);// 密码 return dataSource;
DataSource是一个数据源抽象类 详细能够查看
3.mybatis 数据源相关准备 注解版 @Select
Model+Mapper Model就简单的实体类就不贴代码了 Mapper以下
package com.demo.mybatis.mapper; import com.demo.mybatis.model.RepayBbsdkNotify; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Component; import org.springframework.stereotype.Repository; import org.apache.ibatis.annotations.*; import java.util.List; @Mapper public interface RepayBbsdkNotifyMapper { @Select({"SELECT * from repay_bbsdk_notify limit 0,5"}) List<RepayBbsdkNotify> selectAll(); }
@Mapper 注解 别写错了 (容易写成Mapping)告诉Spring来管理这个bean 若是该类没有加@Mapper 注解的话 须要在启动类Application类上面加载扫描 @MapperScan("com.jiuzhm.memo.mybatis") 不然会报错扫描不到com.jiuzhm.memo.mybatis.mapper.AcctInfoMapper
3.mybatis xml版本
Controller测试
package com.demo.api.Controller; import com.demo.mybatis.mapper.RepayBbsdkNotifyMapper; import com.demo.mybatis.model.RepayBbsdkNotify; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.Mapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; @RestController public class LoginController { @Resource RepayBbsdkNotifyMapper repayBbsdkNotifyMapper; @RequestMapping("/hello") public String hello(){ return "hello world"; } @RequestMapping("/test") public List<RepayBbsdkNotify> test(){ List data = repayBbsdkNotifyMapper.selectAll(); for (int i = 0;i< data.size(); i++){ RepayBbsdkNotify model = (RepayBbsdkNotify) data.get(i); System.out.println("===="+model.getCardNo()); } return data; } }
结果
注意:
1.若是启动类DemoApplacation不在根目录的话 会扫描不到Mapper或者Controller
========================20180517更新================
前提:若是使用mybatis的时候只用mybatis的注解方式写sql的话没什么问题,可是若是你有用到 sql放xml里面 与dao分开的话就会遇到.....
1.Idea mybatis的xml不在resource里面的时候不会被扫描 致使错误 idea的坑!!!
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
解决方案一
由于xml被认定为是一种资源文件 idea默认是不会去java包里面扫描资源文件的 要放在resource文件下面他们才会扫描的到 Eclipse就不会存在这个问题 在idea项目的里面有个target 你翻开目录 也是看不到xml文件的
步骤一:resource下面建立一个mybatis的文件夹专门放mybatis生成的xml文件 彷佛官方也建议把mybatis的xml放资源下(我的不是很喜欢这样)
步骤二:pom.xml里面添加<resources>...
<resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> </resources>
步骤三:properties配置扫描路径(路路劲不要写错了 这是一个大坑)
# MyBatis 配置 若是mapper.xml在resource的mybatis文件下面就这么配置 #mybatis.mapper-locations=classpath:mybatis/*.xml #mybatis.type-aliases-package=com.jiuzhm.mybatis.entity
解决方案二
不少人不喜欢把xml放到resource下面去喜欢放在java上面 跟实体类 dao等放在一个文件目录下面 因此就要修改配置扫描文件
步骤一:pom.xml里面添加<resources>... 如上
步骤二:配置文件修改扫描路径
mybatis.mapper-locations=classpath*:com/jiuzhm/memo/mybatis/**/*.xml mybatis.type-aliases-package=com.jiuzhm.memo.mybatis.entity mybatis.config-location=classpath:mybatis-config.xml
路径必定要对!不对的话就会各类问题很难解决!看一下个人文件目录 若是不能解决多半是配置路径有问题 必定要仔细检查
解决方案三
若是以上配置还有问题 就本身配置数据源 javaConfig方式配置 (上面我有讲到)手动配置SqlSeccionFactoryBean 设置扫描xml路径
简单了解读了mybatis的中文文档才知道mybatis最主要的配置就是1.配置数据源 2.配置xml扫描路径 核心是SqlSeccionFactory这个对象 mybatis经过SqlSeccionFactory 获得SqlSeccion,SqlSeccion经过命名空间查询sql的id映射出数据(底层如何实现我也不是很懂)
Spring和mybatis整合以后 衍生出了一个SqlSeccionFactoryBean 取代SqlSeccionFactory的工做 javaConfig以下
import com.alibaba.druid.pool.DruidDataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import org.springframework.jdbc.datasource.DriverManagerDataSource; import javax.sql.DataSource; @Configuration @ConfigurationProperties(prefix="spring.datasource.db") //获取properties文件中的前缀属性字段 public class ApplicationConfig { private String url; private String username; private String password; @Bean public DataSource dataSourceBean() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(url); dataSource.setUsername(username);// 用户名 dataSource.setPassword(password);// 密码 return dataSource; } @Bean public SqlSessionFactoryBean sqlSessionFactoryBean() { SqlSessionFactoryBean sqlFactory = new SqlSessionFactoryBean(); SqlSessionFactory try { sqlFactory.setDataSource(dataSourceBean()); //设置mybatis的主配置文件 记住是主配置文件啊 ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource mybatisXml = resolver.getResource("classpath:mybatis-config.xml"); sqlFactory.setConfigLocation(mybatisXml); //设置mapper.xml文件的路径 Resource [] resource = resolver.getResources("classpath*:com/jiuzhm/memo/mybatis/**/*.xml");//{resourceMapXML}; sqlFactory.setMapperLocations(resource); //扫描实体类所在包 sqlFactory.setTypeAliasesPackage("com.jiuzhm.memo.mybatis.entity"); } catch (Exception e) { //e.printStackTrace(); } return sqlFactory; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }但愿个人吭能够帮助到有须要的人