• 注解方式整合mybatis & SpringBoot整合分页助手 & SpringBoot整合JSP


    1.注解方式整合mybatis

    1.1 创建District的Mapper接口

    public interface DistrictMapper {
    
        @Select("select * from district")
        List<District> findAll();
    
        @Select("select * from district where id= #{id}")
        District findOneById(@Param("id") Integer id);
    }
    
     @Insert("insert into district(id, name)" + "values (#{id}, #{name})")
        @Options(useGeneratedKeys = true, keyColumn = "id")
        int insertOne(@Param("id") Integer id, @Param("name") String name);
    

      

    @Update("update district set name=#{name} where id=#{id}")
        int updateOne(@Param("id") Integer id, @Param("name") String name);
    

      

    1.2 添加mybatis注解

    针对增删改查:@Insert,@Delete,@Update,@Select

    1.2.1 常用注解说明

    • @Mapper

    可以给接口自动生成一个实现类,让spring对mapper接口的bean进行管理,并且可以省略去写复杂的xml文件。

    • @Options

    配置映射语句的属性。例如:@Options(useGeneratedKeys = true, keyColumn = "id"):指定表的自增主键并自动绑定到实体类对象。

    • @Result

    修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰。

    • @Param

    如果你的映射方法的形参有多个,这个注解使用在映射方法的参数上就能为它们取自定义名字。若不给出自定义名字,多参数(不包括 RowBounds 参数)则先以 "param" 作前缀,再加上它们的参数位置作为参数别名。例如 #{param1}, #{param2}。

    • @Select、@Delete、@Insert、@Update

    这四个注解分别代表将会被执行的 SQL 语句。它们用字符串数组(或单个字符串)作为参数。如果传递的是字符串数组,字符串之间先会被填充一个空格再连接成单个完整的字符串。

    还是需要在启动类中添加@MapperScan注解

    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    @MapperScan(basePackages = "com.company.firstspringboot.mapper")
    public class FirstSpringbootApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(FirstSpringbootApplication.class, args);
        }
    
    }
    

      

    在往数据库中添加数据时:出现这样的问题:

     这是因为:在application.yml中要把编码加上

     完整的application.yml

    server:
      port: 8080
      servlet:
        context-path: /
    
    # 连接数据库的信息
    spring:
      datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql:///air?serverTimeZone=UTC&useUnicode=true&characterEncoding=UTF-8
        username: root
        password: 123456
        type: com.alibaba.druid.pool.DruidDataSource
    
    # MyBatis配置
    mybatis:
      # 扫描映射文件
      mapper-locations: classpath:mapper/*.xml
      # 配置别名扫描的包
      type-aliases-package: com.company.firstspringboot.entity
      configuration:
        # 开启驼峰映射配置
        map-underscore-to-camel-case: true
    
    # 查看sql语句
    logging:
      level:
        com.company.firstspringboot: DEBUG
    

      

    1.3 测试,看到执行的sql语句

     在application.yml文件中添加

    # 查看sql语句
    logging:
      level:
        com.company.firstspringboot: DEBUG
    

      

    class DistrictMapperTest extends FirstSpringbootApplicationTests {
    
        @Autowired
        private DistrictMapper mapper;
    
        @Test
        void findAll() {
            List<District> list = mapper.findAll();
            for (District district : list) {
                System.out.println(district);
            }
        }
    
        @Test
        void findOneById() {
            District oneById = mapper.findOneById(5);
            System.out.println(oneById);
        }
    }
    

      可以看到执行的sql语句,其实就是debug模式

        @Test
        void insertOne() {
            int district = mapper.insertOne(10, "秦淮区");
            System.out.println(district);
        }
    

      

        @Test
        void updateOne() {
            int i = mapper.updateOne(9, "雨花台区");
        }
    

      

    2. SpringBoot整合分页助手

    导入依赖

    https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter

    <!--        分页助手pageHelper依赖-->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>1.2.10</version>
            </dependency>
    

      AirMapperTest.java

    import com.company.firstspringboot.FirstSpringbootApplicationTests;
    import com.company.firstspringboot.entity.Air;
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    
    import java.util.List;
    
    class AirMapperTest extends FirstSpringbootApplicationTests {
    
        @Autowired
        private AirMapper airMapper;
    
        @Test
        void findAll() {
            List<Air> all = airMapper.findAll();
            for (Air air : all) {
                System.out.println(air);
            }
        }
    
        @Test
        public void findByPage() {
            // 1.执行分页
            PageHelper.startPage(1, 5);
    
            // 2.执行查询
            List<Air> list = airMapper.findAll();
    
            // 3.封装PageInfo对象
            PageInfo<Air> pageInfo = new PageInfo<>(list);
    
            // 4.输出
            for (Air air : pageInfo.getList()) {
                System.out.println(air);
            }
        }
    }

    3.SpringBoot整合JSP 

     1.需要导入依赖,在pom.xml中

     springboot不推荐使用jsp,所以在spring-boot-starter-web启动器中并没有包括这两个,需要单独引入jstl和tomcat-embed-jasper的依赖支持

    <!--        JSP核心引擎依赖-->
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
            </dependency>
    <!--        JSTL-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
            </dependency>    

     2.创建webapp以及WEB_INF去存放JSP页面

    JspController.java

    package com.company.firstspringboot.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    @Controller
    public class JspController {
        @RequestMapping("/index")
        public ModelAndView index(Model model) {
            model.addAttribute("name", "张三");
            return new ModelAndView("index");
        }
    }

     index.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8"
             pageEncoding="utf-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    
    <html>
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h1>hello ${name}</h1>
    </body>
    </html>
    

      

     3.指定view的前缀和后缀,在application.yml中

    spring:
      mvc:
        # 视图的前缀和后缀
        view:
          prefix: /WEB_INF/
          suffix: .jsp
    

      

     在整合jsp过程中出现了两个问题

    1.出现下面的问题

    因为用的是IDEA,需要特别注意其中一个项目配置,否则可能找不到jsp页面。

    2.只返回了文字,并没有返回页面

    原因分析:@RestController注解相当于@ResponseBody和@Controller合在一起的作用。在使用@RestController注解Controller时,Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。

    包括在Mapping注解使用的同时使用@ResponseBody时也会出现同样的问题。

    解决办法:①去除@ResponseBody或将含有Rest的注解换成对应的原始注解;

                 ②不通过String返回,通过ModelAndView对象返回,上述例子可将return语句换成下面:

    @RestController
    public class JspController {
        @RequestMapping("/index")
        public ModelAndView index(Model model) {
            model.addAttribute("name", "张三");
            return new ModelAndView("index");
        }
    }
    

      在使用ModelAndView对象返回的时候,不需要考虑有没有@ResponseBody类似的注解。

    参考:

    https://juejin.cn/post/6844903993391448072

    https://www.cnblogs.com/myitnews/p/12347191.html

    https://www.cnblogs.com/guo-xu/p/11203740.html

  • 相关阅读:
    Iphone和iPad适配, 横竖屏
    JSONModel
    iPhone socket 编程之BSD Socket篇
    UIImageView 动画 / UIImage 方向
    iOS团队开发者测试
    xcode6以后, 使用.pch
    C# new override
    MVC, MVP, MVVM
    VS2010 VC Project的default Include设置
    centos 7 安装mysql5.6rpm格式197
  • 原文地址:https://www.cnblogs.com/GumpYan/p/14752616.html
Copyright © 2020-2023  润新知