C:\Users\Administrator>java -version java version "1.8.0_381" Java(TM) SE Runtime Environment (build 1.8.0_381-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.381-b09, mixed mode
public class Test<U> { // 该方法只是使用了泛型类定义的类型参数,不是泛型方法 public void testMethod(U u){ System.out.println(u); } // <T> 真正声明了下面的方法是一个泛型方法 public <T> T testMethod1(T t){ return t; } }
实现了普通方法和泛型方法
1 2 3 4 5 6 7 8 9 10
public class Test<T> { // 是泛型类中的普通方法 public void testMethod(T t) { System.out.println(t); } // 是一个泛型方法 public <T> T testMethod1(T t) { return t; } }
运行
1 2 3 4 5 6 7 8 9
public class Main { public static void main(String args[]) { Test test = new Test<Integer>(); test.testMethod("112"); String tt = (String) test.testMethod1("你好"); System.out.println(tt); } }
// 文件名: Sports.java public interface Sports { public void setHomeTeam(String name); public void setVisitingTeam(String name); } // 文件名: Football.java public interface Football extends Sports { public void homeTeamScored(int points); public void visitingTeamScored(int points); public void endOfQuarter(int quarter); } // 文件名: Hockey.java public interface Hockey extends Sports { public void homeGoalScored(); public void visitingGoalScored(); public void endOfPeriod(int period); public void overtimePeriod(int ot); }
#用来验证用户是否有权限登陆的中间件 class AuthenticationMiddle(MiddlewareMixin): def process_request(self, request): url_path = request.path #如果不在请求在白名单里 if url_path not in exclued_path: #如果未登陆,则调转到登陆页面,将请求的url作为next参数 # if not request.user.is_authenticated: if not request.session.get("user"): # return redirect("/login/?next={url_path}".format(url_path=url_path)) return JsonResponse({'code': -1, 'msg': 'login is failed2222'}) #如果已经登陆,则通过 else: pass
File "D:\app\Python37\lib\site-packages\django\db\backends\mysql\base.py", line 36, in <module> raise ImproperlyConfigured('mysqlclient 1.4.0 or newer is required; you have %s.' % Database.__version__) django.core.exceptions.ImproperlyConfigured: mysqlclient 1.4.0 or newer is required; you have 0.10.1.
class Publish(models.Model): name = models.CharField(max_length=32) city = models.CharField(max_length=64) email = models.EmailField()
class Author(models.Model): name = models.CharField(max_length=32) age = models.SmallIntegerField() # 一对一,意思为一个作者对应一个作者详情 au_detail = models.OneToOneField("AuthorDetail", on_delete=models.CASCADE)
# 清空独孤九剑关联的所有作者 book = models.Book.objects.filter(title="菜鸟教程").first() book.authors.clear()
对于 ForeignKey 对象,这个方法仅在 null=True(可以为空)时存在。
ORM 查询
一对多
查询主键为 10 的书籍的出版社所在的城市(正向)。
1 2 3 4
book = models.Book.objects.filter(pk=10).first() res = book.publish.city print(res, type(res)) return HttpResponse("ok")
查询明教出版社出版的书籍名(反向)。
1 2 3 4 5 6
pub = models.Publish.objects.filter(name="明教出版社").first() # pub.book_set.all():取出书籍表的所有书籍对象,在一个 QuerySet 里,遍历取出一个个书籍对象。 res = pub.book_set.all() for i in res: print(i.title) return HttpResponse("ok")
一对一
查询令狐冲的电话(正向)
正向:对象.属性 (author.au_detail) 可以跳转到关联的表(作者详情表)
1 2 3 4
author = models.Author.objects.filter(name="令狐冲").first() res = author.au_detail.tel print(res, type(res)) return HttpResponse("ok")
查询所有住址在黑木崖的作者的姓名(反向)。
1 2 3 4
addr = models.AuthorDetail.objects.filter(addr="黑木崖").first() res = addr.author.name print(res, type(res)) return HttpResponse("ok")
book = models.Book.objects.filter(title="菜鸟教程").first() res = book.authors.all() for i in res: print(i.name, i.au_detail.tel) return HttpResponse("ok")
查询任我行出过的所有书籍的名字(反向)。
1 2 3 4 5
author = models.Author.objects.filter(name="任我行").first() res = author.book_set.all() for i in res: print(i.title) return HttpResponse("ok")
基于双下划线的跨表查询
正向:属性名称__跨表的属性名称
反向:小写类名__跨表的属性名称
一对多
正向:查询菜鸟出版社出版过的所有书籍的名字与价格。
1 2
# publish__name 跨表中的name res = models.Book.objects.filter(publish__name="菜鸟出版社").values_list("title", "price")
[root@VM-24-13-centos home]# uname -a Linux VM-24-13-centos 3.10.0-1160.11.1.el7.x86_64 #1 SMP Fri Dec 18 16:34:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
直接部署
分别为下载,解压go
1 2 3 4 5 6 7 8
[root@VM-24-13-centos /]# cd home [root@VM-24-13-centos home]# wget https://dl.google.com/go/go1.20.4.linux-amd64.tar.gz [root@VM-24-13-centos home]# tar -zxvf go1.20.4.linux-amd64.tar.gz [root@VM-24-13-centos bin]# pwd /home/go/bin [root@VM-24-13-centos bin]# ./go version go version go1.20.4 linux/amd64
PS E:\proj\gowork\study-gozero-demo\mall\user\rpc> go run user.go Starting rpc server at 0.0.0.0:8080...
启动user api,用来登录返回token
1 2
PS E:\proj\gowork\study-gozero-demo\mall\user\api> go run .\user.go Starting server at 0.0.0.0:8888.
启动order api,对外的接口
1 2 3
PS E:\proj\gowork\study-gozero-demo\mall\order\api> go run .\order.go Starting server at 0.0.0.0:8889... {"@timestamp":"2023-07-30T16:03:50.226+08:00","cal
// userdellogic.go func(l *UserDelLogic) UserDel(req *types.UserDelReq) (resp *types.UserDelRes, err error) { // todo: add your logic here and delete this line
OrderAddRes { Code int `json:"code"` Messsage string `json:"message"` } )
// 在哪个服务头上加这个验证,就是需要jwt鉴权 @server( jwt: Auth ) service order { @handler orderAdd post /api/order/OrderAdd (OrderAddReq) returns (OrderAddRes) }
service order { @handler getOrder get /api/order/get/:id (OrderReq) returns (OrderReply) } // 在哪个服务头上加这个验证,就是需要jwt鉴权 @server( jwt: Auth ) service order { @handler orderAdd post /api/order/OrderAdd (OrderAddReq) returns (OrderAddRes) }
service order { @handler getOrder get /api/order/get/:id (OrderReq) returns (OrderReply) }
生成order.api代码
1
PS E:\proj\gowork\study-gozero-demo\mall\order\api> goctl api go -api order.api -dir .
E:\proj\gowork>mkdir go-zero-demo E:\proj\gowork>cd go-zero-demo E:\proj\gowork\go-zero-demo>go mod init go-zero-demo go: creating new go.mod: module go-zero-demo E:\proj\gowork\go-zero-demo>goctl api new greet Done. E:\proj\gowork\go-zero-demo>go mod tidy
OrderReply { Id string `json:"id"` Name string `json:"name"` } ) service order { @handler getOrder get /api/order/get/:id (OrderReq) returns (OrderReply) }
生成order服务,非rpc
1
PS E:\proj\gowork\study-gozero-demo\mall\order\api> goctl api go -api order.api -dir .
E:\proj\gowork\study-gozero-demo\mall\user\rpc> go run .\user.go
启动order api
1 2 3
PS E:\proj\gowork\study-gozero-demo\mall\order\api> go run order.go Starting server at 0.0.0.0:8888... {"@timestamp":"2023-07-26T16:36:58.057+08:00","caller":"stat/usage.go:61","content":"CPU: 0m, MEMORY: Alloc=3.2Mi, TotalAlloc=6.1Mi, Sys=17.9Mi, NumGC=3","level":"stat"}