在学校时自己花了好几天的时间搭建了一个springMVC项目,繁多的配置文件转眼就往记了,工作后接触的公司项目配置文件更是复杂到望而却步,自称java工程师,却连建个项目都不行,一度怀疑自己的能力。
当然办法总是比困难多,从eclipse到sts,后来有了Intellij IDEA,后来又有了SpringBoot,还有很多便利的开发工具包。springboot以及自带的spring data jpa其实可以解决大部分开发问题,但面对复杂业务逻辑写大量的原生sql,想想还是找老朋友mybatis吧。
1.项目基本搭建,如图新建项目,默认下一步
2.给项目取一个响亮的名字
3.选择依赖,这儿其实就是在pom中添加maven依赖,选择需要的,也可以不添加在后面直接加到pom中。
因为是简单测试项目,如图:我选择了红框中的4个,其中core的Lombok纯属个人爱好。下一步,Finish等待maven构建完成
4.启项目。前面3步大功告成,现在我们来启下项目感受下科技带来的成果
卧槽,怎么新建的项目就启不来,这尼玛玩呢,说好的一键到位的呢。
现在把这个错误复制出去百度,看吧大家都有这个问题,那就不是问题啦
5.配置application.yml
前面的问题是因为我们引入了mybatis-spring-boot-starter而没给他配置数据源。将resource下的application.properties重命名为application.yml,添加如下配置。
server:
port: 8080
mybatis:
mapperLocations: classpath:mapper/*.xml
#typeAliasesPackage: com.example.demo.entity
spring:
datasource:
url: jdbc:mysql://localhost:3306/world
#?serverTimezone=GMT&useSSL=false
username: root
password: 1234
driver-class-name: com.mysql.cj.jdbc.Driver
dbcp2: # 进行数据库连接池的配置
min-idle: 5 # 数据库连接池的最小维持连接数
initial-size: 5 # 初始化提供的连接数
max-total: 5 # 最大的连接数
max-wait-millis: 200 # 等待连接获取的最大超时时间
type: com.alibaba.druid.pool.DruidDataSource # 阿里druid 数据源
注意:server,mybatis,spring要顶格写,yml文件有只能提示的字下面有阴影的试着调下前后位置,
typeAliasesPackage是配置包位置的,一般不需要。
serverTimezone=GMT&useSSL=false当用的是mysql8数据库时可能会报时区错误问题,则需要在url结尾加上这段,或者更改mysql的时区,此处不展开
因为用到了阿里的druid数据源,需要在pom中添加依赖。完整的pom文件如下。当然也可以不加阿里的数据源,不影响这次的测试结果
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<?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>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo1</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-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
6.测试application.yml的数据源是否配置成功
打开test编写如下测试代码并运行
@RunWith(SpringRunner.class)
@SpringBootTest
public class Demo1ApplicationTests {
@Resource
private DataSource dataSource;
@Test
public void contextLoads() {
System.out.println(this.dataSource);
}
}
如果测试通过则表示配置成功。不通过回去仔细看下是否有空格,或者退格是否符合yml规范
7.配置项目结构包
前面我们已经配置了数据源,还配置了mybatis的配置文件路径,是不是发现项目里没有mapper这个文件夹,这就开始建了,目录结构如下图
8.完善配置
mybatis最重要的就是把DAO和配置文件映射关联起来,mapper里放mybatis的配置文件,我们在DemoApplication中添加dao的扫描@MapperScan("com.example.demo1.dao"),如下图。
mybatis会根据com.example.demo1.dao匹配mapper里mybatis配置文件的namespace,如不一致则会报错。
9.添加测试代码,这里推荐一款mybatis插件:better-mybatis-generator,使用非常简单
下载地址:https://github.com/kmaster/better-mybatis-generator
Entity
@Data
public class City {
private int id;
private String name;
private String countryCode;
private String district;
private int population;
}
Service
public interface CityService {
List<City> list();
}
Dao
public interface CityDao {
List<City> list();
}
ServiceImpl
@Service
public class CityServiceImpl implements CityService {
@Autowired
private CityDao cityDao;
@Override
public List<City> list() {
return cityDao.list();
}
}
Controller
@RestController
@EnableAutoConfiguration
@RequestMapping("/world")
public class IndexController {
@Autowired
private CityService cityService;
@RequestMapping("/index")
public List<City> index(){
return cityService.list();
}
}
Mapper
<?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.demo1.dao.CityDao">
<resultMap id="BaseResultMap" type="com.example.demo1.entity.City" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="countryCode" property="countryCode" jdbcType="VARCHAR" />
<result column="district" property="district" jdbcType="VARCHAR" />
<result column="population" property="population" jdbcType="INTEGER" />
</resultMap>
<sql id="base_sql">
id,name,countrycode,district,population
</sql>
<select id="list" resultMap="BaseResultMap">
SELECT <include refid="base_sql"/>
from city
</select>
</mapper>
10.万事具备,见证奇迹的时刻到了
结语:前后10步,看起来挺吓人,其实也就复制粘贴的事情,熟练工5分钟应该是够了,等项目跑起来了再想为什么吧。
人无完人,教程也是,难免有错漏,欢迎提问丢鸡蛋、一起学习共同进步嘛,认识新朋友也是很开心的。
转载请注明出处。