概述
在本节中,我们将在前一节微服务的基础上,将数据库从内存数据库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数据库所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复