Spring Boot实战演练Demo

Posted 格子衫111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot实战演练Demo相关的知识,希望对你有一定的参考价值。

需求:使用SSM+SpringBoot 实现 账户 的CRUD功能

数据库准备:

CREATE TABLE `account` ( 
	`id` int(11) NOT NULL AUTO_INCREMENT, 
	`name` varchar(32) DEFAULT NULL, 
	`money` double DEFAULT NULL, 
	PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

insert into `account`(`id`,`name`,`money`) values (1,'tom',1000), (2,'jerry',1000);

(1)创建springboot工程





next —> finish
删除以下多余目录

删除后目录

(2)导入pom.xml

        <!--引入阿里巴巴数据库连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.3</version>
        </dependency>

为了扫描mapper可做下面两个操作


SpringboottestApplication.java

(3) 配置数据库信息


application.yml

## 数据库连接信息
spring:
  datasource:
    name: druid
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=UTC
    username: root
    password: zhangwt

IDEA连接数据库



(4) Free Mybatis plugin插件安装(新MyBatisX)

安装目的:自动生成Mybatis相关代码
https://plugins.jetbrains.com/plugin/8321-free-mybatis-plugin/versions/stable/74577这个插件已经闭源了,版本更新截止到2019.12.18,可以用上面链接下载旧版本。

也可以使用插件MyBatisX代替,二者选其一

MyBatisX插件在线安装


Free Mybatis plugin插件本地安装
将 Free Mybatis plugin 下载在本地磁盘,然后导入安装



注:为节省时间,后面两个步骤代码可使用Mybatis-X 或 Free Mybatis plugin插件生成
Mybatis-X生成步骤


next

生成后结构如下

AccountMapper.java

/**
* @Entity com.zwt.domain.Account
*/
public interface AccountMapper extends BaseMapper<Account> 



但是,Mapper文件中并没有自动生成单表操作的方法,为了方便,还是使用Free Mybatis plugin插件生成好一点

Free Mybatis plugin生成步骤


生成后结构如下:

(5)Account 实体类编写

/**
 * account
 * @author 
 */
@Data
public class Account implements Serializable 
    private Integer id;

    private String name;

    private Double money;

    private static final long serialVersionUID = 1L;

(6)AccountMapper 编写及Mapper文件

AccountMapper.java

public interface AccountMapper 
    int deleteByPrimaryKey(Integer id);

    int insert(Account record);

    int insertSelective(Account record);

    Account selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(Account record);

    int updateByPrimaryKey(Account record);

    List<Account> queryAll();

AccountMapper.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.zwt.mapper.AccountMapper">
  <resultMap id="BaseResultMap" type="com.zwt.pojo.Account">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="money" jdbcType="DOUBLE" property="money" />
  </resultMap>
  <sql id="Base_Column_List">
    id, `name`, money
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from account
    where id = #id,jdbcType=INTEGER
  </select>
  <select id="queryAll" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from account
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
    delete from account
    where id = #id,jdbcType=INTEGER
  </delete>
  <insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.zwt.pojo.Account" useGeneratedKeys="true">
    insert into account (`name`, money)
    values (#name,jdbcType=VARCHAR, #money,jdbcType=DOUBLE)
  </insert>
  <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.zwt.pojo.Account" useGeneratedKeys="true">
    insert into account
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="name != null">
        `name`,
      </if>
      <if test="money != null">
        money,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="name != null">
        #name,jdbcType=VARCHAR,
      </if>
      <if test="money != null">
        #money,jdbcType=DOUBLE,
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.zwt.pojo.Account">
    update account
    <set>
      <if test="name != null">
        `name` = #name,jdbcType=VARCHAR,
      </if>
      <if test="money != null">
        money = #money,jdbcType=DOUBLE,
      </if>
    </set>
    where id = #id,jdbcType=INTEGER
  </update>
  <update id="updateByPrimaryKey" parameterType="com.zwt.pojo.Account">
    update account
    set `name` = #name,jdbcType=VARCHAR,
      money = #money,jdbcType=DOUBLE
    where id = #id,jdbcType=INTEGER
  </update>
</mapper>

(7)配置XML映射文件路径

在项目中编写的XML映射文件,Spring Boot并无从知晓,所以无法扫描到该自定义编写的XML配置文件,还必须在全局配置文件application.properties中添加MyBatis映射文件路径的配置,同时需要添加实体类别名映射路径,示例代码如下

application.yml

mybatis: 
	#配置MyBatis的xml配置文件路径 
	mapper-locations: classpath:mapper/*.xml 
	#配置XML映射文件中指定的实体类别名路径 
	type-aliases-package: com.zwt.pojo

(8)AccountService接口及实现类编写

AccountService.java

public interface AccountService 
    /**
     * 查询所有
     * @return
     */
    List<Account> queryAll();

    /**
     * 通过ID查询
     * @param id
     * @return
     */
    Account findById(Integer id);

    /**
     * 新增
     * @param Account
     */
    void insert(Account Account);

    /**
     * 通过ID删除
     * @param id
     */
    void deleteById(Integer id);

    /**
     * 修改
     * @param Account
     */
    void update(Account Account);

AccountServiceImpl.java

@Service
public class AccountServiceImpl implements AccountService 

    @Autowired
    private com.zwt.mapper.AccountMapper AccountMapper;

    @Override
    public List<Account> queryAll() 
        return AccountMapper.queryAll();
    

    @Override
    public Account findById(Integer id) 
        return AccountMapper.selectByPrimaryKey(id);
    

    @Override
    public void insert(Account Account) 
        //AccountMapper.insert(Account);        //将除id所有的列都拼SQL
        AccountMapper.insertSelective(Account); //只是将不为空的列才拼SQL
    

    @Override
    public void deleteById(Integer id) 
        AccountMapper.deleteByPrimaryKey(id);
    

    @Override
    public void update(Account Account) 
        AccountMapper.updateByPrimaryKeySelective(Account);
    

(9)AccountController编写

AccountController.java

@RestController
@RequestMapping("/account")
public class AccountController 

    @Autowired
    private AccountService accountService;

    /**
     * restful格式进行访问
     * 查询:GET
     * 新增: POST
     * 更新:PUT
     * 删除: DELETE
     */
    /**
     * 查询所有
     * @return
     */
    @GetMapping("/query")
    public List<Account> queryAll()
        return accountService.queryAll();
    

    /**
     * 通过ID查询
     */
    @GetMapping("/query/id")
    public Account queryById(@PathVariable Integer id)
        return accountService.findById(id);
    

    /**
     * 删除
     * @param id
     * @return
     */
    @DeleteMapping("/delete/id")
    public String delete(@PathVariable Integer id)
        accountService.deleteById(id);
        return "删除成功";
    

    /**
     * 新增
     * @param Account
     * @return
     */
    @PostMapping("/insert")
    public String insert(Account Account)
        accountService.insert(Account);
        return "新增成功";
    

    /**
     * 修改
     * @param Account
     * @return
     */
    @PutMapping("/update")
    public String update(Account Account)
        accountService.update(Account);
        return "修改成功";
    

使用postman测试
查询


删除

新增
修改

(10)Spring Boot项目部署

需求:将Spring Boot项目使用maven指令打成jar包并运行测试
1、修改端口号
端口号一般不使用默认的
application.yml

##服务器配置
server:
  port: 8090

2、添加打包组件

<build>
        <plugins>
            <plugin>
                <!-- 打jar包时如果不配置该插件,打出来的jar包没有清单文件 -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>

    </build>

需要添加打包组件将项目中的资源、配置、依赖包打到一个jar包中;可以使用maven的 package ;

双击package

jar包一般在项目根目录的 target文件下

3、部署运行
打开powershell 窗口(Windows10系统)

1、在当前文件夹,然后点击左上角的“文件”菜单。

2、接下来在打开的文件下拉菜单中找到“打开Windows Powershell”菜单项,点击“以管理员身份打开Windows Powershell”菜单项即可。


在windows下模拟Linux运行以下命令

java -jar 包名

java -jar .\\springboottest-0.0.1-SNAPSHOT.jar

这个和在IDEA中启动项目类似
注意,此处有可能运行报错,原因为部署的环境和pom.xml中指定的JDK版本不一致

pom.xml

     <properties>
        <java.version>11</java.version>
    </properties>

解决办法:

  • 方法1:将pom.xml中的版本号修改为Linux中对应的版本。Clean后重新Package打包。
  • 方法2:将Linux中的jdk卸载,然后重新安装pom.xml中定义对应的jdk版本即可。

4、验证

至此,整个SpringBoot Demo演练完毕,

我已将源码上传,可以在资源链接中下载
https://download.csdn.net/download/u012660464/86510033

以上是关于Spring Boot实战演练Demo的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 揭秘与实战 消息队列篇 - RabbitMQ

Spring Boot 揭秘与实战 数据缓存篇 - 快速入门

Spring Boot 揭秘与实战 数据存储篇 - 声明式事务管理

Sping Boot入门到实战之入门篇:Spring Boot属性配置

微服务架构实战篇:Spring boot2.x + Guava 并使用RateLimiter实现秒杀限流demo

Spring boot 实战指南:整合Elasticsearchswaggerredismq