使用springboot实现ssm框架的相关功能(个人学习记录)

使用maven创建项目,不使用骨架。创建完成后,在pom.xml文件中将springboot作为父工程。

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
    </parent>

然后引入web启动器依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

引入lombok插件的依赖,这款插件可以为开发提供便利

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

创建启动类并写入如下代码,添加如下注解:

@SpringBootApplication
public class BootDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(BootDemoApplication.class);
    }
}

运行

创建一个数据库,并在代码中创建一个与数据库表中相对应的pojo类,在这里我们的pojo类如下所示:

@Data

public class User {
   
    private Long id;
    private String userName;
    private String password;
    private String name;
    private Integer age;
    //1为男性2为女性
    private Integer sex;
    private Date birthday;

}

注意,在这个类中,我们并没有添加给出set和get方法,而是在类上添加了Data注解,这个注解可以为我们生成set get方法,重写toString方法,这只是lombok插件常用功能之一。

现在,我们引入mybatis启动器和连接池的依赖,在此我们使用HikariCP连接池。由于spirngboot已经默认支持了HikariCP连接池,所以我们不需要再单独引入,而是直接引入spirngboot所提供的启动器,如下所示:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

接下来引入mybatis启动器如下图所示:

<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

此启动器并不是由springboot提供,所以要自己手动管理版本。

我们在这里使用的数据库为mysql,所以引入如下依赖:

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

因为此次小练习我们只对单表进行操作,所以使用通用mapper,引入依赖

<dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.0.3</version>
        </dependency>

我们可以发现,通用mapper已经包含了mybatis启动器和springboot给出的jdbc启动器,所以在引入通用mapper启动器依赖之后,应将mybatis启动器依赖和springboot所提供的启动器依赖删除。

记得配置application.yaml文件,这次练习我的配置如下(因为通用mapper会将mybatis的驼峰命名法自动开启,所以配置如下:

server:
  servlet:
    path: "/"
  port: 8088
logging:
  level:
    cn.itcast: debug
    #org.springframework: debug
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springbootssm?characterEncoding=utf-8
    username: root
    password: 123


mybatis:
  #configuration:
    #map-underscore-to-camel-case: true
  type-aliases-package: cn.itcast.pojo
  #mapper-locations: mapper/*.xml

为了方便测试,我们引入如下依赖:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

至此,本次小练习的pom.xml文件已经完全配置好,不再需要改动

现在配置一个拦截器,这里仅演示拦截器如何配置,以后可对其进行修改和改进

@Slf4j
public class MyInterceptor implements HandlerInterceptor{

    //private static final Logger log = (Logger) LoggerFactory.getLogger(MyInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.debug("preHandle method is running");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        log.debug("postHandle method is running");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        log.debug("afterCompletion method is running");
    }
}

首先写一个拦截器,这里采用日志进行输出。注意,在此类中,我注释掉了创建Logger对象的语句,原因是我在此拦截器类上添加了@Slf4j的注解(lombok的常用功能),这个注解会帮助我们自动创建Logger对象并命名为log,写好拦截器我们要对其进行配置,因为没有了.xml文件,所以我们使用Java类来进行配置。创建配置类并实现WebMvcConfigurer接口,在这里我们设置为对所有路径都进行拦截,如下:

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
    }
}

记得在此类上添加@Configuration注解,拦截器就配置好了。

现在我们的练习还缺少web,service和dao层,首先写dao层,因为使用了通用mapper,所以创建一个mapper接口并继承通用mapper给出的mapper类,并在泛型中传入相关的pojo类,这样相应的增删改查方法就实现了,代码如下:

public interface UserMapper extends Mapper<User> {
}

要想对dao层进行使用,我们还需要对pojo进行一些小改动。第一,我们的pojo类名为User(U是大写),而表名为user(u小写),通用mapper并不知道我们的表名是什么,所以,我们应在pojo类上添加相应的注解来声明表名;第二,我们的数据库设置主键为id并且主键自增,所以应添加相应注解告诉通用mapper。改动后的代码如下所示:

@Data
@Table(name = "user")
public class User {
    @Id
    @KeySql(useGeneratedKeys = true)
    private Long id;
    private String userName;
    private String password;
    private String name;
    private Integer age;
    //1为男性2为女性
    private Integer sex;
    private Date birthday;

}

这样dao层就写好了,写一个测试类测试一下。测试类如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void insertTest() {
        User user = new User();
        user.setAge(23);
        user.setId(8888888L);
        user.setName("张三");
        user.setBirthday(new Date());
        int i = userMapper.insert(user);
        //System.out.println(i);
        User user1 = userMapper.selectByPrimaryKey(8888888L);
        System.out.println(user1);
    }
}

不要理会注入的报错,idea会认为这是一个接口无法注入,但是并不影响我们的使用。测试成功!

开始写service层,代码如下:

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
    public User findUser(Long l) {
        return userMapper.selectByPrimaryKey(l);
    }
    @Transactional
    public void insertUser(User user) {
        userMapper.insert(user);
    }
}

原先需要我们自己配置的事务管理这里已经自动配置好了,我们只需要给需要添加事物管理的方法添加@Transactional即可。

最后是web层:

@RequestMapping("user")
@RestController
public class HelloController {
    @Autowired
    private UserService userService;

    @GetMapping("{id}")
    public User findUser(@PathVariable("id") Long id) {
        return userService.findUser(id);
    }

}

完成!

此篇博客仅用于个人学习记录,非教程!

猜你喜欢

转载自blog.csdn.net/Rookie654/article/details/86550617
今日推荐