
本文共 8531 字,大约阅读时间需要 28 分钟。
SpringBoot
项目的创建
SpringBoot 整合数据源
使用默认的HikariCP
- 添加依赖 右键项目的pom文件,spring→Edit Starters,再搜索jdbc添加MySQL Driver和JDBC API依赖
- 配置连接池 打开application.properties配置文件,添加如下的配置:
#spring datasource 连接池配置spring.datasource.url=jdbc:mysql:///数据库名?serverTimezone=GMT%2B8spring.datasource.username=rootspring.datasource.password=916437
- 测试连接
@Autowired private DataSource dataSource; @Test public void t1() throws Exception { System.out.println("连接名:"+dataSource.getConnection().getClass().getSimpleName()); }
———————————————————————————————————————————————————————
SpringBoot 整合MyBatis
- 初始配置 1.1 在pom文件下添加mybatis-spring-boot-starter依赖:
org.mybatis.spring.boot mybatis-spring-boot-starter 2.1.1
1.2 在application.properties里添加myBatis的简易配置:
#spring mybatis mybatis.configuration.default-statement-timeout=30 mybatis.configuration.map-underscore-to-camel-case=true
- 简单业务 2.1 准备pojo
2.2 创建一个接口并用mybatis里的注解@Mapper把它交给spring容器管理,在其中可以写简单的sql语句的方法,复杂的动态sql就要用xml来处理

@Mapperpublic interface IMapper { //查询所有的数据 @Select("select * from tb_goods") ListqueryAll();}
2.3 测试运行接口IMapper的queryAll方法
@Autowired IMapper iMapper; @Test public void queryAll() { ListqueryAll = iMapper.queryAll(); for (Good good : queryAll) { System.out.println(good); } }
- 较复杂业务(当接口方法对应的映射语句相对比较复杂时,建议将映射语句写到对应映射文件) 3.1 在resource目录下创建mapper/good目录,然后在其目录添加GoodMapper.xml
GoodMapper.xml里添加基本配置
在application.properties里对xml文件进行配置
#配置读取mybatis的操作sql语句方法的xml位置文件 mybatis.mapper-locations=classpath:/mapper/*/*.xml
3.2 在IMapper接口里写个批量查询的方法( 按id查找 )

3.3 在GoodMapper.xml里写一个批量查询的sql语句
3.4 测试queryObjects方法
@Test public void queryOBJ() { ListqueryObjects = iMapper.queryObjects(1,3); for (Good good : queryObjects) { System.out.println(good); } }
- 业务层接口及实现类 4.1 创建一个接口以及其实现类
将实现类交给spring管理:
@Servicepublic class GoodServiceImp implements GoodService{ @Autowired IMapper imapper;//注入IMapper这个接口, @Override //方便在实现GoodService接口的方法时调用IMapper的方法,因为这里设计是两个接口的方法都是一样的 public ListqueryObjects(Integer... integers) { List queryObjects = imapper.queryObjects(integers); return queryObjects; } }
4.2 测试这个实现类的方法


SpringBoot 整合WEB应用
- 添加依赖 右键pom, spring→Edit Starters, 搜索web
- 在src/main/resources目录下创建templates/page目录
- 在application.properties里添加视图解析器配置
spring.thymeleaf.prefix=classpath:/templates/page/ spring.thymeleaf.suffix=.html
- 创建good的controller
- 在templates/page目录下创建接收方法queryObjects传过来的good集合并用thymeleaf的th遍历显示
Insert title here
序号 | 名字 | 标记 | 创建时间 |
---|---|---|---|
- 启动项目
这里新创建的项目端口号都是8080,若需修改端口号就在application.properties配置server.port=80
SpringBoot项目的启动过程
1. main方法执行 2. 加载主启动类3. 程序解析启动类身上的注解(自动化的配置[配置文件自动加载、包扫描])
@EnableAutoConfiguration //开启自动化的配置。引入依赖即可完成自动化的配置(开箱即用)。完成自动化的包扫描(比如@Controller、@Service、@Mapper等).SpringBoot程序比较智能,只需要添加某些jar包,一般以SpringBoot启动项开头命名居多。当程序启动时,可以自动化的部署启动。
总结:SpringBoot项目启动会执行main方法,在加载主启动类的时候就扫描到了@SpringBootApption注解。@SpringBootApption注解类上标有@EnableAutoConfiguration注解, @EnableAutoConfiguration注解类上标有@AutoConfigurationPackage自动包扫描的注解配置文件
- 1.默认配置文件:application.properties
- properties中的配置文件没有层次感 properties中只能编辑k-v结构并且使用=连接 properties中默认编辑的都是字符串且默认采用ISO-8859-1编码,中文必然乱码
- k-v结构,使用 : 连接 有层次关系,缩进(空格、tab键) 添加value时注意空格
读取配置文件注解中的属性
- 1.@PropertySource("classpath:/文件位置 ")
- 为指定配置文件位置进行加载配置文件 classpath:/ 表示项目中的src/main/resources目录
- 2.@Value
- @Value单个获取指定文件中的属性并赋值
- 3.@ConfigurationProperties(prefix = “mysql”)
- 通过读取配置文件的前缀属性里有没有mysql开头的 然后拼接这个类的属性,通过get/set方法的支持为属性批量赋值为配置文件中对应属性的值

单个赋值的方式不能和批量赋值同时使用且批量复制的方式这个类的属性名必须和配置文件中对应的属性的后缀名一样,而单个赋值就没这个要求;批量赋值要求这个类必须有get/set方法,单个赋值就没有这个要求
jdbc: driver: mysqlDriver name: mysql# 批量赋值 这个类的属性就为driver、name (@ConfigurationProperties)# 而单个赋值就这个类的属性随便起名 (@Value)
链式加载
原理:可以让对象连续调用方法
效果:
- 方法一:
- 重写set方法,每个属性的set方法调用后都返回这个已经设置了值的对象
- 使用Lombok里的@Accessors注解
@RestController、@Controller、@ResponseBody
@RestController=@Controller+@ResponseBody
@Controller:将对象交给Spring容器管理 @ResponseBody:要求返回的是一个json字符串格式,在类上加这个注解则不会执行视图解析器跳转页面ORM思想与JPA思想
- JPA思想:
- Java持久API,对象与关系表的映射关系,将运行期的实体对象持久化到数据库中。JPA以对象的方式操作数据库 ORM思想:
- 对象关系映射(ORM [ Object Relational Mapping ] )是通过描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另一种形式。
ORM思想是JPA思想的补充
MybatisPlus
- 引入mybatis-plus-boot-starter依赖,注释掉mybatis-spring-boot-starter依赖(mybatis-plus只是加入了一些增强,并没有修改mybatis)
- 开启驼峰命名
- MybatisPlus会默认使用实体类的类名到数据中找对应的表。通过@TableName(“表名”)来指定,它实现了对象与表的关系映射,是mybatis-plus里的注解。映射规则是如果对象类的类名和对应的表名相同,可不用备注表名(不区分大小写)
- @TableId(type = IdType.AUTO) //主键自增
- @TableField(“sex”)用来关联表字段,若属性名和表字段名一致可省略这个注解(也包含驼峰规则)
- Mapper接口继承BaseMapper<对象>接口
- 单表操作几乎不写sql,以对象的方式操作数据库
方法 | 作用 |
---|---|
gt | > |
eq | = |
lt | < |
ge | >= |
le | <= |
like | 模糊查询 |
likeRight | 关键字开头 |
likeLeft | 关键字结尾 |
between(column,值1,值2) | 区间查询column在值1到值2间的数据 |
orderByAsc(column) | 按column升序 |
orderByDesc(column) | 按column降序 |
条件构造器.isNull(column) | 查询column为空的数据 |
实体类:
@Data@AllArgsConstructor@NoArgsConstructor@Accessors(chain = true)@TableName("user") public class User { @TableId(type = IdType.AUTO) //定义主键,主键自增 private Integer id;// @TableField("name") private String name;// @TableField("age") private Integer age;// @TableField("sex")关联表字段,若属性名和表字段名一致可省略这个注解(也包含驼峰规则) private String sex;}
mapper:
//@Mapper 现在主启动类加了这个包的全类mapper扫描注解@MapperScan("com.jt.mapper")public interface UserMapper extends BaseMapper{ }
直接在test测试类里测试mp的单表操作:
@SpringBootTestpublic class SpringBootApplicationTest { @Autowired private UserMapper userMapper; @Test public void t1() { User user = userMapper.selectById(1); System.out.println(user.toString()); } @Test public void t2() { User u=new User(); u.setAge(88).setName("小s").setSex("男"); Integer insert = userMapper.insert(u); System.out.println(insert); } @Test public void t3() { Integer insert = userMapper.deleteById(856); System.out.println(insert); } /** * Mybatis-plus的 BaseMapper接口里查询所有的方法selectList(null) * 这里selectList(null)的null就是表示没有where条件 */ //查询sex为男,并且age>20 @Test public void t4() { QueryWrapperqueryWrapper = new QueryWrapper<>();//条件构造器 queryWrapper.eq("sex", "男").gt("age", 20); List u = userMapper.selectList(queryWrapper); u.forEach(i->System.out.println(i)); } //查询sex为男,或者age>20 @Test public void t5() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("sex", "男").or().gt("age", 20); List u = userMapper.selectList(queryWrapper); u.forEach(i->System.out.println(i)); } //多条件 //查询id为1到9的user in() @Test public void t6() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in("id", 1,2,3,4,5,6,7,8,9); List u = userMapper.selectList(queryWrapper); u.forEach(i->System.out.println(i)); } //多条件 //查询id为1到9的user in() @Test public void t7() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in("id", 53,54,55); Integer u = userMapper.delete(queryWrapper); System.out.println(u); } //通过user实体搭配QueryWrapper条件构造器 @Test public void t8() { User u=new User(); u.setName("不知火舞"); QueryWrapper queryWrapper = new QueryWrapper<>(u); List selectList = userMapper.selectList(queryWrapper); selectList.forEach(i->System.out.println(i)); } //模糊查询like @Test public void t9() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("sex", "男").like("name", "精"); List selectList = userMapper.selectList(queryWrapper); selectList.forEach(i->System.out.println(i)); } //模糊查询like 以关键字开头 likeRight @Test public void t10() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.likeRight("name", "小"); List selectList = userMapper.selectList(queryWrapper); selectList.forEach(i->System.out.println(i)); } //模糊查询like 以关键字结尾 likeLeft @Test public void t11() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.likeLeft("name", "精"); List selectList = userMapper.selectList(queryWrapper); selectList.forEach(i->System.out.println(i)); } //查询age在18到35之间数据,按照性别排序 @Test public void t12() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.between("age", 18, 35).orderByAsc("id"); List selectList = userMapper.selectList(queryWrapper); selectList.forEach(i->System.out.println(i)); } //修改id为12的数据,名字改为小艾,年龄改为55 @Test public void t13() { int updateById = userMapper.updateById(new User().setId(12).setName("小艾").setAge(55)); System.out.println(updateById); } }
发表评论
最新留言
关于作者
