当前位置: 首页 > news >正文

黄浦西安网站建设WordPress自定义类排序

黄浦西安网站建设,WordPress自定义类排序,seo快速排名软件口碑,安康市网站开发记录#xff1a;382场景#xff1a;在Spring Boot 2.6.3中集成MyBatis 3.5.9操作数据库。实现MyBatis的查、增、改、删操作数据库示例。MyBatis官网#xff1a;http://www.mybatis.org/MyBatis源码#xff1a;https://github.com/mybatis/1.初始化准备1.1创建Maven工程使用…记录382场景在Spring Boot 2.6.3中集成MyBatis 3.5.9操作数据库。实现MyBatis的查、增、改、删操作数据库示例。MyBatis官网http://www.mybatis.org/MyBatis源码https://github.com/mybatis/1.初始化准备1.1创建Maven工程使用IntelliJ IDEA创建Maven工程。(1)微服务名称名称hub-example-mybatis(2)微服务groupId和artifactIdgroupId: com.hubartifactId: hub-example-mybatis(3)微服务核心模块版本spring-boot 2.6.3 spring-framework 5.3.15 mybatis-spring-boot-starter2.2.2 mybatis-3.5.9 mybatis-spring-2.0.7 HikariCP-4.0.31.2准备数据库本例集成MyBatis需操作数据库。创建数据库脚本。USE mysql; CREATE DATABASE hub_exampledb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER hub_example% IDENTIFIED BY h12345678; GRANT ALL ON hub_exampledb.* TO hub_example% IDENTIFIED BY h12345678; FLUSH PRIVILEGES;2.修改pom.xml修改pom.xml引入项目依赖Jar、管理Jar包等。2.1修改pom.xml文件集成MyBatis引入核心依赖包。内容dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion2.2.2/version /dependency解析以mybatis-spring-boot-starter方式引入依赖版本2.2.2对应mybatis-3.5.9和mybatis-spring-2.0.7。2.2解析pom.xml文件标签详情请参考13.1解析pom.xml文件标签。3.创建application.yml文件在application.yml中添加各类配置。3.1集成MyBatis的配置(1)基础配置内容mybatis:mapper-locations: classpath*:mapper/*.xmlconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl解析mapper-locations属性指定MyBatis映射的SQL文件目录。注意属性log-impl在Java类中是logImpl一般是驼峰命名的大写字母转换小写且在字母前加上短横线。(2)属性类MyBatis配置属性主要从以下两个类找到。类org.mybatis.spring.boot.autoconfigure.MybatisProperties类org.apache.ibatis.session.Configuration3.2数据源配置内容spring:datasource:url: jdbc:mysql://127.0.0.1:3306/hub_exampledbusername: hub_examplepassword: h12345678driver-class-name: com.mysql.cj.jdbc.Driver解析配置数据源需求的必备四个属性。3.3其它基础配置内容server:servlet:context-path: /hub-exampleport: 18080 spring:jackson:time-zone: GMT8解析指定服务器端口和路径前缀。指定时区为东八区。Jar位置spring-boot-autoconfigure-2.6.3.jar。类位置org.springframework.boot.autoconfigure.web.ServerProperties。4.创建启动类包名com.hub.example。启动类HubExampleMybatisApplication。4.1启动类(1)内容SpringBootApplication ComponentScan(basePackages {com.hub.example.*}) MapperScan(basePackages com.hub.example.**.mapper) public class MybatisExampleApplication {public static void main(String[] args) {SpringApplication.run(MybatisExampleApplication.class, args);} }(2)解析SpringBootApplicationSpringBoot标记启动类的注解。ComponentScan扫描指定的包将组件加载到IOC容器中。MapperScan是MyBatis的注解扫描指定目录下提供给MyBatis注入的接口。4.2创建包com.hub.example.domain微服务使用到的DTO、PO等实体类。com.hub.example.mapperMyBatis接口。com.hub.example.service服务实现类。com.hub.example.controllerController类发布Restful接口。com.hub.example.utils支撑工具类。5.编写Java接口(提供给MyBatis使用)在MyBatis的ORM(Object Relational Mapping)对象映射关系机制中一个Java接口映射到一个MyBatis的SQL文件一个接口方法映射到一条MyBatis的SQL语句。5.1创建Java接口接口全路径com.hub.example.mapper.CityMapper内容Repository public interface CityMapper {CityPO queryCityByCityId(String cityId);ListCityPO queryCityList(CityPO cityPO);Integer addCity(CityPO cityPO);Integer updateCity(CityPO cityPO);Integer deleteCityById(String cityId); }5.2Java接口使用Java实体对象实体对象全路径com.hub.example.domain.CityPO内容 Data public class CityPO implements Serializable {private Long cityId;private String cityName;private Double landArea;private Long population;private Double gross;private String cityDescribe;private String dataYear;private Date updateTime; }6.编写MyBatis的SQL一个MyBatis的SQL文件映射到一个Java接口。一个SQL映射到Java接口的一个方法。6.1创建MyBatis的SQL文件(1)文件路径xml文件全路径../src/main/resources/mapper/CityMapper.xml解析文件路径需被application.yml文件的mybatis的mapperLocations属性扫描到。(2)文件标准格式?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.hub.example.mapper.CityMapper ..具体SQL.. /mapper(3)文件映射关系绑定文件映射关系绑定是指Java接口CityMapper和MyBatis的SQL文件CityMapper.xml的关系绑定。文件映射关系绑定方式在MyBatis的SQL文件CityMapper.xml的mapper/mapper标签的namespace属性namespacecom.hub.example.mapper.CityMapper指定为Java接口全路径。文件映射关系绑定生效在Mybatis运行时会扫描Java接口CityMapper和CityMapper.xml映射文件建立关系使用MyBatis的反射机制生成可运行实例。6.2查询SQL(返回一条记录)(1)查询语句select idqueryCityByCityId parameterTypeString resultTypecom.hub.example.domain.CityPOselectCITY_ID AS cityId,CITY_NAME AS cityName,LAND_AREA AS landArea,POPULATION AS population,GROSS AS gross,CITY_DESCRIBE AS cityDescribe,DATA_YEAR AS dataYear,UPDATE_TIME AS updateTimefrom t_citywhere CITY_ID #{cityId} /select(2)接口方法CityPO queryCityByCityId(String cityId);(3)解析select/select标签写查询语句。idqueryCityByCityId标签唯一标识id的值和接口方法名称queryCityByCityId相同建立一一对应映射关系。parameterTypeString指定参数类型。resultTypecom.hub.example.domain.CityPO指定返回值类型。MyBatis会把查询结果封装为CityPO对象。#{cityId}#{}传入变量的方式。SQL中的cityId和接口方法入参数cityId是一致的。封装返回值t_city表字段CITY_ID的别名cityId和CityPO的属性cityId是一致MyBatis自动化封装。6.3查询SQL(返回多条记录)(1)查询语句select idqueryCityList parameterTypeString resultTypecom.hub.example.domain.CityPOselect CITY_ID AS cityId,CITY_NAME AS cityName,LAND_AREA AS landArea,POPULATION AS population,GROSS AS gross,CITY_DESCRIBE AS cityDescribe,DATA_YEAR AS dataYear,UPDATE_TIME AS updateTimefrom t_citywhereif testcityName !null and cityName!and CITY_NAME #{cityName}/if/where /select(2)接口方法ListCityPO queryCityList(CityPO cityPO);(3)解析select/select标签写查询语句。idqueryCityList标签唯一标识id的值和接口方法名称queryCityList相同建立一一对应映射关系。parameterTypeString指定参数类型。resultTypecom.hub.example.domain.CityPO指定返回值类型。MyBatis会把查询结果封装为ListCityPO。where/where标签MyBatis提供的where条件标签。在标签内使if标签可以对入参提供基本条件判断等。if/if标签条件判断标签。6.4插入SQL(1)插入语句insert idaddCityinsert into T_CITY (CITY_ID,CITY_NAME,LAND_AREA,POPULATION,GROSS,CITY_DESCRIBE,DATA_YEAR,UPDATE_TIME)values (#{cityId},#{cityName},#{landArea},#{population},#{gross},#{cityDescribe},#{dataYear},#{updateTime}) /insert(2)接口方法Integer addCity(CityPO cityPO);(3)解析insert/insert 标签写插入语句。idaddCityid的值和接口方法名称addCity相同建立一一对应映射关系。6.5更新SQL(1)更新语句update idupdateCityupdateT_CITYset LAND_AREA #{landArea},POPULATION #{population},GROSS #{gross},CITY_DESCRIBE #{cityDescribe},DATA_YEAR #{dataYear},UPDATE_TIME #{updateTime}where CITY_ID #{cityId} /update(2)接口方法Integer updateCity(CityPO cityPO);(3)解析update/update标签写更新语句。idupdateCityid的值和接口方法名称updateCity相同建立一一对应映射关系。6.6删除SQL(1)删除语句delete iddeleteCityByIddeletefrom T_CITYwhere CITY_ID #{cityId} /delete(2)接口方法Integer updateCity(CityPO cityPO);(3)解析delete/delete标签写更新语句。iddeleteCityByIdid的值和接口方法名称deleteCityById相同建立一一对应映射关系。7.编写Service层代码在Service层注入CityMapper接口以调用接口方式来调用MyBatis机制操作数据库。7.1Service接口public interface CityService {CityDTO queryCityByCityId(String cityId);ListCityDTO queryCityList(CityDTO cityDTO);Integer addCity(CityDTO cityDTO);Integer updateCity(CityDTO cityDTO);Integer deleteCityByCityId(String cityId); }7.2Service接口实现类 Service public class CityServiceImpl implements CityService {Autowiredprivate CityMapper cityMapper;Overridepublic CityDTO queryCityByCityId(String cityId) {CityPO cityPO cityMapper.queryCityByCityId(cityId);return ObjUtils.convertObjectType(cityPO, CityDTO.class);}Overridepublic ListCityDTO queryCityList(CityDTO cityDTO) {CityPO para ObjUtils.convertObjectType(cityDTO, CityPO.class);ListCityPO resultList cityMapper.queryCityList(para);ListCityDTO result2 Lists.transform(resultList, (entity) - {return ObjUtils.convertObjectType(entity, CityDTO.class);});return result2;}Overridepublic Integer addCity(CityDTO cityDTO) {CityPO para ObjUtils.convertObjectType(cityDTO, CityPO.class);return cityMapper.addCity(para);}Overridepublic Integer updateCity(CityDTO cityDTO) {CityPO para ObjUtils.convertObjectType(cityDTO, CityPO.class);return cityMapper.updateCity(para);}Overridepublic Integer deleteCityByCityId(String cityId) {return cityMapper.deleteCityByCityId(cityId);} }8.编写Controller层代码在Controller层注入Service接口以调用接口方式来调用Service实现类。8.1Controller层RestController RequestMapping(/hub/example/city) public class CityController {Autowiredprivate CityService cityService;PostMapping(/queryCityByCityId)public ResultObjCityDTO queryCityByCityId(String cityId) {CityDTO cityDTO cityService.queryCityByCityId(cityId);return ResultObj.data(200, cityDTO, 执行成功);}PostMapping(/queryCityList)public ResultObjListCityDTO queryCityByList(RequestBody CityDTO cityDTO) {ListCityDTO list cityService.queryCityList(cityDTO);return ResultObj.data(200, list, 执行成功);}PostMapping(/addCity)public ResultObjInteger addCity(RequestBody CityDTO cityDTO) {int result cityService.addCity(cityDTO);return ResultObj.data(200, result, 执行成功);}PostMapping(/updateCity)public ResultObjInteger updateCity(RequestBody CityDTO cityDTO) {int result cityService.updateCity(cityDTO);return ResultObj.data(200, result, 执行成功);}PostMapping(/deleteCityByCityId)public ResultObjInteger deleteCityByCityId(String cityId) {int result cityService.deleteCityByCityId(cityId);return ResultObj.data(200, result, 执行成功);} }9.支撑工具和对象9.1实体对象(1)类CityDTOCityDTO类封装从前端传入的参数。Data public class CityDTO implements Serializable {private Long cityId;private String cityName;private Double landArea;private Long population;private Double gross;private String cityDescribe;private String dataYear;JsonFormat(pattern yyyy-MM-dd HH:mm:ss)private Date updateTime; }(2)类ResultObjResultObj类封装返回前端的结果。Data public class ResultObjT implements Serializable {private int code;private boolean success;private String msg;private T data;private ResultObj(int code, T data, String msg) {this.code code;this.data data;this.msg msg;}public static T ResultObjT data(int code, T data, String msg) {return new ResultObj(code, data, msg);} }9.2工具类(1)类ObjUtilsObjUtils类把一个对象属性值拷贝到另一个对象属性上。核心类org.springframework.cglib.beans.BeanCopierpublic class ObjUtils {public static T T convertObjectType(Object obj, ClassT classz) {if (obj null || classz null) {return null;} else {try {T result classz.newInstance();BeanCopier beanCopier BeanCopier.create(obj.getClass(), classz, false);beanCopier.copy(obj, result, (Converter) null);return result;} catch (Exception e) {e.printStackTrace();return null;}}} }10.使用Postman工具测试使用Postman工具测试。10.1queryCityByCityId接口请求路径http://127.0.0.1:18080/hub-example/hub/example/city/queryCityByCityId请求方式POST入参格式form-data入参cityId210.2queryCityList接口请求路径http://127.0.0.1:18080/hub-example/hub/example/city/queryCityList请求方式POST入参格式JSON参数{cityName:杭州 }10.3addCity接口请求路径http://127.0.0.1:18080/hub-example/hub/example/city/addCity请求方式POST入参格式JSON参数{cityId: 5,cityName: 深圳,landArea: 1997.47,population: 1768,gross: 3.24,cityDescribe: 深圳是一个一线城市.,dataYear: 2022,updateTime: 2023-03-10 19:39:21 }10.4updateCity接口请求路径http://127.0.0.1:18080/hub-example/hub/example/city/updateCity请求方式POST入参格式JSON入参{cityId: 5,cityName: 深圳,landArea: 1997.47,population: 1768,gross: 3.24,cityDescribe: 深圳是超级城市.,dataYear: 2022,updateTime: 2023-03-11 19:39:21 }10.5deleteCityById接口请求路径http://127.0.0.1:18080/hub-example/hub/example/city/deleteCityByCityId请求方式POST入参格式form-data入参cityId511.建表语句(1)建表语句CREATE TABLE t_city (CITY_ID BIGINT(16) NOT NULL COMMENT 唯一标识,CITY_NAME VARCHAR(64) COLLATE utf8_bin NOT NULL COMMENT 城市名,LAND_AREA DOUBLE DEFAULT NULL COMMENT 城市面积,POPULATION BIGINT(16) DEFAULT NULL COMMENT 城市人口,GROSS DOUBLE DEFAULT NULL COMMENT 生产总值,CITY_DESCRIBE VARCHAR(512) COLLATE utf8_bin DEFAULT NULL COMMENT 城市描述,DATA_YEAR VARCHAR(16) COLLATE utf8_bin DEFAULT NULL COMMENT 数据年份,UPDATE_TIME DATETIME DEFAULT NULL COMMENT 更新时间 ) ENGINEINNODB DEFAULT CHARSETutf8 COLLATEutf8_bin COMMENT城市信息表;(2)插入语句insert into t_city (CITY_ID,CITY_NAME,LAND_AREA,POPULATION,GROSS,CITY_DESCRIBE,DATA_YEAR,UPDATE_TIME)values (1,杭州,16850,1237,1.81,杭州是一个好城市,2021,2023-03-10 05:39:16), (2,杭州,16850,1237,1.88,杭州是一个好城市,2022,2023-03-10 05:39:17), (3,苏州,8657.32,1285,2.32,苏州是一个工业城市,2021,2023-03-10 05:39:18), (4,苏州,8657.32,1285,2.4,苏州是一个工业城市,2022,2023-03-10 05:39:20); 12.报错错误信息Caused by: java.lang.IllegalArgumentException: Property sqlSessionFactory or sqlSessionTemplate are required本例原因spring-boot-2.6.3和HikariCP-5.0.1版本不匹配。spring-boot-2.6.3默认数据源版本是HikariCP-4.0.3。起初集成时自定义引入了HikariCP-5.0.1导致启动报错。解决方式使用HikariCP-4.0.3版本。13.附录13.1解析pom.xml文件标签在../hub-example-mybatis/pom.xml文件操作。(1)配置parent/parent标签内容parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.6.3/version /parent功能指定顶级项目的位置。使用spring-boot作为顶级工程依赖。引用spring-boot下各模块时无需加版本号。(2)配置description/description标签内容description集成mybatis框架应用/description功能描述工程。(3)配置packaging/packaging标签内容packagingjar/packaging功能指定打包方式jar或者war。单模块工程不要使用pom方式打包可能会加载不到../src/main/resources下的配置文件。(4)配置properties/properties标签比如propertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingspring.boot.maven.plugin.version2.6.3/spring.boot.maven.plugin.versionspring.boot.version2.6.3/spring.boot.versionmybatis-spring-boot-starter.version2.2.2/mybatis-spring-boot-starter.versionmysql-connector-java.version8.0.30/mysql-connector-java.versionlombok.version1.18.24/lombok.versionguava.version30.1-jre/guava.version /properties解析定义的属性值可以作用在整个pom文件。作用集中管理Jar包版本等。(5)配置dependencyManagement/dependencyManagement标签内容dependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion${spring.boot.version}/versiontypepom/typescopeimport/scope/dependency/dependencies /dependencyManagement功能使用dependencyManagement后会继承dependency列出的项目的默认依赖关系信息。在此处指定版本后子模块或者dependency标签再引入项目的具体依赖时不需要加版本号。(6)配置dependencies/dependencies标签功能描述与项目关联的所有依赖项。引入具体的dependency/dependency标签依赖。(7)配置dependency/dependency标签比如dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion${lombok.version}/versionscopeprovided/scope /dependency功能描述具体依赖。scope/scope标签依赖的范围属性有compile、runtime、test、system、provided。其中system属性是以JAR包的形式提供依赖maven不会在repository查找它。(8)配置build/build功能构建项目所需的信息比如引入构建包的插件以及脚本等。(9)配置plugins/plugins功能要使用的插件列表。(10)配置plugin/plugin功能具体插件信息。13.2全量pom.xml文件?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.hub/groupIdartifactIdhub-example-mybatis/artifactIdversion1.0-SNAPSHOT/versionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.6.3/version/parentdescription集成mybatis框架应用/descriptionpackagingjar/packagingpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingspring.boot.maven.plugin.version2.6.3/spring.boot.maven.plugin.versionspring.boot.version2.6.3/spring.boot.versionmybatis-spring-boot-starter.version2.2.2/mybatis-spring-boot-starter.versionmysql-connector-java.version8.0.30/mysql-connector-java.versionlombok.version1.18.24/lombok.versionguava.version30.1-jre/guava.version/propertiesdependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion${spring.boot.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-jdbc/artifactId/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion${mysql-connector-java.version}/version/dependencydependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion${mybatis-spring-boot-starter.version}/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion${lombok.version}/version/dependencydependencygroupIdcom.google.guava/groupIdartifactIdguava/artifactIdversion${guava.version}/version/dependency/dependenciesbuildfinalName${project.artifactId}/finalNamepluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion${spring.boot.maven.plugin.version}/versionconfigurationforktrue/forkaddResourcestrue/addResources/configurationexecutionsexecutiongoalsgoalrepackage/goal/goals/execution/executions/plugin/plugins/build /project以上感谢。2023年3月10日
http://www.yingshimen.cn/news/36004/

相关文章:

  • 网站首页标题怎么写html中文网
  • 模板建站是什么意思如何做1个手机网站
  • 做装修公司网站费用丰南建设局网站
  • 电子行业网站建设做电影采集网站需要多大vps
  • p2p网站建设制作网站建设有哪些优质公众号
  • 淄博网站建设卓迅做彩票交流网站犯法吗
  • 自己学习建设网站ai海报设计
  • 企业网站的建设与流程asp网站介绍
  • 济源企业网站建设wordpress章节分页
  • 湖北手机版建站系统哪家好中国台州网
  • 视频网站建设方案书企业网站备个人
  • 免费企业黄页网站网址网站制作多少钱新闻
  • 延安网站设计如何建设网站知乎
  • 如手机网站源码教育网站的建设
  • 打码网站做的比较好的是哪些成都专业网站制作哪家好
  • 建设银行关方网站天元建设集团有限公司企业代码
  • 河南网站建设外贸怎样投网站广告
  • 做微商哪个网站比较好响应式网站模块
  • 想做网站怎么做浙江省建设局房管科网站
  • 园林工建设有限公司网站wordpress 自动连接
  • 合肥网站优化搜索做seo需要哪些知识
  • 如何自行建设网站怎么做页面跳转
  • 中国建设银行洛阳分行网站中国摄影网官网
  • 广州网站建设加盟网站seo优化案例
  • 免费的微网站深圳网站制作哪家好
  • 河北建设机械协会网站做网站建设公司企业
  • 樟木头镇网站仿做南通网站建设教程
  • 郑州网站建设搭建公司网站托管服务合同范本
  • 上海浦东新区网站全新的手机网站设计
  • 北京市住房和城乡建设部官方网站北京四大设计院