*Spring boot + Mybatis +alibabadruid 详细版-初步经验总结(菜鸟刚弄好使)
1、**
**spring boot** 介绍略直接进入正题
2、
spring boot 项目的建立
2.1
java 1.8+spring tool suite 3.+mysql+mybatis
2.2
网上那种建项目的图我这没看见
我这就是这种,我只是把packaging改成war,next了
网上那种选择 JDBC,MYSQL,WEB的我这也没看见,我选了图里边那三个,具体有没有不一样我也不清楚,一会百度查一查。
这块儿千万别选MyBatis Framwork,我也是上网查才知道。要不会碰到“sqlsessionfactory”什么玩意的错,我百度了半天也不会自己弄,就直接新建了一个没有选MyBatis Framwork的项目。
目前是刚入门,只求能连上数据库好使,别的以后再说。
2.2
点击finish后,等着下依赖包就行了,完事之后项目就够如下。
注意一下:自己建项目包要建在demo目录下,别和他同级别。原因程序指挥扫描xxxapplication同级或下属的子包,大体就这意思,想了解更多的百度。
我以前的项目用到了alibab连接池,这里边我也配置了一下。
修改pom.xml添加依赖包
我没有用系统生成的applicatoin.properties文件,自己也像网上用自建的application.yml
这个也没什么好说的,详情百度一下。
删除applicatoin.properties
右键resources,new->file–>application.yml
右键resources,new->file->application-dev.yml
2.2.1 application.yml代码:
spring:
profiles:
active: dev`
2.2.2 application-dev.yml代码
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/demodb?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
mybatis:
config-location: classpath:mybatis-config.xml
mapper-locations: classpath:com/example/demo/*/mapper/**.xml
type-aliases-package: com.example.demo.*.dao
我粘一个完整的目录,让后所有代码贴一下
2.2.3 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>
<settings>
<setting name="jdbcTypeForNull" value="NULL" />
<!-- 全局映射器启用缓存 -->
<setting name="cacheEnabled" value="true" />
<!-- 查询时,关闭关联对象即时加载以提高性能 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指 定),不会加载关联表的所有字段,以提高性能 -->
<setting name="aggressiveLazyLoading" value="false" />
<!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->
<setting name="multipleResultSetsEnabled" value="true" />
<!-- 允许使用列标签代替列名 -->
<setting name="useColumnLabel" value="true" />
<!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->
<setting name="useGeneratedKeys" value="false" />
<!-- 给予被嵌套的resultMap以字段-属性的映射支持 -->
<setting name="autoMappingBehavior" value="FULL" />
<!-- 对于批量更新操作缓存SQL以提高性能 -->
<!-- <setting name="defaultExecutorType" value="BATCH" /> -->
<!-- 数据库超过25000秒仍未响应则超时 -->
<setting name="defaultStatementTimeout" value="25000" />
</settings>
</configuration>
2.2.4 demoController
package com.example.demo.dev.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.example.demo.dev.service.demoService;;
@RequestMapping(value = "/demo")
@RestController
public class demoController {
private static final Logger logger = LoggerFactory.getLogger(demoController.class);
@Autowired
private demoService demoService;
@RequestMapping(value = "/test", produces = { "application/json;charset=UTF-8" }, method = RequestMethod.GET)
private String demotest() {
System.out.println("/demo/test");
return demoService.demotest();
}
}
2.2.5 demoDao
package com.example.demo.dev.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Repository
@Mapper
public interface demoDao {
List<String> demotest();
}
2.2.6 demoMapper
<?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必须是dao层接口的绝对路径!!! -->
<mapper namespace="com.example.demo.dev.dao.demoDao">
<select id="demotest" resultType="java.lang.String">
SELECT a.content
from
wx_rich_text a
where 1=1
</select>
</mapper>
2.2.7 demoService
package com.example.demo.dev.service;
public interface demoService {
String demotest();
}
2.2.8 demoServiceImpl
package com.example.demo.dev.service.serviceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.demo.dev.service.demoService;
import com.example.demo.dev.dao.demoDao;;
@Service
public class demoServiceImpl implements demoService {
@Autowired
private demoDao demoDao;
private static final Logger logger = LoggerFactory.getLogger(demoServiceImpl.class);
@Override
public String demotest() {
return demoDao.demotest().toString();
}
}
2.2.9 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.21.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo-2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>demo-2</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.29</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
到此,所有代码都粘贴完毕。
说一下我遇到的坑,好一顿百度才整好使
3、问题
3.1 No active profile set, falling back to default profiles: default
我的原因是application.yml中有多余的空格,上一行和下一行的缩进用空格,别用tab。
比如:
spring:
profiles:
active: dev
这里边,spring是顶格,profiles之前有一个空格,active之前有两个空格。这三行的意思就是spring.profiles.active = dev,告诉服务器加载application-dev,这样便于控制加载不同的库,可以建立多个application-xxx,用active:xxx来进行控制。
3.2 sqlsessionfactory 有关问题
这个建立项目收不选Mybatis framwork就可以了,选的话网上也有对应办法,不过我没整明白
3.3 连接数据库那个Dao.java或者自建的mapper.java类上要加
@Repository
@Mapper
总结:我其实想说,新东西不一定好,了解了解就得了,都说这个spring boot多么多么简洁,配置简单,但是一到自己上手还是不行。我天真的以为只要开头自己选好什么mysql,mybatis(主坑!!!),web就完事了呢。自己根本不用再配置POM了呢。但是在实际动手过程中,还得把自己需要的依赖包从父POM中粘过来。也可能是我操作有问题。
这个项目建起来,我不认为这个新的框架比我之前用的spring mvc mybatis mysql简单到哪去。因为之前那个我熟悉,可以直接就移植过去,那个才是真不用配置,就是改改数据库链接,扫描的包名。没了。看似麻烦,实则有序而无错。
最后,建议大家如果有熟悉的框架,又可以选择的话,还是别尝试没接触过的新东西,有时间又好奇的除外。