springboot解决utf8mb4类型连接

在使用springboot默认连接池的情况下,默认使用的是tomcat-jdbc-pool,在处理utf8mb4类型数据的时候,需要大致两步

1.设置数据库、表、字段的编码类型为utf8mb4

2.在创建数据库连接之后,要执行一条sql语句“SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci”,这样的数据库连接才可以操作utf8mb4类型的数据的存取。

在配置数据库连接池的配置上,根据使用的连接池的不同,配置参数也不相同,下面给出springboot使用默认的tomcat连接池的时候,支持utf8mb4的配置。

spring:

  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://*.*.*.*:3306/dbname?useUnicode=true&characterEncoding=utf-8
    username: username
    password: password
    tomcat:
        initSQL: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci
CREATE TABLE advert ( id int(20) NOT NULL AUTO_INCREMENT COMMENT '主键', name varchar(100) COLLATE utf8mb4_bin NOT NULL COMMENT '广告名称', position_id int(20) NOT NULL COMMENT '广告位置ID', media_id int(20) NOT NULL COMMENT '广告图片ID', start_date datetime NOT NULL COMMENT '开始日期', end_date datetime NOT NULL COMMENT '结束日期', link varchar(500) COLLATE utf8mb4_bin NOT NULL COMMENT '广告链接', status int(1) unsigned zerofill NOT NULL COMMENT '状态,0:未启用,1:已启用,2:已结束', create_time datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', update_time datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (id) USING BTREE, KEY FK_ad_position (position_id), KEY FK_ad_image (media_id), CONSTRAINT FK_ad_image FOREIGN KEY (media_id) REFERENCES media_file (id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT FK_ad_position FOREIGN KEY (position_id) REFERENCES ad_position (id) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='广告表'; CREATE TABLE media_file ( id int(20) NOT NULL AUTO_INCREMENT COMMENT '主键', name varchar(30) COLLATE utf8mb4_bin NOT NULL COMMENT '媒体文件名称', type tinyint(1) NOT NULL COMMENT '媒体文件类型:0-图片,1-视频', url varchar(500) COLLATE utf8mb4_bin NOT NULL COMMENT '媒体文件URL地址', create_time datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', update_time datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='广告媒体文件表'; CREATE TABLE ad_position ( id int(20) NOT NULL COMMENT '主键', name varchar(50) COLLATE utf8mb4_bin NOT NULL COMMENT '位置名称', description varchar(200) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '位置描述', width int(4) NOT NULL COMMENT '广告位置宽度', height int(4) NOT NULL COMMENT '广告位置高度', create_time datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', update_time datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='广告位置表'; 这三张表在进行对广告添加和修改操作时,前端传值和存储数据,用springboot项目如何实现
05-26
首先需要在Spring Boot项目中设置数据库连接,可以使用Spring Boot自带的JDBC或者MyBatis框架。然后根据需求编写对应的Controller、Service、Dao层代码。以下是一个简单的示例: 1. Controller层代码: ```java @RestController @RequestMapping("/advert") public class AdvertController { @Autowired private AdvertService advertService; @PostMapping("/add") public ResponseResult addAdvert(@RequestBody AdvertDto advertDto) { advertService.addAdvert(advertDto); return ResponseResult.success(); } @PostMapping("/update") public ResponseResult updateAdvert(@RequestBody AdvertDto advertDto) { advertService.updateAdvert(advertDto); return ResponseResult.success(); } // 其他接口 } ``` 2. Service层代码: ```java @Service public class AdvertServiceImpl implements AdvertService { @Autowired private AdvertDao advertDao; @Override public void addAdvert(AdvertDto advertDto) { Advert advert = convertToAdvert(advertDto); advertDao.addAdvert(advert); } @Override public void updateAdvert(AdvertDto advertDto) { Advert advert = convertToAdvert(advertDto); advertDao.updateAdvert(advert); } // 其他方法 private Advert convertToAdvert(AdvertDto advertDto) { // 将AdvertDto转换为Advert对象 } } ``` 3. Dao层代码: ```java @Repository public class AdvertDaoImpl implements AdvertDao { @Autowired private JdbcTemplate jdbcTemplate; @Override public void addAdvert(Advert advert) { String sql = "INSERT INTO advert(name, position_id, media_id, start_date, end_date, link, status) VALUES(?,?,?,?,?,?,?)"; jdbcTemplate.update(sql, advert.getName(), advert.getPositionId(), advert.getMediaId(), advert.getStartDate(), advert.getEndDate(), advert.getLink(), advert.getStatus()); } @Override public void updateAdvert(Advert advert) { String sql = "UPDATE advert SET name=?, position_id=?, media_id=?, start_date=?, end_date=?, link=?, status=? WHERE id=?"; jdbcTemplate.update(sql, advert.getName(), advert.getPositionId(), advert.getMediaId(), advert.getStartDate(), advert.getEndDate(), advert.getLink(), advert.getStatus(), advert.getId()); } // 其他方法 } ``` 其中,AdvertDto是一个数据传输对象,用于接收前端传来的数据。Advert是一个实体类,对应数据库表中的一条记录。以上示例仅供参考,具体实现需要根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值