SpringBoot入门案例

项目说明

  • 用SpringBoot重新搭建以前的SSM项目。
  • 通用Mapper的使用

数据库准备

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名称',
  `birthday` datetime(0) NULL DEFAULT NULL COMMENT '生日',
  `sex` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别',
  `address` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 57 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (41, 'the loneliest', '2018-02-27 17:47:08', '男', '北京');
INSERT INTO `user` VALUES (42, '王中王', '2018-03-02 15:09:37', '女', '湖北武汉');
INSERT INTO `user` VALUES (45, '马小玲', '2018-03-04 12:04:06', '男', '北京金燕龙');
INSERT INTO `user` VALUES (46, '王大爷', '2018-03-07 17:37:26', '男', '');
INSERT INTO `user` VALUES (48, '小猪佩奇', '2018-03-08 11:44:00', '女', '北京修正');
INSERT INTO `user` VALUES (53, '赵老头', '2020-01-29 12:53:16', '男', '广州市三星区毛遂路19号');
INSERT INTO `user` VALUES (54, '老六', '2020-01-29 12:51:46', '男', '德阳市高新区步行路02号');
INSERT INTO `user` VALUES (56, '老六', '2020-02-22 21:28:55', '女', '湖南长沙');

新建maven工程

  • 新建maven工程,名称为SpringBoot_SSM,不要有父工程。
  • 注意:不要勾选Create from archetype

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cncs</groupId>
    <artifactId>SpringBoot_SSM</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.0.6.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

整合SpringMVC

在SpringBoot全局属性配置文件中application.yaml修改相关属性。

修改端口

server:
  port: 9090
  servlet:
    path: "*.do"

设置访问拦截规则

server:
  servlet:
    path: "*.do"

设置日志记录级别

日志级别有5种:INFO,WARN,ERROR,DEBUG,TRACE

logging:
  level:
    com.cncs: debug
    org.springframework: debug

访问静态资源

静态资源默认读取路径:

在这里插入图片描述

从图中可以看见默认读取的目录有:/META-INF/resources/,/resources/, /static/, /public/

也就是说只要在/resources/目录下新建这其中任何一个目录,再将静态资源放入其中即可。不过,现在流行前后的分离,这种方法不再经常使用。

在这里插入图片描述

配置拦截器

在使用springmvc.xml配置拦截器的方法是:

    <mvc:interceptors>
        <!--        配置第一个拦截器-->
        <mvc:interceptor>
            <mvc:mapping path="/user/**"/>
            <bean class="com.cncs.interceptor.MyInterceptor1"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

在SpringBoot中该如何配置拦截器?通过实现WebMvcConfigurer并添加@Configuration注解来实现自定义部分SpringMVC配置。

(1)定义一个拦截器MyInterceptor

public class MyInterceptor implements HandlerInterceptor {

    private final Logger log= LoggerFactory.getLogger(MyInterceptor.class);//使用日志记录

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

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

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

(2)定义一个配置类MvcConfig,注册拦截器

  • 使用@Configuration注解标识它是一个配置类

  • 重写addInterceptors()方法注册拦截器,类似于xml中配置一个拦截器

  • 为拦截器添加拦截规则

@Configuration
public class MvcConfig implements WebMvcConfigurer {

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

执行结果

在这里插入图片描述

其中包含的内容:日期 时间 日志级别 进程号 线程号 记录的类 日志输出内容

PS1:要配置其它组件,只要重写相关的方法即可,也是类似的过程,如下图。

在这里插入图片描述

整合连接池

(1)在pom.xml中引入jdbc启动器

<!--jdbc的启动器,默认使用HikariCP连接池-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--不要忘记数据库驱动,因为springboot不知道我们使用的什么数据库,这里选择mysql-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

(2)在SpringBoot中会自动引入一个连接池HikariCP,它的速度非常快。

在这里插入图片描述

(3)在application.yaml中配置连接信息

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql:///test
    username: root
    password: 123456

更多连接池可以从OSCHINA查看:点击TP

整合MyBatis

不使用通用Mapper

(1)在pom.xml中引入mybatis的启动器,因为SpringBoot官方没有给mybatis写启动器,所以mybatis自己写了一个启动器,第三方自己写的启动器的命名方式都是这种格式。

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

(2)配置MyBatis

mybatis:
	# mybatis pojo包别名扫描
	type-aliases-package: com.cncs.pojo
	# 使用驼峰命名方式
  	configuration:
  	   map-underscore-to-camel-case: true
	# mapper.xml文件位置,如果没有映射文件,请注释掉
	# mapper-locations: mappers/*.xml
	

(3)定义一个UserMapper,需要注意,这里没有配置mapper接口扫描包,因此我们需要给每一个Mapper接口添加@Mapper注解,才能被识别。

@Mapper
public interface UserMapper{
}

(4)为Spring Boot 启动类添加扫描包,一定要注意注解@MapperScan 引入的包

@SpringBootApplication
@MapperScan("com.cncs.mapper")
public class UserApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserApplication.class,args);
    }
}

通用Mapper

概念

通用Mapper都可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法。

极其方便的使用MyBatis单表的增删改查。

支持单表操作,不支持通用的多表联合查询。

github地址:点击传送

SpringBoot集成

(1)在pom.xml中引入通用Mapper的启动类(作者为自己的插件编写了启动器)

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

(2)重新配置MyBatis,这里通用Mapper已经配置好了其他配置,默认使用驼峰命名方式。

mybatis:
	# mybatis pojo包别名扫描
	type-aliases-package: com.cncs.pojo

(3)修改UserMapper,删除@Mapper注解

  • 继承一个tk的Mapper
public interface UserMapper extends Mapper<User> {
}

定义User实体类

这里需要对原先的User类添加一些注解。

@Data
@Table(name = "user") //表名
public class User implements Serializable {

    @Id
    //@KeySql(useGeneratedKeys = true) //主键回显,标识主键自增
    @GeneratedValue(generator = "JDBC")
    private Integer id;

    private String username;

    private Date birthday;

    private String sex;

    private String address;

    @Transient//瞬时的,不会被持久化到数据库
    private String note; //备注
}

注解说明

  • 表名默认使用类名,驼峰转下划线(只对大写字母进行处理),如**UserInfo默认对应的表名为user_info**。
  • 表名可以使用**@Table(name = "tableName")**进行指定,对不符合第一条默认规则的可以通过这种方式指定表名.
  • 字段默认和**@Column**一样,都会作为表字段,表字段默认为Java对象的Field名字驼峰转下划线形式.
  • 可以使用**@Column(name = "fieldName")**指定不符合第3条规则的字段名
  • 使用**@Transient**注解可以忽略字段,添加该注解的字段不会作为表字段使用.
  • 建议一定是有一个**@Id**注解作为主键的字段,可以有多个@Id注解的字段作为联合主键.
  • 如果是MySQL的自增字段,加上**@GeneratedValue(generator = "JDBC")**即可,还可返回自增长的主键。

(4)测试通用Mapper

(4.1)引入test启动器

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

(4.2)在UserMapper接口右键创建测试类

在这里插入图片描述

(4.3)编写UserMapperTest测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testQuery(){
        User user = userMapper.selectByPrimaryKey(41);
        System.out.println(user);
    }
}

(5)删除多余的启动类,因为通用mapper已经帮助我们引入了相关启动器。

整合事务

在引入jdbc启动类时,就已经配置好了事务,只需要使用@Transactional注解即可。

IUserService

public interface IUserService {
    User queryById(Integer id);

    void insertUser(User user);
}

UserServiceImpl

@Service
public class UserServiceImpl  implements IUserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public User queryById(Integer id) {
        return userMapper.selectByPrimaryKey(id);
    }

    @Override
    @Transactional //开启事务支持
    public void insertUser(User user) {
        userMapper.insert(user);
    }
}

测试

编写UserController

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private IUserService userService;

    //@GetMapping("/hello.do")
    @RequestMapping(value = "{id}")
    public User hello(@PathVariable(name = "id")Integer id){
        //System.out.println("hello is running...");
        //log.warn("hello is running...");
        User user = userService.queryById(id);
        //return "hello SpringBoot !";
        return user;
    }
}

浏览器输入http://localhost:9090/user/45

页面随之显示

在这里插入图片描述

通用Mapper问题

***PS1:使用通用Mapper查询遇到问题?***点击传送

Over

项目完整目录结构

在这里插入图片描述

application.yaml全部配置

server:
  port: 9090
  servlet:
    path: /
logging:
  level:
    com.cncs: debug
#    org.springframework: debug
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql:///test
    username: root
    password: 123456
mybatis:
  #  configuration:
  #    map-underscore-to-camel-case: true
  type-aliases-package: com.cncs.pojo

参考博客

Spring boot 集成 通用 Mapper

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值