Springbootを使用して、Webプロジェクトのバックエンド開発を完了します

SpringBootプロジェクトのバックエンド開発プロセス

依存関係をインポートする

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.5.RELEASE</version>
</parent>
<dependencies>
    <!--web启动器-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

エントリクラスを作成する

@SpringBootApplication
public class UserApp {
    
    
    public static void main(String[] args) {
    
    
        //      参数1 当前入口类的类对象  参数2 main函数的参数
        SpringApplication.run(UserApp.class,args);
    }
}

構成ファイルapplication.yamlを作成します

#项目端口号
server:
  port: 9090
  servlet:
  #项目名称:springboot项目访问时候默认没有项目名
    context-path: /UserModel

Springboot統合mybatis

mybatisのコアコンポーネントを管理のために春の工場に引き渡します

依存関係を導入する

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.31</version>
</dependency>
<!--整合mybatis启动器-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.3</version>
</dependency>

daoレイヤー、サービスレイヤーコーディング

リソースディレクトリにmybatis-mapperを作成します

<?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.baizhi.dao.IUserDAO">
    <!--用户注册-->
    <insert id="saveUser" parameterType="com.baizhi.entity.User">
        insert into t_user(id,name,password,sex,photo,birthday,email)
        values (#{user.id},#{user.name},#{user.password},#{user.sex},#{user.photo},#{user.birthday},#{user.email})
    </insert>

    <!--根据用户名称和密码查询用户-->
    <select id="queryUserByNameAndPassword" parameterType="com.baizhi.entity.User" resultType="com.baizhi.entity.User">
        select id,name,password,sex,photo,birthday,email from t_user
    </select>
</mapper>

mybatisのビルド構成情報

server:
  port: 9090
  servlet:
    context-path: /UserModel
    jsp:
      init-parameters:
        development: true
  tomcat:
    uri-encoding: UTF-8
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/upload?useUnicode=true&characterEncoding=UTF8&serverTimezone=UTC&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
  mvc:
    view:
      prefix: /
      suffix: .jsp
#post表单乱码提交
  http:
    encoding:
      charset: utf-8
#文件上传
  servlet:
    multipart:
      enabled: true
      max-file-size: 1MB
      location: D://Uninstall
mybatis:
  type-aliases-package: com.baizhi.entity
  mapper-locations: classpath:com/baizhi/mapper/*.xml
#开启mybatis的批处理,提升sql效率
  executor-type: batch

エントリクラスに注釈を追加して、スキャンするパッケージを指定します

@MapperScan(basePackages = "com.baizhi.dao")

xmlを構成するときに、「class **」に「user」という名前のプロパティのゲッターがありません

mybatis会自动识别user对象的值,传到xml文件中,所以需要给对象指定映射。在userDao方法中给user对象添加上@Param注解,可解决这个问题。
int addUser(@Param("user") User user);

Springboot統合jsp

1.jsp解析でサポートされている関連するjarをインポートします

<!--使内嵌的tomcat支持解析jsp-->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<!--引入jsp的支持-->
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

2.ビューリゾルバーを構成します

#添加视图解析器
spring:
  mvc:
    view:
      prefix: /
      suffix: .jsp

3.プラグインから開始するか、アイデアプロジェクトの右上隅にある環境を編集します

4.構成ページのホットデプロイメント

#提供页面热部署
server:
  jsp-servlet:
    init-parameters:
      development: true

dao、サービス、コントローラーのカスタム実装

コントローラは次のように実装されています

/**
 * @RestController: 等价 @Controller + @ResponseBody
 * @RequestMapping: 请求映射,在Spring4.0注解开发中对RequestMapping进行丰富,分别按照请求类型
 *      - @PostMapping   新增
 *      - @GetMapping    查询
 *      - @PutMapping    修改
 *      - @DeleteMapping 删除
 * @RequestParam: 接收表单参数
 */
@RestController
@RequestMapping(value = "/formUserManager")
public class FormUserController {
    
    

    private static final Logger LOGGER= LoggerFactory.getLogger(FormUserController.class);
    @Autowired
    IUserService userService;
	//参数multipartFile是一个文件
    @PostMapping(value = "/registerUser")
    public User registerUser(User user,
        @RequestParam(value = "multipartFile",required = false) MultipartFile multipartFile) throws IOException{
    
    
        //对文件进行初步处理,获取前缀,后缀并进行打印
        if(multipartFile!=null){
    
    
            String fileName=multipartFile.getOriginalFilename();
            String suffix=fileName.substring(fileName.lastIndexOf("."));
            File tmpFile = File.createTempFile(fileName.substring(0,fileName.lastIndexOf(".")),suffix);
            System.out.println(tmpFile.getName());
            tmpFile.delete();
        }
        userService.saveUser(user);
        return user;
    }

    @PostMapping(value = "/userLogin")
    public User userLogin(User user){
    
    
        return userService.queryUserByNameAndPassword(user);
    }

    @PutMapping(value = "/updateUser")
    public void updateUser(User user,
                           @RequestParam(value = "multipartFile",required = false) MultipartFile multipartFile) throws IOException{
    
    
        if(multipartFile!=null){
    
    
            String fileName=multipartFile.getOriginalFilename();
            String suffix=fileName.substring(fileName.lastIndexOf("."));
            File tmpFile = File.createTempFile(fileName.substring(0,fileName.lastIndexOf(".")),suffix);
            System.out.println(tmpFile.getName());
            tmpFile.delete();
        }
        userService.updateUser(user);
    }

    @DeleteMapping(value = "/deleteUserByIds")
    public void delteUserByIds(@RequestParam(value = "ids") Integer[] ids){
    
    
        userService.deleteByUserIds(ids);
    }

    @GetMapping(value = "/queryUserByPage")
    public List<User> queryUserByPage(@RequestParam(value = "page",defaultValue = "1") Integer pageNow,
                                      @RequestParam(value = "rows",defaultValue = "10") Integer pageSize,
                                      @RequestParam(value = "column",required = false) String column,
                                      @RequestParam(value = "value",required = false) String value){
    
    
        HashMap<String, Object> results = new HashMap<>();
        results.put("total",userService.queryUserCount(column,value));
        results.put("rows",userService.queryUserByPage(pageNow,pageSize,column,value));
        return userService.queryUserByPage(pageNow,pageSize,column,value);
    }

    @GetMapping(value = "/queryUserById")
    public User queryUserById(@RequestParam(value = "id") Integer id){
    
    
        User user = userService.queryUserById(id);
        return user;
    }

}

プロジェクトコントローラーインターフェイステスト

プロジェクトのdao、サービス、およびコントローラーが開発されたら、postmanを使用して自分でテストするか、RestTemplateを使用してプロジェクトをテストできます。

RestTemplateクラスをspringbootのエントリクラスに追加します

@SpringBootApplication
@MapperScans(value ={
    
    
        @MapperScan(basePackages = "com.baizhi.dao")
})
public class UserModelRestApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(UserModelRestApplication.class,args);
    }
    //SpringMVC中自带的一个Rest客户端工具,可以无缝和SpringBoot集成
    @Bean
    public RestTemplate restTemplate(){
    
    
        return new RestTemplate();
    }
}

コントローラのクラスをテストフォルダの下のパッケージにコピーし、元のアノテーションを削除して、springbootテストのアノテーションに置き換えます。コントローラの各メソッドの実装を削除し、メソッドごとに//でコメントアウトします。テストメソッドを書き直します

import static org.junit.Assert.*;
@SpringBootTest(classes = UserApp.class)
@RunWith(SpringRunner.class)
public class FormUserControllerTest {
    
    
    @Autowired
    private RestTemplate restTemplate;
    private String prefix="http://localhost:9090/UserModel/formUserManager";

    //    @PostMapping(value = "/registerUser")
    //    public User registerUser(User user,
    //        @RequestParam(value = "multipartFile",required = false) MultipartFile multipartFile) throws IOException

    //用户注册信息
    @Test
    public void testRegisterUser(){
    
    
        //具体链接
        String url=prefix+"/registerUser";
        //构建表单参数(由于要传递文件所以使用MultiValueMap)
        MultiValueMap<String,Object> formData=new LinkedMultiValueMap<>();
        formData.add("name","王小五1");
        formData.add("password","123456");
        formData.add("sex","true");
        formData.add("birthDay","2018-01-26");
        formData.add("photo","user.png");
        formData.add("email","[email protected]");
        //上传文件信息 (上传的文件名不能为中文,否则出现500异常)
        FileSystemResource fileSystemResource=new FileSystemResource("D:\\桌面壁纸/timg.jpg");
        formData.add("multipartFile",fileSystemResource);
        //提交请求
        User user = restTemplate.postForObject(url, formData, User.class);
        assertNotNull("用户",user);
        System.out.println(user);
    }
    
    //删除用户信息
    @Test
    public void testDelteUserByIds(){
    
    
        String url=prefix+"/deleteUserByIds?ids={ids}";
        HashMap<String,Object> params=new HashMap<>();
        params.put("ids","10,11,12");
        restTemplate.delete(url,params);
    }
    
        @Test
    public void testQueryUserByPage(){
    
    
        String url=prefix+"/queryUserByPage?page={page}&rows={rows}&column={column}&value={value}";
        Map<String,Object> params=new HashMap<>();
        params.put("page",1);
        params.put("rows",5);
        params.put("column","name");
        params.put("value","b");
        restTemplate.getForObject(url,User[].class,params);
    }
    //使用Map,还是MultiValueMap看restTemplate调用方法时所需要的参数,如果使用Map,就要在url上添加传递的参数
}

テストするときは、アイデアのアノテーションによって自動的に生成されたクラスオブジェクトのGetメソッドとSetメソッドに問題がある可能性があることに注意してください。プロパティのGetメソッドとSetメソッドをサービスレイヤーで呼び出せない場合は、対応するGetメソッドとSetメソッドを記述できます。あなた自身。

restTemplateを使用してコントローラーレイヤーインターフェイスをテストする場合は、最初にspringbootエントリクラスを開始する必要があります。そうしないと、接続が拒否されます。接続例外が発生します。

おすすめ

転載: blog.csdn.net/origin_cx/article/details/105234371