我是靠谱客的博主 轻松纸鹤,最近开发中收集的这篇文章主要介绍Spring Cloud微服务实战---1.3.使用Mysql数据库,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在本节中,我们将在前一节微服务的基础上,将数据库从内存数据库H2,转换为我们在项目中经常使用的Mysql,同时我们将采用普通的增删改操作采用JPA,复杂多表查询直接使用JDBC的方式。
我们首先来设置Mysql数据库,我们首先建立数据库和用户,如下所示:

create database MseDb default character set utf8 collate utf8_general_ci;
grant all privileges on MseDb.* to 'mse'@'localhost' identified by 'mse2018';
grant all privileges on MseDb.* to 'mse'@'%' identified by 'mse2018';

在这里我们创建两个表,一个是产品类别表,另一个是产品表。我们先来看产品类别表,如下所示:

create table t_product_category(
product_category_id int primary key auto_increment,
product_category_name varchar(200)
);
insert into t_product_category(product_category_name) values('类别1');

产品表如下所示:

create table t_product(
product_id bigint primary key auto_increment,
product_category_id int,
product_name varchar(200),
image_url varchar(200),
price double,
quantity int,
index fk_p_pc1(product_category_id),
foreign key (product_category_id )  
references t_product_category(product_category_id)
);

我们需要在项目中引入Mysql驱动程序,编辑项目根目录下的pom.xml文件,在依赖中添加如下代码:

......
		<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
......

另外,我们还需要配置Mysql的字符集,修改Mysql的配置文件my.ini,添加:

character-set-server = utf8

在Windows平台下,其他项如果是gbk也不用更改,仅改这一项即可。
因为我们的类名和变量名都是采用驼峰命名法,而数据库中无论表名还是字段名,均是下划线开头,因此我们需要二者之间进行转换,如下所示:

public class StringUtils {
	/**
	 * 转换为下划线
	 * 
	 * @param camelCaseName
	 * @return
	 */
	public static String underscoreName(String camelCaseName) {
		StringBuilder result = new StringBuilder();
		if (camelCaseName != null && camelCaseName.length() > 0) {
			result.append(camelCaseName.substring(0, 1).toLowerCase());
			for (int i = 1; i < camelCaseName.length(); i++) {
				char ch = camelCaseName.charAt(i);
				if (Character.isUpperCase(ch)) {
					result.append("_");
					result.append(Character.toLowerCase(ch));
				} else {
					result.append(ch);
				}
			}
		}
		return result.toString();
	}
 
	/**
	 * 转换为驼峰
	 * 
	 * @param underscoreName
	 * @return
	 */
	public static String camelCaseName(String underscoreName) {
		StringBuilder result = new StringBuilder();
		if (underscoreName != null && underscoreName.length() > 0) {
			boolean flag = false;
			for (int i = 0; i < underscoreName.length(); i++) {
				char ch = underscoreName.charAt(i);
				if ("_".charAt(0) == ch) {
					flag = true;
				} else {
					if (flag) {
						result.append(Character.toUpperCase(ch));
						flag = false;
					} else {
						result.append(ch);
					}
				}
			}
		}
		return result.toString();
	}
}

同时我们在数据库中,希望用例如t_前缀来命名数据库表,因此我们需要定义一个数据库物理名称命名策略类,如下所示:

import com.wkyai.mse.utils.StringUtils;

public class MseJpaNamingStrategy extends PhysicalNamingStrategyStandardImpl {
	public final static String DB_PREFIX = "t_";

	@Override
	public Identifier toPhysicalCatalogName(Identifier name, JdbcEnvironment jdbcEnvironment) {
		// TODO Auto-generated method stub
		return super.toPhysicalCatalogName(name, jdbcEnvironment);
	}

	@Override
	public Identifier toPhysicalSchemaName(Identifier name, JdbcEnvironment jdbcEnvironment) {
		// TODO Auto-generated method stub
		return super.toPhysicalSchemaName(name, jdbcEnvironment);
	}

	@Override
	public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment jdbcEnvironment) {
		if (name != null) {
			return Identifier.toIdentifier(DB_PREFIX + name.toString().toUpperCase());
		}
		return null;
	}

	@Override
	public Identifier toPhysicalSequenceName(Identifier name, JdbcEnvironment jdbcEnvironment) {
		// TODO Auto-generated method stub
		return super.toPhysicalSequenceName(name, jdbcEnvironment);
	}

	@Override
	public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment jdbcEnvironment) {
		if (name.toString().equals("DTYPE")) {
			return super.toPhysicalColumnName(name, jdbcEnvironment);
		}
		if (name != null) {
			return Identifier.toIdentifier(StringUtils.underscoreName(name.toString()));
		}
		return null;
	}
}

在上面的代码中,toPhysicalTableName方法是将类名改为下划线命名后,再在其前加上数据库表名前缀。toPhysicalColumnName则是将属性名改为下划线命名方式,同时如果是DTYPE,则不作任何处理。
我们还需要在application.properties文件中配置命名策略,因此Mysql的配置如下所示:

spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/MseDb?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&characterEncoding=utf-8
spring.datasource.username=mse
spring.datasource.password=mse2018
spring.jpa.hibernate.naming.physical-strategy=com.wkyai.mse.common.MseJpaNamingStrategy

经过上述配置之后,我们的Spring Boot服务就可以使用Mysql数据库了。

最后

以上就是轻松纸鹤为你收集整理的Spring Cloud微服务实战---1.3.使用Mysql数据库的全部内容,希望文章能够帮你解决Spring Cloud微服务实战---1.3.使用Mysql数据库所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部