Java阶段二Day16
文章目录
- Java阶段二Day16
- SSM
- SpringBoot
- 简述
- 核心特性
- 创建SpringBoot工程
- 创建工程失败排查
- MyBatis框架-注解管理
- 概述
- MyBatis环境初始化
- 整合MyBatis
- Pojo对象设计
- Dao接口设计
SSM
-
Spring
:Spring是一个轻量级的容器和框架,为开发者提供了一个IoC容器和AOP框架,Spring框架包含很多核心子项目。 -
Spring MVC
:SpringMVC是Spring框架的一个核心子项目,是一个基于MVC设计模式的Web框架,它提供了一系列功能,使得开发者能够快速开发灵活、易于维护的Web应用程序。 -
MyBatis
:MyBatis是基于 Java 的持久层框架,用于和数据库映射,MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的工作。MyBatis通过XML或注解的方式来配置SQL和映射关系,灵活性非常高。
SpringBoot
在传统JAVAEE应用体系中创建一个项目,需要手动添加大量的依赖,还要考虑版本的兼容性,还有繁重的配置、负载的项目部署,会高度影响开发效率,即使是使用Spring进行资源整合,也存在同样的这些问题。
还有就是现在的软件生态应用也已经形成一定的规模,整个软件架构体系在变化,企业对技术的要求也在变化,现在的企业更注重技术的开箱即用,更注重技术在生态圈中的深度融合,更注重轻量级的运维。由此由此spring boot诞生。
简述
Spring Boot是一个全新的Java软件开发框架(很多人现在把它理解为一个脚手架),其设计目的是用来简化Spring项目的初始搭建以及开发过程,并为后面的Spring Cloud 微服务实践提供更加便利条件。该框架使用了特定的注解方式来进行配置,从而使开发人员不再需要大量的xml配置。不再需要大量的手动依赖管理。Spring Boot基于快速构建理念,通过约定大于配置,开箱即用的方式,希望能够在蓬勃发展的快速应用开发领域成为其领导者。
核心特性
SpringBoot 框架诞生后,之所以能得到软件开发行业的高度认可,自然离不开它提供给我们的一些关键特性,例如:
- 起步依赖(Starter Dependency)-创建项目时,会默认添加基础依赖,简化我们自己查找依赖的过程。
- 自动配置(Auto Configuration)-创建项目时,springboot工程添加的默认依赖中提供了很多默认的配置,简化了我们对资源的配置过程。
- 嵌入式服务(Tomcat,Jetty)-springboot工程支持内嵌的web服务,可以将tomcat这样的服务直接嵌套到web依赖中,简化部署过程。
创建SpringBoot工程
- 使用 Spring 官方的服务器URL: https://start.spring.io 或 https://start.springboot.io
-
Alt + Insert -->
Module
-->Spring Initalizr
-
在第二个页面选择 Web -
Spring Web
,Spring Boot版本为2.7.11,然后点击Finish
创建工程失败排查
- 创建完工程后,查看Build页卡中是否显示了绿色的对钩
-
如果没有显示绿色对钩而是红色报错,解决方案如下
-
检查maven配置
-
刷新maven
-
如果刷新之后还没有成功
- 检查Maven配置是否正确,检查 .m2 目录下是否包含 settings.xml 文件
- 如果Maven配置没有问题,删除 .m2 目录下的 repository目录,然后再次刷新Maven
- 如果以上步骤还是不成功,创建一个新工程重试
-
MyBatis框架-注解管理
概述
Mybatis是一个优秀的持久层框架(官网https://mybatis.org/mybatis-3/),底层基于JDBC实现与数据库的交互。并在JDBC操作的基础上做了封装和优化,它借助灵活的SQL定制,参数及结果集的映射方式,更好的适应了当前互联网技术的发展。Mybatis框架的简单应用架构,如图所示:
在当今的互联网应用中项目,mybatis框架通常会由spring家族进行资源整合,作为数据层技术实现数据交互操作。使用此框架程序员只需要通过注解或者修改xml配置文件的方式配置好需要执行的SQL语句,MyBatis框架会根据SQL语句生成对应的JDBC代码并对数据库中数据进行增删改查操作。
在SpringBoot脚手架工程中,Spring框架会基于MyBatis框架底层配置,创建SqlSessionFactory对象,然后再通过此工厂对象创建SqlSession,最后基于Spring框架为测试类注入SqlSession对象,可以通过SqlSession对象实现与数据库的会话了。如图所示:
MyBatis环境初始化
-
工程名:mybatis 选择Java 8版本
-
SpringBoot版本:2.7.11
-
勾选3项依赖项
-
Srping Web
-
MyBatis Framework
-
MySQL Driver
-
整合MyBatis
application.properties
配置文件中添加连接数据库信息
spring.datasource.url=jdbc:mysql://localhost:3306/数据库名?serverTimezone=Asia/Shanghai&characterEncoding=utf8
spring.datasource.username=数据库用户名
spring.datasource.password=数据库密码
Pojo对象设计
在工程目录中创建pojo包,并创建Weibo
类
package com.liner.mybatis.pojo;
import java.util.Date;
public class Weibo {
private Integer id;
private String content;
private Date Created;
private Integer UserId;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getCreated() {
return Created;
}
public void setCreated(Date created) {
Created = created;
}
public Integer getUserId() {
return UserId;
}
public void setUserId(Integer userId) {
UserId = userId;
}
@Override
public String toString() {
return "Weibo{" +
"id=" + id +
", content='" + content + '\'' +
", Created=" + Created +
", UserId=" + UserId +
'}';
}
}
Dao接口设计
-
@Mapper注解
是由MyBatis框架提供,用于描述数据层接口,告诉系统底层为此接口创建其实现类,在实现类中定义数据访问逻辑,执行与数据库的会话(交互)
-
@Insert注解
使 MyBatis 框架根据接口方法的返回值和参数类型自动生成插入数据的代码
-
@Select注解
使 MyBatis 框架根据接口方法的返回值和参数类型自动生成查询数据的代码
-
@Update注解
使 MyBatis 框架根据接口方法的返回值和参数类型自动生成修改数据的代码
-
@Delete注解
使 MyBatis 框架根据接口方法的返回值和参数类型自动生成删除数据的代码
-
占位符
#{}
#{}
是 MyBatis 框架中用来表示占位符的语法。在
@Insert
注解中,#{}
所代表的是一个占位符,它可以接受 Java 对象作为输入参数,并将其转换为预编译的 SQL 语句中的参数。使用#{}
可以帮助我们避免 SQL 注入等问题,同时也方便了参数的类型转换,让 SQL 写起来更加简单。 -
@Param注解
@Param
用于指定参数名和参数值。在使用 MyBatis 进行 SQL 语句开发时,使用
@Param
注解将方法参数映射到 SQL 语句中需要的占位符上,这样做的好处是可以清晰地表达 SQL 语句中占位符的含义,更容易使用和维护 SQL 语句。
基于MyBatis规范设计用户数据访问接口,在工程目录下创建包mapper,并创建WeiboMapper
接口
package com.liner.mybatis.mapper;
import com.liner.mybatis.pojo.Weibo;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface WeiboMapper {
/**在微博表中插入数据*/
@Insert("INSERT INTO weibo VALUES(NULL,#{content},#{created},#{userId})")
int insert(Weibo weibo);
/**查询所有微博信息*/
@Select("SELECT * FROM weibo")
List<Weibo> selectWeibo();
/**根据微博id查询数据*/
@Select("SELECT * FROM weibo WHERE id=#{id}")
Weibo selectByWeiboId(int id);
/**更新微博表数据*/
@Update("UPDATE weibo SET content=#{content},created=#{created},user_id=#{userId} WHERE id=#{id}")
int updateById(Weibo weibo);
/**删除微博表数据*/
@Delete("DELETE FROM weibo WHERE id=#{id}")
int deleteById(@Param("id") Integer id);
}
测试类新建测试方法进行测试
/**自动装配*/
@Autowired
private WeiboMapper weiboMapper;
/**在微博表中插入数据-测试方法*/
@Test
void InsertWeibo(){
Weibo weibo = new Weibo();
weibo.setContent("今天天气真不错呀");
weibo.setCreated(new Date());
weibo.setUserId(1);
weiboMapper.insert(weibo);
}
/**查询所有微博信息-测试方法*/
@Test
void selectWeiboTest(){
System.out.println(weiboMapper.selectWeibo());
}
/**根据微博id查询数据*/
@Test
void selectByWeiboIdTest(){
System.out.println(weiboMapper.selectByWeiboId(2));
}
/**更新微博表数据-测试*/
@Test
void updateById(){
Weibo weibo = new Weibo();
weibo.setId(1);
weibo.setContent("这是我修改后的微博");
weibo.setCreated(new Date());
weibo.setUserId(1);
System.out.println(weiboMapper.updateById(weibo));
}
/**删除微博表数据-测试*/
@Test
void deleteByIdTest(){
System.out.println(weiboMapper.deleteById(1));
}
注:insert、update、delete返回值为受影响的数据条数int。