会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132947个问题

"""
v1.24
    新增功能:
        1.音效处理
"""
# 导入pygame模块
import pygame,time,random

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 500
BG_COLOR = pygame.Color(0, 0, 0)
TEXT_COLOR=pygame.Color(255,0,0)
version="v1.24"
class MainGame():
    window = None
    my_tanke=None
    #存储敌方坦克的列表
    enemyTankeList=[]
    #定义敌方坦克的数量
    enemyTankeCount=5
    #存储我方子弹的列表
    myBulletList=[]
    #存储敌方子弹列表
    enemyBulletList=[]
    #存储爆炸效果列表
    explodeList=[]
    #存储墙壁列表
    wallList=[]
    # 开始游戏
    def startGame(self):
        # 加载主窗口
        # 初始化窗口
        pygame.display.init()
        # 设置窗口的大小及显示
        MainGame.window = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT])
        #初始化我方坦克
        self.createMyTanke()
        #初始化敌方坦克,并将敌方坦克添加到列表中
        self.createEnemyTanke()
        #初始化墙壁,并讲墙壁添加到列表中
        self.createWalls()
        # 设置窗口的标题
        pygame.display.set_caption("坦克大战"+version)
        while True:
            #使坦克的循环变慢
            time.sleep(0.02)
            # 设置填充色
            MainGame.window.fill(BG_COLOR)
            #获取事件
            self.getEvent()
            #绘制文字
            MainGame.window.blit(self.getTextSuface("敌方坦克剩余数量%d"%len(MainGame.enemyTankeList)),(10,10))
            #调用展示墙壁方法
            self.blitWalls()
            if MainGame.my_tanke and MainGame.my_tanke.live:
                # 调用坦克显示的方法
                MainGame.my_tanke.displayTanke()
            else:
                del MainGame.my_tanke
                MainGame.my_tanke=None
            #循环遍历敌方坦克列表,展示敌方坦克
            self.blitEnemyTanke()
            #调用移动方法
            #如果坦克的开关开启,才可以移动
            if MainGame.my_tanke and MainGame.my_tanke.live:
                if not MainGame.my_tanke.stop:
                    MainGame.my_tanke.move()
                    #调用碰撞墙壁的方法
                    MainGame.my_tanke.hitWalls()
                    MainGame.my_tanke.hitEnemyTanke()
            #调用渲染子弹列表的方法
            self.blitBullet()
            #调用敌方渲染子弹列表的方法
            self.blitEnemyBullet()
            #调用展示爆炸效果的方法
            self.displayExplodes()
            pygame.display.update()
    # 初始化我方坦克,并将我方坦克添加到列表中
    def createMyTanke(self):
        #初始化我方坦克
        MainGame.my_tanke = MyTanke(400,320)
        #创建音乐对象方法
        music=Music("img/start.wav")
        #调用音乐播放的方法
        music.play()
    # 初始化敌方坦克,并将敌方坦克添加到列表中
    def createEnemyTanke(self):
        top=100
        #循环生成敌方坦克
        for i in range(MainGame.enemyTankeCount):
            left=random.randint(0,600)
            speed=random.randint(1,4)
            enemy=EnemyTanke(left,top,speed)
            MainGame.enemyTankeList.append(enemy)
    #初始化墙壁,并将墙壁添加到列表中
    def createWalls(self):
        for i in range(6):
            wall=Wall(130*i,240)
            MainGame.wallList.append(wall)
    def blitWalls(self):
        for wall in MainGame.wallList:
            if wall.live:
                wall.displayWall()
            else:
                MainGame.wallList.remove(wall)
    # 循环遍历敌方坦克列表,展示敌方坦克
    def blitEnemyTanke(self):
        for enemyTanke in MainGame.enemyTankeList:
            if enemyTanke.live:
                enemyTanke.displayTanke()
                #敌方坦克移动的方法
                enemyTanke.randMove()
                #调用敌方坦克与墙壁的碰撞方法
                enemyTanke.hitWalls()
                # 敌方坦克是否撞到我方坦克
                enemyTanke.hitMyTanke()
                #调用敌方坦克的射击
                enemyBullet=enemyTanke.shot()
                #敌方子弹是否是None,如果不为None则添加到敌方子弹列表中
                if enemyBullet:
                     # 将敌方子弹存储到敌方子弹列表中
                     MainGame.enemyBulletList.append(enemyBullet)
            else:
                MainGame.enemyTankeList.remove(enemyTanke)
    #新增方法,展示爆炸效果列表中
    def displayExplodes(self):
        for explode in MainGame.explodeList:
            if explode.live:
                explode.displayExplode()
                music=Music("img/hit.wav")
                music.play()
            else:
                MainGame.explodeList.remove(explode)
    #将我方子弹加入到窗口中
    def blitBullet(self):
        for bullet in MainGame.myBulletList:
            #如果子弹还活着,绘制出来,否则,直接从列表中移除该子弹
            if bullet.live:
                bullet.displayBullet()
                # 让子弹移动
                bullet.bulletMove()
                #调用我方子弹与敌方坦克碰撞的方法
                bullet.myBullet_hit_enemyTanke()
                #调用判段我方子弹是否碰撞到墙壁的方法
                bullet.hit_Walls()
            else:
                MainGame.myBulletList.remove(bullet)
    #将敌方子弹加入到窗口中
    def blitEnemyBullet(self):
        for enemyBullet in MainGame.enemyBulletList:
            # 如果子弹还活着,绘制出来,否则,直接从列表中移除该子弹
            if enemyBullet.live:#判断敌方列表是否存活
                enemyBullet.displayBullet()
                # 让子弹移动
                enemyBullet.bulletMove()
                #调用判段我方子弹是否碰撞到墙壁的方法
                enemyBullet.hit_Walls()
                if MainGame.my_tanke and MainGame.my_tanke.live:
                    enemyBullet.enemyBullet_hit_myTanke()
            else:
                MainGame.enemyBulletList.remove(enemyBullet)
    # 结束游戏
    def endGame(self):
        print("谢谢使用,欢迎再次使用")
        exit()

    #左上角文字的绘制
    def getTextSuface(self,text):
        #初始化字体模块
        pygame.font.init()
        #查看所有的字体名称
        # print(pygame.font.get_fonts())
        #获取字体Font
        font=pygame.font.SysFont("kaiti",18)
        #绘制文字信息
        textSurface=font.render(text,True,TEXT_COLOR)
        return textSurface
    #获取事件
    def getEvent(self):
        #获取所有事件
        eventList=pygame.event.get()
        #遍历事件
        for event in eventList:
            #判断按下的键是关闭还是键盘按下
            #如果按的是退出,关闭窗口
            if event.type==pygame.QUIT:
                self.endGame()
            #如果是键盘的按下
            if event.type==pygame.KEYDOWN:
                # 点击ESC让我方坦克重生
                if event.key == pygame.K_ESCAPE and not MainGame.my_tanke:
                    # 创建我方坦克的方法
                    self.createMyTanke()
                if MainGame.my_tanke and MainGame.my_tanke.live:
                    #判断按下的是上、是下、左、右
                    if event.key==pygame.K_LEFT:
                        #切换方向
                        MainGame.my_tanke.direction="L"
                        #修改坦克的开关状态
                        MainGame.my_tanke.stop=False
                        # MainGame.my_tanke.move()
                        print("按下左键,坦克向左移动")
                    elif event.key==pygame.K_RIGHT:
                        # 切换方向
                        MainGame.my_tanke.direction = "R"
                        # 修改坦克的开关状态
                        MainGame.my_tanke.stop = False
                        # MainGame.my_tanke.move()
                        print("按下右键,坦克向右移动")
                    elif event.key==pygame.K_UP:
                        # 切换方向
                        MainGame.my_tanke.direction = "U"
                        # 修改坦克的开关状态
                        MainGame.my_tanke.stop = False
                        # MainGame.my_tanke.move()
                        print("按下上键,坦克向上移动")
                    elif event.key==pygame.K_DOWN:
                        # 切换方向
                        MainGame.my_tanke.direction = "D"
                        # 修改坦克的开关状态
                        MainGame.my_tanke.stop = False
                        # MainGame.my_tanke.move()
                        print("按下下键,坦克向下移动")
                    elif event.key==pygame.K_SPACE:
                        print("发射子弹")
                        if len(MainGame.myBulletList)<3:
                            # 产生一颗子弹
                            m = Bullet(MainGame.my_tanke)
                            # 将子弹加入到子弹列表
                            MainGame.myBulletList.append(m)
                            music=Music("img/fire.wav")
                            music.play()
                        else:
                            print("子弹数量不足")
                        print("当前屏幕中的子弹数量为:%d"%len(MainGame.myBulletList))
            # 松开方向键,坦克停止移动,修改坦克的开关状态
            if event.type==pygame.KEYUP:
                #判段松开的键是上、下、左、右的时候才停止坦克移动
                if event.key==pygame.K_UP or event.key==pygame.K_DOWN or event.key==pygame.K_LEFT or event.key==pygame.K_RIGHT:
                    if MainGame.my_tanke and MainGame.my_tanke.live:
                        MainGame.my_tanke.stop=True


class BaseItem(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
# 坦克类
class Tanke(BaseItem):
    #添加左边距离left,上边距离top
    def __init__(self,left,top):
        #保存加载的图片
        self.images={"U":pygame.image.load("img/p1tankU.gif"),
                     "D":pygame.image.load("img/p1tankD.gif"),
                     "L":pygame.image.load("img/p1tankL.gif"),
                     "R":pygame.image.load("img/p1tankR.gif"),
        }
        #方向
        self.direction="L"
        #根据当前图片的方向获取图片,图片返回的是surface
        self.image=self.images[self.direction]
        #根据经图片获取区域
        self.rect=self.image.get_rect()
        #设置区域的left和top
        self.rect.left=left
        self.rect.top=top
        # 速度,决定移动的快慢
        self.speed = 5
        #坦克移动的开关
        self.stop=True
        #新增属性live用来记录,坦克是否活着
        self.live=True
        #新增属性,用来记录坦克移动之前的坐标(用于坐标还原使用)
        self.oldLeft=self.rect.left
        self.oldTop=self.rect.top



    # 移动
    def move(self):
        #先记录移动之前的坐标
        self.oldLeft = self.rect.left
        self.oldTop = self.rect.top
        #判断坦克的方向进行移动
        if self.direction=="L":
            if self.rect.left>0:
                self.rect.left -= self.speed
        elif self.direction=="U":
            if self.rect.top>0:
                self.rect.top-=self.speed
        elif self.direction=="D":
            if self.rect.top+self.rect.height<SCREEN_HEIGHT:
                self.rect.top += self.speed
        elif self.direction=="R":
            if self.rect.left+self.rect.height<SCREEN_WIDTH:
                self.rect.left += self.speed
    def stay(self):
        self.rect.left=self.oldLeft
        self.rect.top=self.oldTop
    #新增碰撞墙壁的方法
    def hitWalls(self):
        for wall in MainGame.wallList:
            if pygame.sprite.collide_rect(wall,self):
                self.stay()


    # 射击
    def shot(self):
        return Bullet(self)

    # 展示坦克的方法
    def displayTanke(self):
        #获取展示的对象
        self.image=self.images[self.direction]
        #调用blit方法显示
        MainGame.window.blit(self.image,self.rect)

# 我方坦克类
class MyTanke(Tanke):
    def __init__(self,left,top):
        super(MyTanke, self).__init__(left,top)
    #新增主动碰撞到敌方的坦克的方法
    def hitEnemyTanke(self):
        for enemyTanke in MainGame.enemyTankeList:
            if pygame.sprite.collide_rect(enemyTanke,self):
                self.stay()


# 敌方坦克类
class EnemyTanke(Tanke):
    def __init__(self,left,top,speed):
        super(EnemyTanke, self).__init__(left,top)
        #self.live=True
        #加载图片集
        self.images={
            "U": pygame.image.load("img/enemy1U.gif"),
            "R": pygame.image.load("img/enemy1R.gif"),
            "L": pygame.image.load("img/enemy1L.gif"),
            "D": pygame.image.load("img/enemy1D.gif"),

        }
        #方向,随机生成敌方坦克的方向
        self.direction=self.randDirection()
        #根据方向获取图片
        self.image=self.images[self.direction]
        #区域
        self.rect=self.image.get_rect()
        #对left和top进行赋值
        self.rect.left=left
        self.rect.top=top
        #速度
        self.speed=speed
        #移动开关键
        self.flag=True
        # 新增加一个步数变量 step
        self.step = 60

    # 随机生成敌方坦克的方向
    def randDirection(self):
        num=random.randint(1,4)
        if num==1:
            return "U"
        elif num==2:
            return "L"
        elif num==3:
            return "R"
        elif num==4:
            return "D"
        # 敌方坦克随机移动的方法

    def randMove(self):
        if self.step <= 0:
            # 修改方向
            self.direction = self.randDirection()
            # 让步数复位
            self.step = 60
        else:
            self.move()
            # 让步数递减
            self.step -= 1

    # 重写shot()
    def shot(self):
        # 随机生成100以内的数
        num = random.randint(1, 1000)
        if num < 20:
            return Bullet(self)
    def hitMyTanke(self):
        if pygame.sprite.collide_rect(self,MainGame.my_tanke):
            #让敌方坦克停下来 stay()
            self.stay()

# 子弹类
class Bullet(BaseItem):
    def __init__(self,tanke):
        #加载图片
        self.image=pygame.image.load("img/enemymissile.gif")
        #坦克的方向决定子弹的方向
        self.direction=tanke.direction
        #获取区域
        self.rect=self.image.get_rect()
        #子弹的lef和top与方向有关
        if self.direction=="U":
            self.rect.left=tanke.rect.left+tanke.rect.width/2-self.rect.width/2
            self.rect.top=tanke.rect.top-self.rect.height
        elif self.direction=="D":
            self.rect.left=tanke.rect.left+tanke.rect.width/2-self.rect.width/2
            self.rect.top=tanke.rect.top+self.rect.height
        elif self.direction=="L":
            self.rect.left=tanke.rect.left-tanke.rect.width/2-self.rect.width/2
            self.rect.top=tanke.rect.top+self.rect.width/2-self.rect.width/2
        elif self.direction=="R":
            self.rect.left=tanke.rect.left+tanke.rect.width
            self.rect.top=tanke.rect.top + tanke.rect.width / 2 - self.rect.width / 2
        #子弹的速度
        self.speed=5
        #用来记录子弹是否碰撞
        self.live=True


    # 子弹的移动方法
    def bulletMove(self):
        if self.direction=="U":
            if self.rect.top>0:
                self.rect.top-=self.speed
            else:
                #修改状态值
                self.live=False
        elif self.direction=="D":
            if self.rect.top<SCREEN_HEIGHT-self.rect.height:
                self.rect.top+=self.speed
            else:
                # 修改状态值
                self.live = False
        elif self.direction=="L":
            if self.rect.left>0:
                self.rect.left-=self.speed
            else:
                # 修改状态值
                self.live = False
        elif self.direction=="R":
            if self.rect.left<SCREEN_WIDTH-self.rect.width:
                self.rect.left+=self.speed
            else:
                # 修改状态值
                self.live = False

    # 展示子弹方法
    def displayBullet(self):
        #将图片surface加载到窗口
        MainGame.window.blit(self.image,self.rect)

    #新增我方子弹碰撞敌方坦克的方法
    def myBullet_hit_enemyTanke(self):
        for enemyTanke in MainGame.enemyTankeList:
            if pygame.sprite.collide_rect(enemyTanke,self):
                #产生一个爆炸效果
                explode=Explode(enemyTanke)
                #将爆炸效果加入到爆炸效果列表中
                MainGame.explodeList.append(explode)
                self.live=False
                enemyTanke.live=False

    #新增敌方子弹与我方坦克的碰撞
    def enemyBullet_hit_myTanke(self):
        if pygame.sprite.collide_rect(self,MainGame.my_tanke):
            #产生爆炸效果,并加入到爆炸效果列表中
            explode=Explode(MainGame.my_tanke)
            #修改子弹状态
            # 将爆炸对象添加到爆炸列表中
            MainGame.explodeList.append(explode)
            # 修改敌方子弹与我方坦克的状态
            self.live=False
            #修改我方坦克状态
            MainGame.my_tanke.live=False
    #新增子弹与墙壁的碰撞
    def hit_Walls(self):
        for wall in MainGame.wallList:
            if pygame.sprite.collide_rect(self,wall):
                #修改子弹的活着属性
                self.live=False
                wall.hp-=1
                if wall.hp<=0:
                    wall.live=False




# 墙壁类
class Wall():
    def __init__(self,left,top):
        self.image=pygame.image.load("img/steels.gif")
        self.rect=self.image.get_rect()
        self.rect.left=left
        self.rect.top=top
        #用来判断墙壁是否应该在窗口中展示
        self.live=True
        #用来记录墙壁的生命值
        self.hp=3

    # 展示墙壁方法
    def displayWall(self):
        MainGame.window.blit(self.image,self.rect)


# 爆炸效果类
class Explode():
    def __init__(self,tanke):
        self.rect=tanke.rect
        self.step=0
        self.images=[
            pygame.image.load("img/blast0.gif"),
            pygame.image.load("img/blast1.gif"),
            pygame.image.load("img/blast2.gif"),
            pygame.image.load("img/blast3.gif"),
            pygame.image.load("img/blast4.gif")

        ]
        self.image=self.images[self.step]
        self.live=True

    # 展示爆炸效果方法
    def displayExplode(self):
        if self.step<len(self.images):
            MainGame.window.blit(self.image, self.rect)
            self.image=self.images[self.step]
            self.step+=1
        else:
            self.live=False
            self.step=0


#我方坦克出生
# 音效类
class Music():
    def __init__(self,fileName):
        self.fileName=fileName
        #先初始化混合器
        pygame.mixer.init()
        pygame.mixer.music.load(self.fileName)


    #开始播放音乐的方法
    def play(self):
        pygame.mixer.music.play()


if __name__ == "__main__":
    MainGame().startGame()
    # MainGame().getTextSuface()

tanke – tanke25.py 2021_5_6 20_58_45.png老师,这那错了

Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 21751楼
Python 全系列/第二阶段:Python 深入与提高/模块 21753楼

from urllib.request import Request,build_opener
from fake_useragent import UserAgent
from urllib.parse import urlencode
from urllib.request import HTTPCookieProcessor
from http.cookiejar import MozillaCookieJar
def get_cookie():
    login_url = 'https://www.docin.com/app/login'
    # 设置账号密码
    form_data = {
        'user': '18310640655',
        'password': '199759guo'
    }
    # 设置请求头
    headers = {"User-Agent": UserAgent().random}
    # 封装函数
    req = Request(login_url, headers=headers, data=urlencode(form_data).encode())
    #自己保存cookie
    cookie_jar =MozillaCookieJar()
    # 保存cookie
    handler = HTTPCookieProcessor(cookie_jar)
    opener = build_opener(handler)
    resp = opener.open(req)
    #无论我的cookie是否过期都将保存下来
    cookie_jar.save('cookie.txt',ignore_discard=True,ignore_expires=True)

def use_cookie():
    info_url = 'https://www.docin.com/'
    headers = {'User-Agent':UserAgent().random}
    req = Request(info_url,headers=headers)

    #加载cookie信息
    cookie_jar = MozillaCookieJar()
    cookie_jar.load('cookie.txt',ignore_discard=True,ignore_expires=True)
    handler = HTTPCookieProcessor(cookie_jar)
    #将信息放到控制器里面
    opener = build_opener(handler)
    resp = opener.open(req)

    print(resp.read().decode())

if __name__ == '__main__':
    get_cookie()
    use_cookie()

image.png


老师,我尝试用cookie登录豆丁网,为什么我保存下来的cookie信息是这样的。并且无法登录

Python 全系列/第十四阶段:Python 爬虫开发/scrapy框架使用(旧) 21755楼
JAVA 全系列/第一阶段:JAVA 快速入门/IDEA的使用和第一个java项目 21756楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 21757楼

如何解决spring整合mybatis报错,如下所示:

image.png

image.png

配置文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///ssm?serverTimezone=UTC&useSSL=false
username=root
password=1234
<!--加载外部配置文件-->
    <context:property-placeholder location="db.properties"/>
<!--配置数据源-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
    </bean>
<!--    配置sqlsessionfactoryBean -->
    <bean id="SqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="typeAliasesPackage" value="com.qianli.pojo"/>
        <property name="mapperLocations" value="com/qianli/mapper/*.xml"/>
    </bean>
<!--    配置sqlsessionTemplate-->
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg name="sqlSessionFactory" ref="SqlSessionFactoryBean"/>
    </bean>
<!--配置业务层-->
    <bean id="userService" class="com.qianli.service.impl.UserServiceImpl">
        <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
    </bean>

mapper

public interface UsersMapper {
    int countByExample(UsersExample example);

    int deleteByExample(UsersExample example);

    int deleteByPrimaryKey(Integer userid);

    int insert(Users record);

    int insertSelective(Users record);

    List<Users> selectByExample(UsersExample example);

    Users selectByPrimaryKey(Integer userid);

    int updateByExampleSelective(@Param("record") Users record, @Param("example") UsersExample example);

    int updateByExample(@Param("record") Users record, @Param("example") UsersExample example);

    int updateByPrimaryKeySelective(Users record);

    int updateByPrimaryKey(Users record);
}
<?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.qianli.mapper.UsersMapper" >
  <resultMap id="BaseResultMap" type="com.qianli.pojo.Users" >
    <id column="userid" property="userid" jdbcType="INTEGER" />
    <result column="username" property="username" jdbcType="VARCHAR" />
    <result column="usersex" property="usersex" jdbcType="VARCHAR" />
  </resultMap>
  <sql id="Example_Where_Clause" >
    <where >
      <foreach collection="oredCriteria" item="criteria" separator="or" >
        <if test="criteria.valid" >
          <trim prefix="(" suffix=")" prefixOverrides="and" >
            <foreach collection="criteria.criteria" item="criterion" >
              <choose >
                <when test="criterion.noValue" >
                  and ${criterion.condition}
                </when>
                <when test="criterion.singleValue" >
                  and ${criterion.condition} #{criterion.value}
                </when>
                <when test="criterion.betweenValue" >
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                </when>
                <when test="criterion.listValue" >
                  and ${criterion.condition}
                  <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
                    #{listItem}
                  </foreach>
                </when>
              </choose>
            </foreach>
          </trim>
        </if>
      </foreach>
    </where>
  </sql>
  <sql id="Update_By_Example_Where_Clause" >
    <where >
      <foreach collection="example.oredCriteria" item="criteria" separator="or" >
        <if test="criteria.valid" >
          <trim prefix="(" suffix=")" prefixOverrides="and" >
            <foreach collection="criteria.criteria" item="criterion" >
              <choose >
                <when test="criterion.noValue" >
                  and ${criterion.condition}
                </when>
                <when test="criterion.singleValue" >
                  and ${criterion.condition} #{criterion.value}
                </when>
                <when test="criterion.betweenValue" >
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                </when>
                <when test="criterion.listValue" >
                  and ${criterion.condition}
                  <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
                    #{listItem}
                  </foreach>
                </when>
              </choose>
            </foreach>
          </trim>
        </if>
      </foreach>
    </where>
  </sql>
  <sql id="Base_Column_List" >
    userid, username, usersex
  </sql>
  <select id="selectByExample" resultMap="BaseResultMap" parameterType="com.qianli.pojo.UsersExample" >
    select
    <if test="distinct" >
      distinct
    </if>
    <include refid="Base_Column_List" />
    from users
    <if test="_parameter != null" >
      <include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause != null" >
      order by ${orderByClause}
    </if>
  </select>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
    select 
    <include refid="Base_Column_List" />
    from users
    where userid = #{userid,jdbcType=INTEGER}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
    delete from users
    where userid = #{userid,jdbcType=INTEGER}
  </delete>
  <delete id="deleteByExample" parameterType="com.qianli.pojo.UsersExample" >
    delete from users
    <if test="_parameter != null" >
      <include refid="Example_Where_Clause" />
    </if>
  </delete>
  <insert id="insert" parameterType="com.qianli.pojo.Users" >
    insert into users (userid, username, usersex
      )
    values (#{userid,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{usersex,jdbcType=VARCHAR}
      )
  </insert>
  <insert id="insertSelective" parameterType="com.qianli.pojo.Users" >
    insert into users
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="userid != null" >
        userid,
      </if>
      <if test="username != null" >
        username,
      </if>
      <if test="usersex != null" >
        usersex,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="userid != null" >
        #{userid,jdbcType=INTEGER},
      </if>
      <if test="username != null" >
        #{username,jdbcType=VARCHAR},
      </if>
      <if test="usersex != null" >
        #{usersex,jdbcType=VARCHAR},
      </if>
    </trim>
  </insert>
  <select id="countByExample" parameterType="com.qianli.pojo.UsersExample" resultType="java.lang.Integer" >
    select count(*) from users
    <if test="_parameter != null" >
      <include refid="Example_Where_Clause" />
    </if>
  </select>
  <update id="updateByExampleSelective" parameterType="map" >
    update users
    <set >
      <if test="record.userid != null" >
        userid = #{record.userid,jdbcType=INTEGER},
      </if>
      <if test="record.username != null" >
        username = #{record.username,jdbcType=VARCHAR},
      </if>
      <if test="record.usersex != null" >
        usersex = #{record.usersex,jdbcType=VARCHAR},
      </if>
    </set>
    <if test="_parameter != null" >
      <include refid="Update_By_Example_Where_Clause" />
    </if>
  </update>
  <update id="updateByExample" parameterType="map" >
    update users
    set userid = #{record.userid,jdbcType=INTEGER},
      username = #{record.username,jdbcType=VARCHAR},
      usersex = #{record.usersex,jdbcType=VARCHAR}
    <if test="_parameter != null" >
      <include refid="Update_By_Example_Where_Clause" />
    </if>
  </update>
  <update id="updateByPrimaryKeySelective" parameterType="com.qianli.pojo.Users" >
    update users
    <set >
      <if test="username != null" >
        username = #{username,jdbcType=VARCHAR},
      </if>
      <if test="usersex != null" >
        usersex = #{usersex,jdbcType=VARCHAR},
      </if>
    </set>
    where userid = #{userid,jdbcType=INTEGER}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.qianli.pojo.Users" >
    update users
    set username = #{username,jdbcType=VARCHAR},
      usersex = #{usersex,jdbcType=VARCHAR}
    where userid = #{userid,jdbcType=INTEGER}
  </update>
</mapper

service

package com.qianli.service;

import com.qianli.pojo.Users;

public interface UserService {
    void add(Users users);
}
package com.qianli.service.impl;

import com.qianli.mapper.UsersMapper;
import com.qianli.pojo.Users;
import com.qianli.service.UserService;
import org.mybatis.spring.SqlSessionTemplate;

public class UserServiceImpl implements UserService {
    private SqlSessionTemplate sqlSessionTemplate;

    public SqlSessionTemplate getSqlSessionTemplate() {
        return sqlSessionTemplate;
    }

    public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
        this.sqlSessionTemplate = sqlSessionTemplate;
    }
//添加用户
    @Override
    public void add(Users users) {
        UsersMapper mapper = this.sqlSessionTemplate.getMapper(UsersMapper.class);
        mapper.insertSelective(users);
    }
}

pojo

package com.qianli.pojo;

public class Users {
    private Integer userid;

    private String username;

    private String usersex;

    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 == null ? null : username.trim();
    }

    public String getUsersex() {
        return usersex;
    }

    public void setUsersex(String usersex) {
        this.usersex = usersex == null ? null : usersex.trim();
    }

    @Override
    public String toString() {
        return "Users{" +
                "userid=" + userid +
                ", username='" + username + '\'' +
                ", usersex='" + usersex + '\'' +
                '}';
    }
}
package com.qianli.pojo;

import java.util.ArrayList;
import java.util.List;

public class  UsersExample {
    protected String orderByClause;

    protected boolean distinct;

    protected List<Criteria> oredCriteria;

    public UsersExample() {
        oredCriteria = new ArrayList<Criteria>();
    }

    public void setOrderByClause(String orderByClause) {
        this.orderByClause = orderByClause;
    }

    public String getOrderByClause() {
        return orderByClause;
    }

    public void setDistinct(boolean distinct) {
        this.distinct = distinct;
    }

    public boolean isDistinct() {
        return distinct;
    }

    public List<Criteria> getOredCriteria() {
        return oredCriteria;
    }

    public void or(Criteria criteria) {
        oredCriteria.add(criteria);
    }

    public Criteria or() {
        Criteria criteria = createCriteriaInternal();
        oredCriteria.add(criteria);
        return criteria;
    }

    public Criteria createCriteria() {
        Criteria criteria = createCriteriaInternal();
        if (oredCriteria.size() == 0) {
            oredCriteria.add(criteria);
        }
        return criteria;
    }

    protected Criteria createCriteriaInternal() {
        Criteria criteria = new Criteria();
        return criteria;
    }

    public void clear() {
        oredCriteria.clear();
        orderByClause = null;
        distinct = false;
    }

    protected abstract static class GeneratedCriteria {
        protected List<Criterion> criteria;

        protected GeneratedCriteria() {
            super();
            criteria = new ArrayList<Criterion>();
        }

        public boolean isValid() {
            return criteria.size() > 0;
        }

        public List<Criterion> getAllCriteria() {
            return criteria;
        }

        public List<Criterion> getCriteria() {
            return criteria;
        }

        protected void addCriterion(String condition) {
            if (condition == null) {
                throw new RuntimeException("Value for condition cannot be null");
            }
            criteria.add(new Criterion(condition));
        }

        protected void addCriterion(String condition, Object value, String property) {
            if (value == null) {
                throw new RuntimeException("Value for " + property + " cannot be null");
            }
            criteria.add(new Criterion(condition, value));
        }

        protected void addCriterion(String condition, Object value1, Object value2, String property) {
            if (value1 == null || value2 == null) {
                throw new RuntimeException("Between values for " + property + " cannot be null");
            }
            criteria.add(new Criterion(condition, value1, value2));
        }

        public Criteria andUseridIsNull() {
            addCriterion("userid is null");
            return (Criteria) this;
        }

        public Criteria andUseridIsNotNull() {
            addCriterion("userid is not null");
            return (Criteria) this;
        }

        public Criteria andUseridEqualTo(Integer value) {
            addCriterion("userid =", value, "userid");
            return (Criteria) this;
        }

        public Criteria andUseridNotEqualTo(Integer value) {
            addCriterion("userid <>", value, "userid");
            return (Criteria) this;
        }

        public Criteria andUseridGreaterThan(Integer value) {
            addCriterion("userid >", value, "userid");
            return (Criteria) this;
        }

        public Criteria andUseridGreaterThanOrEqualTo(Integer value) {
            addCriterion("userid >=", value, "userid");
            return (Criteria) this;
        }

        public Criteria andUseridLessThan(Integer value) {
            addCriterion("userid <", value, "userid");
            return (Criteria) this;
        }

        public Criteria andUseridLessThanOrEqualTo(Integer value) {
            addCriterion("userid <=", value, "userid");
            return (Criteria) this;
        }

        public Criteria andUseridIn(List<Integer> values) {
            addCriterion("userid in", values, "userid");
            return (Criteria) this;
        }

        public Criteria andUseridNotIn(List<Integer> values) {
            addCriterion("userid not in", values, "userid");
            return (Criteria) this;
        }

        public Criteria andUseridBetween(Integer value1, Integer value2) {
            addCriterion("userid between", value1, value2, "userid");
            return (Criteria) this;
        }

        public Criteria andUseridNotBetween(Integer value1, Integer value2) {
            addCriterion("userid not between", value1, value2, "userid");
            return (Criteria) this;
        }

        public Criteria andUsernameIsNull() {
            addCriterion("username is null");
            return (Criteria) this;
        }

        public Criteria andUsernameIsNotNull() {
            addCriterion("username is not null");
            return (Criteria) this;
        }

        public Criteria andUsernameEqualTo(String value) {
            addCriterion("username =", value, "username");
            return (Criteria) this;
        }

        public Criteria andUsernameNotEqualTo(String value) {
            addCriterion("username <>", value, "username");
            return (Criteria) this;
        }

        public Criteria andUsernameGreaterThan(String value) {
            addCriterion("username >", value, "username");
            return (Criteria) this;
        }

        public Criteria andUsernameGreaterThanOrEqualTo(String value) {
            addCriterion("username >=", value, "username");
            return (Criteria) this;
        }

        public Criteria andUsernameLessThan(String value) {
            addCriterion("username <", value, "username");
            return (Criteria) this;
        }

        public Criteria andUsernameLessThanOrEqualTo(String value) {
            addCriterion("username <=", value, "username");
            return (Criteria) this;
        }

        public Criteria andUsernameLike(String value) {
            addCriterion("username like", value, "username");
            return (Criteria) this;
        }

        public Criteria andUsernameNotLike(String value) {
            addCriterion("username not like", value, "username");
            return (Criteria) this;
        }

        public Criteria andUsernameIn(List<String> values) {
            addCriterion("username in", values, "username");
            return (Criteria) this;
        }

        public Criteria andUsernameNotIn(List<String> values) {
            addCriterion("username not in", values, "username");
            return (Criteria) this;
        }

        public Criteria andUsernameBetween(String value1, String value2) {
            addCriterion("username between", value1, value2, "username");
            return (Criteria) this;
        }

        public Criteria andUsernameNotBetween(String value1, String value2) {
            addCriterion("username not between", value1, value2, "username");
            return (Criteria) this;
        }

        public Criteria andUsersexIsNull() {
            addCriterion("usersex is null");
            return (Criteria) this;
        }

        public Criteria andUsersexIsNotNull() {
            addCriterion("usersex is not null");
            return (Criteria) this;
        }

        public Criteria andUsersexEqualTo(String value) {
            addCriterion("usersex =", value, "usersex");
            return (Criteria) this;
        }

        public Criteria andUsersexNotEqualTo(String value) {
            addCriterion("usersex <>", value, "usersex");
            return (Criteria) this;
        }

        public Criteria andUsersexGreaterThan(String value) {
            addCriterion("usersex >", value, "usersex");
            return (Criteria) this;
        }

        public Criteria andUsersexGreaterThanOrEqualTo(String value) {
            addCriterion("usersex >=", value, "usersex");
            return (Criteria) this;
        }

        public Criteria andUsersexLessThan(String value) {
            addCriterion("usersex <", value, "usersex");
            return (Criteria) this;
        }

        public Criteria andUsersexLessThanOrEqualTo(String value) {
            addCriterion("usersex <=", value, "usersex");
            return (Criteria) this;
        }

        public Criteria andUsersexLike(String value) {
            addCriterion("usersex like", value, "usersex");
            return (Criteria) this;
        }

        public Criteria andUsersexNotLike(String value) {
            addCriterion("usersex not like", value, "usersex");
            return (Criteria) this;
        }

        public Criteria andUsersexIn(List<String> values) {
            addCriterion("usersex in", values, "usersex");
            return (Criteria) this;
        }

        public Criteria andUsersexNotIn(List<String> values) {
            addCriterion("usersex not in", values, "usersex");
            return (Criteria) this;
        }

        public Criteria andUsersexBetween(String value1, String value2) {
            addCriterion("usersex between", value1, value2, "usersex");
            return (Criteria) this;
        }

        public Criteria andUsersexNotBetween(String value1, String value2) {
            addCriterion("usersex not between", value1, value2, "usersex");
            return (Criteria) this;
        }
    }

    public static class Criteria extends GeneratedCriteria {

        protected Criteria() {
            super();
        }
    }

    public static class Criterion {
        private String condition;

        private Object value;

        private Object secondValue;

        private boolean noValue;

        private boolean singleValue;

        private boolean betweenValue;

        private boolean listValue;

        private String typeHandler;

        public String getCondition() {
            return condition;
        }

        public Object getValue() {
            return value;
        }

        public Object getSecondValue() {
            return secondValue;
        }

        public boolean isNoValue() {
            return noValue;
        }

        public boolean isSingleValue() {
            return singleValue;
        }

        public boolean isBetweenValue() {
            return betweenValue;
        }

        public boolean isListValue() {
            return listValue;
        }

        public String getTypeHandler() {
            return typeHandler;
        }

        protected Criterion(String condition) {
            super();
            this.condition = condition;
            this.typeHandler = null;
            this.noValue = true;
        }

        protected Criterion(String condition, Object value, String typeHandler) {
            super();
            this.condition = condition;
            this.value = value;
            this.typeHandler = typeHandler;
            if (value instanceof List<?>) {
                this.listValue = true;
            } else {
                this.singleValue = true;
            }
        }

        protected Criterion(String condition, Object value) {
            this(condition, value, null);
        }

        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
            super();
            this.condition = condition;
            this.value = value;
            this.secondValue = secondValue;
            this.typeHandler = typeHandler;
            this.betweenValue = true;
        }

        protected Criterion(String condition, Object value, Object secondValue) {
            this(condition, value, secondValue, null);
        }
    }
}

测试类

package com.qianli.test;

import com.qianli.pojo.Users;
import com.qianli.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test03 {
    @Test
   public void add(){
        ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = (UserService) app.getBean("userService");
        Users users=new Users();
        users.setUsername("华为");
        users.setUsersex("女");
        userService.add(users);
    }
}

数据库

image.png

JAVA 全系列/第六阶段:项目管理与SSM框架/Spring 21759楼
JAVA 全系列/第一阶段:JAVA 快速入门/变量、数据类型、运算符 21760楼

data = load_breast_cancer()
X, y = scale(data['data'][:, :2]), data['target']
# 求出两个维度对应的数据在逻辑回归算法下的最优解
lr = LogisticRegression(fit_intercept=False)
lr.fit(X, y)
# 分别把两个维度所对应的参数 W1 和 W2 取出来
theta1 = lr.coef_[0, 0]
theta2 = lr.coef_[0, 1]
print(theta1, theta2)


# 已知 W1 和 W2 的情况下,传进来数据的 X,返回数据的 y_predict
def p_theta_function(features, w1, w2):
    z = w1 * features[0] + w2 * features[1]
    return 1 / (1 + np.exp(-z))
    
def loss_function(samples_features, samples_labels, w1, w2):
    result = 0
    # 遍历数据集中的每一条样本,并且计算每条样本的损失,加到 result 身上得到整体的数据集损失
    for features, label in zip(samples_features, samples_labels):
        # 这是计算一条样本的 y_predict
        p_result = p_theta_function(features, w1, w2)
        loss_result = -1 * label * np.log(p_result) - (1 - label) * np.log(1 - p_result)
        result += loss_result
        return result


theta1_space = np.linspace(theta1 - 0.6, theta1 + 0.6, 50)
theta2_space = np.linspace(theta2 - 0.6, theta2 + 0.6, 50)
result1_ = np.array([loss_function(X, y, i, theta2) for i in theta1_space])
result2_ = np.array([loss_function(X, y, theta1, i) for i in theta2_space])

plt.show()
z = w1 * features[0] + w2 * features[1]

features最终传入的是x,w1对应的是x的第一列,w2对应的是x的第二列。应该是features[:,0],为什么写成【0】

人工智能/第六阶段:机器学习-线性分类/逻辑回归 21762楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637