Spring Boot使用方法

Spring Boot 七步走。

1.勾选包

Spring Boot是自带TomCat的。

创建Spring Boot工程文件,创建时需要更改资源下载地址,我选择阿里云的这个地址;

而且Spring Boot不需要导包,只需要勾选需要的包,进入后会自动下载(不过第一次非常非常慢!请耐心等待)。常用的需要勾选的包如下

2.修改原始配置文件

2.1.修改spring-boot版本为2.2.6。

 

2.2.修改mysql版本为5.1.38。

2.3.将lombok下面的“true”那一行删掉。

 

2.4.将原有的application配置文件改为.yml后缀。

2.5.注意:后面的java文件全部都要写在自动生成的“项目名+Application”类的下一级,否则不能被读到。

 

2.6.application.yml配置文件内容

spring:
  application:
    name: myspb2
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.133.150:3306/mydemo
    username: root
    password: ok
server:
  port: 9988
mybatis:
  mapper-locations: classpath:mapper/*.xml
  config-location: classpath:mybatis.cfg.xml

3.实体类及配置文件

思路:本次需要用到两表关联查询、动态sql查询,所以建立对应着两张表的两个实体类、两个接口类、两个配置文件。

注:两张表提前已经建立了主外键关系,后面不再赘言。

3.1.实体类1:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Userinfos {
    private long userid;
    private Date birthday;
    private String username;
    private List<Scores> scores;//这是为了后面查询一个用户信息就能带出分数
}

3.2.实体类2:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Scores {
    private long scid;
    private long userid;
    private long score;
}

4.接口dao类

对每个表有几种操作方法(增删改查),每一个方法对应一个配置文件中的sql语句

4.1.用户表对应dao接口类

public interface UserinfosMapper {
    public void addUser(Userinfos user);
    public void deleteUser(long userid);
    public List<Userinfos> findUserByCondit(Userinfos user);//按条件查
}

4.2.分数表对应dao接口类

public interface ScoresMapper {
    public List<Scores> findScoreByUserid(long userid);//查
    public void deleteScoreByUserid(long userid);//删
    public void modfiyScore(Scores scores);//改
    public void addScore(Scores scores);//增
}

5.配置文件

5.1.用mybatis.cfg.xml配置文件给实体类起别名,方便后续使用

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC
        "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <typeAlias type="com.kgc.myspb2.domain.Userinfos" alias="user"></typeAlias>
        <typeAlias type="com.kgc.myspb2.domain.Scores" alias="score"></typeAlias>
    </typeAliases>
</configuration>

5.2.分数表对应的配置文件

从上到下依次是查、增、删、改的sql语句。

为了防止输入错误,文件中的方法名可以复制粘贴。因为上面已经给实体类起过别名了,所以部分方法的属性值/返回值只需要写别名"score"(下面的"user"同理)

<?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.kgc.myspb2.dao.ScoresMapper">
    <select id="findScoreByUserid" parameterType="long" resultType="score">
        select * from scores where userid=#{userid}
    </select>
    <insert id="addScore" parameterType="score">
        insert into scores (userid,score) values (#{userid},#{score})
    </insert>
    <delete id="deleteScoreByUserid" parameterType="long">
        delete from scores where userid=#{userid}
    </delete>
    <update id="modfiyScore" parameterType="score">
        update scores set score=#{score} where userid=#{userid}
    </update>
</mapper>

5.3.用户表对应配置文件

从上到下是增、删、查方法。

查询方法在这里用到了关联查询和动态sql查询:

(1)关联查询:为了让查询用户的结果带上分数表的对应信息,返回值选用resultMap,返回一个名为“user_score”的东西,以“userid”关联到分数表。

(2)动态sql查询:若想查询一个表的所有列很简单,若想按某列为条件查询也很简单,但想要做到任意列为条件排列组合查询就需要写非常多条sql语句(如果一个表有4列,那么条件查询方式就会有16种,也就是需要写16条sql语句才能实现)。动态sql就是简化了这一过程,一个<where>标签中每个<if>标签下的语句都以and连接,如果检索存在就组合语句,如果不存在就当这个条件语句也不存在。

<?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.kgc.myspb2.dao.UserinfosMapper">
    <resultMap id="user_score" type="user">
        <result property="userid" column="userid"></result>
        <collection property="scores" column="userid"
                    select="com.kgc.myspb2.dao.ScoresMapper.findScoreByUserid"></collection>
    </resultMap>
    <insert id="addUser" parameterType="user" useGeneratedKeys="true" keyProperty="userid">
        insert into userinfos (username,birthday) values(#{username},#{birthday})
    </insert>
    <delete id="deleteUser" parameterType="long">
        delete from userinfos where userid=#{userid}
    </delete>
    <select id="findUserByCondit" parameterType="long" resultMap="user_score">
        select * from userinfos
        <where>
            <if test="userid!=0">
                userid=#{userid}
            </if>
            <if test="username!=null">
                and username=#{username}
            </if>
            <if test="birthday!=null">
                and date_format(birthday,'%Y-%m-%d')=date_format(#{birthady},'%Y-%m-%d')
            </if>
        </where>
    </select>
</mapper>

6.用服务类把上面的两表连起来

6.1.服务类接口

增(因为存在主外键,所以增加数据需要传两个参数)、删、改、查的方法。

public interface UserinfosService {
    public void addUserinfo(Userinfos user , Scores scores);
    public void delUserById(long userid);
    public void modifyScores(Scores scores);
    public List<Userinfos> searchUser(Userinfos user);
}

6.2.接口实现类

检索两表对应的dao接口,并调用他们的增删改查方法,合并。

@Service
@Transactional//Spring自动提交事务
public class UserServiceImpl implements UserinfosService {
    @Resource//自动搜索及注入接口
    private UserinfosMapper userinfosMapper;
    @Resource
    private ScoresMapper scoresMapper;

    @Override
    public void addUserinfo(Userinfos user, Scores scores) {
        userinfosMapper.addUser(user);
        scores.setUserid(user.getUserid());//把主表中的主键拿出来填充到外表的外键列(如画图所讲)
        scoresMapper.addScore(scores);
    }

    @Override
    public void delUserById(long userid) {
        //先删从表再删主表
        scoresMapper.deleteScoreByUserid(userid);
        userinfosMapper.deleteUser(userid);
    }

    @Override
    public void modifyScores(Scores scores) {
        scoresMapper.modfiyScore(scores);
    }

    @Override
    public List<Userinfos> searchUser(Userinfos user) {
        return userinfosMapper.findUserByCondit(user);
    }
}

7.控制类

@RestController
public class InitCtrl {
    @Resource
    private UserinfosService userinfosService;

    @RequestMapping("/add")
    public String add(String username,String birthday,long score){

        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Userinfos us = Userinfos.builder().username(username).birthday(sdf.parse(birthday)).build();
            Scores scores = Scores.builder().score(score).build();
            userinfosService.addUserinfo(us,scores);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return "ok";
    }

    @RequestMapping("/del")
    public String del(long userid){
        userinfosService.delUserById(userid);
        return "ok";
    }

    @RequestMapping("/update")
    public String update(long userid,long score){
        Scores scores = Scores.builder().userid(userid).score(score).build();
        userinfosService.modifyScores(scores);
        return "ok";
    }

    @RequestMapping("/find")
    public List<Userinfos> find(
            @RequestParam(required = false,defaultValue = "0")long userid,
            @RequestParam(required = false,defaultValue = "") String username,
            @RequestParam(required = false,defaultValue = "") String birthday){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Userinfos userinfos = new Userinfos();
        userinfos.setUserid(userid);
        if(!username.trim().equals("")){
            userinfos.setUsername(username);
        }
        try {
            if (!birthday.trim().equals("")){
                userinfos.setBirthday(sdf.parse(birthday));
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return userinfosService.searchUser(userinfos);
    }
}

注:

最后别忘了@MapperScan,把dao包也给Spring看一下。然后就可以运行这个main方法了。

 最终在网页使用增删改查方法:

localhost:9988(你写的端口号是多少就是多少)/update?(想用哪个方法就写哪个注释)userid=1(这个方法有几个参数就写几个参数,之间用&连接)&score=80

除了查询方法,其他方法执行后若返回“ok”,查看数据库是否已经完成了操作,如果已经完成那就成功了。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Woovong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值