目录
一、关于三种环境
二、引入MySQL
1、准备数据
2.编写mapper和bean
3.准备service
4.单元测试
5.Controller
6.注解法配置MapperScan
7.项目本地测试
8.当前pom.xml
三、配置三种properties
1.设置项目对象模型pom.xml
2.配置maven打包命令
3.检查
四、总结
1.打包命令
2.当前架构
3.参考文章
4.上一篇
在日常开发中我们的代码一般都是需要在三种环境下运行的:
本地环境(dev):即开发环境
测试环境(qa):模拟生产环境用来测试
生产环境(pro):面向客户的程序运行环境
因为三种环境里的MySQL参数不同,我们每次在准备将本地代码打包上传的时候都需要先修改配置文件,有时候粗心大意忘记修改账户和密码,还有可能导致短时间的服务宕机,我们今天来试着配置一下,让maven打包的时候自动选择配置文件来打包。
在开始之前先在resources文件夹下(本身存在application.properties文件)另外创建application-dev.properties、application-qa.properties、application-pro.properties文件,在本文中,暂时将application.properties文件设置为
spring.profiles.active=dev
本应分别在三个不同的数据库中设置对应的数据,我们这里只测试本地数据库,所以只在本地创建了user表
这里使用mybatis.generator工具直接生成,关于generator的使用请自行查找
generatorConfiguration.xml
User.java
package cn.yzstu.baldwinblog.bean;
public class User {
private Integer userId;
private String userNick;
private String userPassword;
private String userName;
private String userEmail;
private String userDetail;
private String userPhone;
private String userOhter;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserNick() {
return userNick;
}
public void setUserNick(String userNick) {
this.userNick = userNick == null ? null : userNick.trim();
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword == null ? null : userPassword.trim();
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName == null ? null : userName.trim();
}
public String getUserEmail() {
return userEmail;
}
public void setUserEmail(String userEmail) {
this.userEmail = userEmail == null ? null : userEmail.trim();
}
public String getUserDetail() {
return userDetail;
}
public void setUserDetail(String userDetail) {
this.userDetail = userDetail == null ? null : userDetail.trim();
}
public String getUserPhone() {
return userPhone;
}
public void setUserPhone(String userPhone) {
this.userPhone = userPhone == null ? null : userPhone.trim();
}
public String getUserOhter() {
return userOhter;
}
public void setUserOhter(String userOhter) {
this.userOhter = userOhter == null ? null : userOhter.trim();
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userNick='" + userNick + '\'' +
", userPassword='" + userPassword + '\'' +
", userName='" + userName + '\'' +
", userEmail='" + userEmail + '\'' +
", userDetail='" + userDetail + '\'' +
", userPhone='" + userPhone + '\'' +
", userOhter='" + userOhter + '\'' +
'}';
}
UserMapper.java
package cn.yzstu.baldwinblog.mapper;
import cn.yzstu.baldwinblog.bean.User;
import org.apache.ibatis.annotations.Mapper;
public interface UserMapper {
int deleteById(Integer userId);
int insert(User record);
User selectById(Integer userId);
int updateById(User record);
}
UserMapper.xml
user_id, user_nick, user_password, user_name, user_email, user_detail, user_phone,
user_ohter
delete from all_user
where user_id = #{userId,jdbcType=INTEGER}
insert into all_user
user_id,
user_nick,
user_password,
user_name,
user_email,
user_detail,
user_phone,
user_ohter,
#{userId,jdbcType=INTEGER},
#{userNick,jdbcType=CHAR},
#{userPassword,jdbcType=VARCHAR},
#{userName,jdbcType=VARCHAR},
#{userEmail,jdbcType=VARCHAR},
#{userDetail,jdbcType=VARCHAR},
#{userPhone,jdbcType=VARCHAR},
#{userOhter,jdbcType=VARCHAR},
update all_user
user_nick = #{userNick,jdbcType=CHAR},
user_password = #{userPassword,jdbcType=VARCHAR},
user_name = #{userName,jdbcType=VARCHAR},
user_email = #{userEmail,jdbcType=VARCHAR},
user_detail = #{userDetail,jdbcType=VARCHAR},
user_phone = #{userPhone,jdbcType=VARCHAR},
user_ohter = #{userOhter,jdbcType=VARCHAR},
where user_id = #{userId,jdbcType=INTEGER}
三个文件生成之后一般都要按照自己的需求来改一下,以上是经过我修改的文件
当然还需要配置一下扫描路径,代码写到这里的时候,我考虑了一下,将mapper.xml文件放在了转移到了src/main/resources/mybatis/mapper/下,并在src/main/resources/mybatis/下创建mybatis-config.xml文件留作备用,暂时为空
在application-dev.xml文件中配置数据库相关信息和映射文件相关信息
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/baldwin_blog?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=wy******
mybatis.config-locations=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
接口:UserService.java
package cn.yzstu.baldwinblog.service;
import cn.yzstu.baldwinblog.bean.User;
/**
* @描述
* @Author Baldwin
* @E-Mail [email protected] || baldwin@******.com
* @Time 2019/12/11 20:52
* @Other
*/
public interface UserService {
User getbyId(int id);
}
实现类:UserServiceImpl.java
package cn.yzstu.baldwinblog.service.impl;
import cn.yzstu.baldwinblog.bean.User;
import cn.yzstu.baldwinblog.mapper.UserMapper;
import cn.yzstu.baldwinblog.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* \* Created with IntelliJ IDEA.
* \* User: Baldwin
* \* E_Mail: baldwin@******.com || [email protected]
* \* Date: 2019/12/11
* \* Time: 20:53
* \* To change this template use File | Settings | File Templates.
* \* Description:
* \
*/
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User getbyId(int id) {
return userMapper.selectById(Integer.valueOf(id));
}
}
将光标放在我们的类名上,然后点击Alt+Enter可以选择自动创建Test模块
选择我们熟悉的测试工具,配置自己需要的内容,然后点击OK
生成的测试类可以在test文件夹下找到,现在我们要给他加一些关于SB的测试参数,最终结果如下
package cn.yzstu.baldwinblog.mapper;
import cn.yzstu.baldwinblog.bean.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import static org.junit.Assert.*;
/**
* @描述
* @Author Baldwin
* @E-Mail [email protected] || baldwin@******.com
* @Time 2019/12/12 12:10
* @Other
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
public void selectById() {
User user = userMapper.selectById(1);
System.out.println("Baldwin是一个"+user.getUserDetail());
}
}
点击运行,我们得到了一个预期之中,并且符合客观事实的结果(红框)
新建UserController.java
package cn.yzstu.baldwinblog.controller;
import cn.yzstu.baldwinblog.bean.User;
import cn.yzstu.baldwinblog.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* \* Created with IntelliJ IDEA.
* \* User: Baldwin
* \* E_Mail: baldwin@******.com || [email protected]
* \* Date: 2019/12/11
* \* Time: 20:55
* \* To change this template use File | Settings | File Templates.
* \* Description:
* \
*/
@RestController
@RequestMapping(value = "/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/login.action")
String userLogin(){
String str;
User user = userService.getbyId(1);
str = user.toString();
return str;
}
}
在启动文件中增加注解@MapperScan("****"),让程序能够找到mapper.java文件的位置,也可以在每个mapper类的上方添加@Mapper注解,但是这样太麻烦了,我还是喜欢第一种方法。
package cn.yzstu.baldwinblog;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("cn.yzstu.baldwinblog.mapper")
public class BaldwinblogApplication {
public static void main(String[] args) {
SpringApplication.run(BaldwinblogApplication.class, args);
}
}
@MapperScan与@Mapper注解需要导入包mybatis-spring-boot-starter,而且需要指定版本,(2019-12-12:当前默认版本无法使用该注解)太高的版本可能导致注解失效
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.2.0
运行SB项目,并在浏览器中访问http://localhost:8080/user/login.action
到目前为止,我们已经成功在SB项目中引入MySQL。
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.2.2.RELEASE
com.yzstu
baldwinblog
1.0.0
jar
baldwinblog
This project is a new blog with SB and so on
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.2.0
mysql
mysql-connector-java
org.springframework.boot
spring-boot-devtools
true
org.xmlunit
xmlunit-core
junit
junit
test
org.springframework.boot
spring-boot-maven-plugin
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.2
src/main/resources/generatorConfig.xml
true
true
Generate MyBatis Artifacts
generate
org.mybatis.generator
mybatis-generator-core
1.3.2
我们在上面已经创建了三个properties,根据我们在application.properties中的配置
我们刚才测试运行的应该是application-dev.properties文件,这个我们从日志中可以得到验证
不放心的话,我们还可以做一下测试,将我们的application.xml修改为
spring.profiles.active=qa
但是现在我们的application-qa.xml其实在本地是无法运行的
我们来运行一下试试
通过日志我们发现,确实运行了qa的配置文件,但是我们的qa文件应该是无法运行的,我们现在来访问 http://localhost:8080/user/login.action
果然出现了这个错误,这是因为我们的application-qa.xml文件中没有配置映射文件路径
那么我们现在来说一下如何让maven在打包的时候自动切换application.xml自动切换配置文件
添加profiles到pom.xml中,profiles节点是和build同级的。
dev
dev
true
qa
qa
prod
prod
activation
表示的是可以用这样的命令来触发profile,true
表示dev是默认的profile, 这样本地直接ide启动项目的时候就是连接的dev环境。
添加filters节点。
filters在build下一级
src/main/resources/application-${env}.properties
修改application.xml使配置生效
spring.profiles.active=@env@
@env@ 就相当于一个变量,与我们先前的配置对应即可
clean package -P qa -D maven.test.skip=true (clean并打包,跳过测试类)
运行maven打包指令并检查文件
等待打包结束,检查target文件夹下的编译文件包
可以看到,与我们设置的是一样的,成功
开发环境打包命令:clean package -P dec -D maven.test.skip=true
测试环境打包命令:clean package -P qa -D maven.test.skip=true
生产环境打包命令:clean package -P pro -D maven.test.skip=true
纯洁的微笑:springboot(六)-如何优雅的使用mybatis
请叫我头头哥:SpringBoot入门教程(三)通过properties实现多个数据库环境自动切换配置
从零开始,SpringBoot+Redis+MySQL搭建个人博客(一)-----搭建SpringBoot环境
从零开始,SpringBoot+Redis+MySQL搭建个人博客(三)-----引入Redis