使用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);
}
}
完成!
此篇博客仅用于个人学习记录,非教程!