架构实战项目心得(七):使用SpringBoot+Dubbo+Mybatisplus+Oracle搭建后台项目框架(二)
接下来我们将整合mybatisplus+Oracle,实现一个简单的查询。(期间踩了很多坑,遇到一些问题,还好慢慢解决了。现在是通过配置文件的方式来进行dubbo服务的注册和发布,希望以后能在学习和实践中使用springboot注解方式(也有可能是因为知识还没到那个层面,无法弄懂其中的奥义
))
一、SpringBoot整合mybatisplus
1 众所周知,mybatisplus作为mybatis的一个升级版,大大地简化了大家配置mybatis的xml文件的时间,并且已经整合了很多通用的方法,包括分页的方法等,本项目不细讲mybatisplus,有兴趣的同学可以自己去学一下。本次项目使用mybatisplus作为后台数据库访问的框架。
2 mybatisplus和mybatisplus的SpringBoot依赖:
<!--mybatisplus 依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>${mybatisplus.version}</version>
</dependency>
<!-- Mybatisplus SpringBoot-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatisplus-spring-boot-starter</artifactId>
<version>${mybatisplus-spring-boot-starter.version}</version>
</dependency>
具体的版本根据你的需求来定。
3 对应的实体类UserEntity:
@TableName("USER_INFO")
public class UserEntity extends Model<UserEntity> {
@TableId(value = "USER_ID",type = IdType.AUTO)
private Integer userId;
private String username;
private String password;
private Integer age;
protected Serializable pkVal() {
return userId;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "UserEntity{" +
"userId=" + userId +
", username='" + username + '\'' +
", password='" + password + '\'' +
", age=" + age +
'}';
}
public UserEntity(Integer userId, String username, String password, Integer age) {
this.userId = userId;
this.username = username;
this.password = password;
this.age = age;
}
public UserEntity() {
}
4 Mapper层UserMapper:
public interface UserMapper extends BaseMapper<UserEntity>{
Integer getCount();
}
5 UserMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.laowang.mapper.UserMapper">
<resultMap id="userMap" type="com.laowang.entity.UserEntity">
<result column="USER_ID" property="userId"></result>
<result column="USERNAME" property="username"></result>
<result column="PASSWORD" property="password"></result>
<result column="AGE" property="age"></result>
</resultMap>
<select id="getCount" resultType="java.lang.Integer">
SELECT COUNT(1) FROM USER_INFO
</select>
</mapper>
6 服务接口层IUserService:
public interface IUserService extends IService<UserEntity> {
UserEntity getUserById(int id);
UserEntity findUser();
/**
* 查询总数量
* @return
*/
Integer getCount();
}
7 服务接口实现层UserServiceImpl:
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,UserEntity> implements IUserService {
@Autowired
private UserMapper userMapper; public UserEntity getUserById(int id) {
return userMapper.selectById(id);
} public UserEntity findUser() {
return new UserEntity(20,"laowang","123456789",24);
} public Integer getCount() {
return userMapper.getCount();
}
}
8 控制层UserController:
@RestController
public class UserController {
@Autowired
private IUserService userService; @GetMapping("/getUser/{id}")
public UserEntity getUser(@PathVariable int id) {
return userService.getUserById(id);
} @GetMapping("/test")
public UserEntity findUser() {
return userService.findUser();
} @GetMapping("/getCount")
public Integer getCount() {
return userService.getCount();
}
}
9 application.yml:
# Dubbo 服务提供者配置
server:
port: 8070
spring:
application:
name: provider
datasource:
url: jdbc:oracle:thin:@127.0.0.1:1521:hadoop
username: sys as sysdba
password: 123456789
driver-class-name: oracle.jdbc.driver.OracleDriver
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,wall,logback
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
useGlobalDataSourceStat: true
mybatis:
mapper-locations: classpath:mapper/*Mapper.xml
#实体扫描,多个package用逗号或者分号分隔
type-aliases-package: com.laowang.entity
10 运行项目进行测试,即可得到一个简单的查询结果(由于我的项目已经分割了,所以这里暂时看不到效果,希望大家按照我的步骤去尝试,能够得到一个简答的查询)
架构实战项目心得(七):使用SpringBoot+Dubbo+Mybatisplus+Oracle搭建后台项目框架(二)的更多相关文章
- 【SSH网上商城项目实战03】使用EasyUI搭建后台页面框架
转自:https://blog.csdn.net/eson_15/article/details/51312490 前面两节,我们整合了SSH并且抽取了service和action部分的接口,可以说基 ...
- SpringBoot+thymeleaf+security+vue搭建后台框架 基础篇(一)
刚刚接触SpringBoot,说说踩过的坑,主要的还是要记录下来,供以后反省反省! 今天主要讲讲 thymeleaf+security 的搭建,SpringBoot的项目搭建应该比较简单,这里就不多说 ...
- VUE+ElementUI 搭建后台项目(一)
前言 之前有些过移动端的项目搭建的文章,感觉不写个pc端管理系统老感觉少了点什么,最近公司项目比较多,恰巧要做一个申报系统的后台管理系统,鉴于对vue技术栈比较熟悉,所以考虑还是使用vue技术栈来做: ...
- SpringBoot+Dubbo+Zookeeper整合搭建简单的分布式应用
为什么要使用分布式系统? 容错 减少延迟/提高性能 可用性 负载均衡 总而言之,其实目的只有一个,”用户体验“. 什么是分布式系统? 分布式系统是由使用分发中间件连接的自治计算机组成的网络.它们有助于 ...
- SpringBoot + Layui +Mybatis-plus实现简单后台管理系统(内置安全过滤器)
1. 简介 layui(谐音:类UI)是一款采用自身模块规范编写的前端UI框架,遵循原生HTML/CSS/JS的书写与组织形式,门槛极低,拿来即用.其外在极简,却又不失饱满的内在,体积轻盈,组件丰 ...
- Java开发学习心得(一):SSM环境搭建
目录 Java开发学习心得(一):SSM环境搭建 1 SSM框架 1.1 Spring Framework 1.2 Spring MVC Java开发学习心得(一):SSM环境搭建 有一点.NET的开 ...
- 手把手教你用vue-cli搭建vue项目
手把手教你用vue-cli搭建vue项目 本篇主要是利用vue-cli来搭建vue项目,其中前提是node和npm已经安装好,文章结尾将会简单提到一个简单的例子.使用vue-cli搭建项目最开始我也是 ...
- 利用vue-cli搭建vue项目
手把手教你用vue-cli搭建vue项目 本篇主要是利用vue-cli来搭建vue项目,其中前提是node和npm已经安装好,文章结尾将会简单提到一个简单的例子.使用vue-cli搭建项目最开始我也是 ...
- 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...
原文:手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 本文你将学到什么? 本文将以原理+实战的方式,首先对& ...
随机推荐
- 使用django rest framework写POST和GET接口
https://www.cnblogs.com/Jack-cx/p/9351633.html
- leetcode 从排序数组中删除重复项
最近的学习是相当的无聊,并且很无趣,每天都浪费了很多时间,比如今天下午,就是搞一手成语接龙,我也是醉了- 并且我也不知道学什么了,所以决定刷题 虽然我是0算法基础,0逻辑能力的渣渣,但是尽力每天做一道 ...
- C#中IO操作
using sysytem.Io; File.Exists() 检查文件是否存在, Directory.Exists() 检查文件夹是否存在 FileInfo DirectoryInfo 可实例化 对 ...
- 【题解】 LA3708 Graveyard
题目大意 在一个圆周长为10000的圆上等距离分布n个雕塑,现在有m个新加入的雕塑(还是要求等距离摆放),问n个雕塑移动的总距离的最小值. Solution 显然必然会有一个雕塑不移动,所以可以直接不 ...
- depth深度
du.tree.find ls -li find ./ -inum 1193220 | while read a ;do rm -f $a;done find ./ -size 0b -type f ...
- day04.4-装饰器
1. 装饰器 装饰器本身就是函数,功能是为其他函数添加附加功能 装饰器的设计原则: (a). 不修改被修饰函数的源代码: (b). 不修改被修改函数的调用方法. 装饰器=高阶函数+函数嵌套+闭包 装饰 ...
- jQuery展开收缩2
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...
- ios 相机 自定义 相片的截取
前段时间公司需要做一个身份识别的功能,而系统相机无法满足要求,so自己自定义了. 上代码: .h文件 #import <UIKit/UIKit.h> #import <AVFound ...
- 2019.2.14 t3 车辆销售
用算法求最大生成树,在并查集合并时,把原本的一个根连向另一个 根改成两个根都连向一个新建的节点,并把当前正在处理的边的权值赋给这个新 节点做点权.这样形成的结构会是一棵树. 一个点的答案大致上是树的根 ...
- ubuntu下面的某些软件安装
1. python 下面的mysql驱动:不是在pip里面安装,执行下面命令 apt-get install python-mysqldb