1. Spring高级用法
1.1 Lombok用法
1.1.1 添加依赖
说明: 按照要求 添加lombok jar包文件
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
1.1.2 安装插件
1.1.3 POJO常用注解
package com.jt.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* POJO写法说明:
* 1.必须有get/set方法
* 2.必须实现序列化接口 数据流传输/socket通讯
*
* 注解说明:
* @Data 自动生成get/set/toString/equals/hashcode等方法
* @Accessors(chain = true) 重写了Set方法..
*/
@Data
@Accessors(chain = true)
@NoArgsConstructor //无参构造
@AllArgsConstructor //全参构造
public class User implements Serializable {
private Integer id;
private String name;
private Integer age;
private String sex;
/* public void setId(Integer id){
this.id = id;
}
public User setId(Integer id){
this.id = id;
//this 代表当前对象 运行期有效
return this;
}*/
}
1.2 Spring容器管理对象用法
1.2.1 @Component注解说明
表示: 表示将User对象交给Spring容器管理
类似于: new User();
问题: 如果直接new User(), 其中的属性都为null.
需求: 准备User对象 id=100,name=“tomcat” age=18 sex=“男” 交给Spring容器管理!!!
注意事项: 在进行测试时 将@Component删除
1.2.2 @Bean注解
注解说明: @Bean注解是Spring 专门为管理自定义对象 研发的注解.
用法区域: 在配置类文件中使用
用法说明:
package com.jt.config;
import com.jt.pojo.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 需求: 自定义User对象,交给Spring容器管理
* 注解讲解:
* 1.@Configuration 该类是一个配置类
* 理解:该类是一块区域,在区域中编辑自定义对象
*/
@Configuration
public class UserConfig {
/**
* 要求: 必须有返回值.
* 功能: 被@Bean修饰的方法,将方法名当做key--user,将返回值对象当做值value
* 根据Key-value 存储到Map集合中 交给Spring容器管理
* Map<user,User对象>
* @return
*/
@Bean
public User user(){
User user = new User();
user.setId(100).setName("tomcat猫").setSex("男").setAge(18);
return user;
}
}
1.2.3 对象测试
package com.jt.controller;
import com.jt.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//需求: 测试User对象是否交给Spring容器管理
@RestController
public class UserController {
//1.先管理对象,之后再注入对象
@Autowired
private User user;
@RequestMapping("/getUser")
public User getUser(){
return user;
}
}
1.2.4 测试效果展现
1.3 @SpringBootTest
1.3.1 问题分析
需求: 有时在执行测试方法时,必须编辑大量的Controller等代码,虽然可以测试成功,但是显得繁琐.
核心机制: 让Spring容器启动并且为对象提供服务.
1.3.2 @SpringBootTest
说明: SpringBoot为了测试方便专门开发了@SpringBootTest 主要的作用就是启动Spring容器. 完成测试案例.
注意事项: 测试类应该在测试包下完成,并且在主启动类的同包及子包中编辑.
1.3.2 @SpringBootTest 用法
package com.jt.test;
import com.jt.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
/**
* 注意事项: 测试代码必须在主启动类的同包及子包中编辑
* @SpringBootTest用法说明:
* 只要在该类中 执行@Test测试方法,则就会启动Spring容器.
*/
@SpringBootTest
public class TestUserDemo {
@Autowired
private User user;
/**
* 测试方法要求:
* 1.不能有返回值 必须为void
* 2.不能携带参数
* 3.测试方法名称 不能叫test
*/
@Test
public void testUser1(){
System.out.println(user);
}
}
1
2. 导入jt数据库
2.1 连接本地数据库
2.2 导入数据库文件
根据课前资料的sql文件,完成导入. 导入完成之后刷新即可.
3 Mybatis
3.1 JDBC入门案例
//利用jdbc,完成新增的功能
private static void method2() throws Exception{
//1,注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2,获取数据库的连接
//数据传输协议 数据库的ip 端口号 数据库名
String url = "jdbc:mysql://localhost:3306/cgb2107";
Connection c = DriverManager.getConnection(url,"root","root");
//3,获取传输器
Statement s = c.createStatement();
//4,利用传输器执行 增删改的SQL
//executeUpdate()用来执行增删改的SQL,只返回影响行数
int rows = s.executeUpdate(
"INSERT INTO emp(ename,job) VALUES('rose','副总')");
//5,释放资源
//r.close();//结果集
s.close();//传输器
c.close();//连接
}
3.2 JDBC缺点
代码比较繁琐,不方便记忆.
开发效率低
JDBC操作数据库时 结果封装繁琐.
JDBC 运行效率高,但是不便于编辑.
3.3 Mybatis框架
3.3.1 Mybatis框架介绍
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)
当前,最新版本是MyBatis 3.5.7 ,其发布时间是2021年4月21日。
3.3.2 Mybatis官网介绍
官网地址
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
总结: MyBatis 是一款优秀的持久层框架,利用ORM思想实现了数据库持久化操作.
补充说明: 也有人把mybatis称之为半自动化的ORM映射框架.
3.3.3 ORM思想
对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。如今已有很多免费和付费的ORM产品,而有些程序员更倾向于创建自己的ORM工具。
关系映射:
- 对象映射-------映射表
- 对象中有属性-------表中有字段
总结: 以对象的方式操作数据库.
举例说明:
1. JDBC 方式完成入库操作
insert into xxxx(字段名称) values (字段的值…)
select * from xxxxx 结果集需要自己手动封装为对象 (繁琐)
2. ORM方式实现入库
userDao.insert(对象)
3. ORM方式的查询
List userList = userDao.selectList(对象);
3.4 Mybatis 入门案例
3.4.1 准备新项目
3.4.2 导入jar包文件
<!--引入插件lombok 自动的set/get/构造方法插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--mybatis依赖包-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!--jdbc依赖包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
3.4.3 编辑mybatis-config.xml文件
说明: Mybatis中需要定义核心配置文件, 在配置文件中 需要指定数据库. 相关接口等信息.
文件目录结构:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--核心配置文件-->
<!--环境配置标签
mybatis支持多个数据源的配置,default="默认连接数据源"
-->
<environments default="development">
<!--编辑开发环境-->
<environment id="development">
<!--mybatis 采用jdbc的方式控制数据库事务. -->
<transactionManager type="JDBC"/>
<!--
type="POOLED" 创建一个数据源链接池,每次从池中获取链接.
-->
<dataSource type="POOLED">
<!--版本信息:
如果数据源采用5.x的版本 value:com.mysql.jdbc.Driver
如果数据源采用8.x的版本 value:com.mysql.cj.jdbc.Driver
-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--Mybatis加载Mapper映射文件-->
<mappers>
<mapper resource="mybatis/mappers/UserMapper.xml"/>
</mappers>
</configuration>
3.4.4 编辑UserMapper接口
知识回顾:
1.面向过程编程 C语言 亲力亲为
2.面向对象编程 C++ , java , python
3.面向接口编程 目的实现层级的解耦.
package com.jt.mapper;
import com.jt.pojo.User;
import java.util.List;
public interface UserMapper {
//方法查询user表中的所有的数据.
public List<User> findAll();
}
3.4.5 编辑Mapper的映射文件
Mybatis根据接口的规范,需要在自己指定的映射文件中 添加sql语句. 从而时效内数据的操作.
特点: 一个接口对应一个映射文件(xml)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace是mybaits映射文件的唯一标识,与接口对应-->
<mapper namespace="com.jt.mapper.UserMapper">
<!--
标签说明:
1.查询操作 select标签
2.新增操作 insert标签
.....
select标签介绍:
1. id属性 必须与方法名称一致.
2. resultType 返回值的pojo类型
sql:全部小写 ctrl + shift + y
-->
<select id="findAll" resultType="com.jt.pojo.User">
select * from demo_user
</select>
</mapper>
3.4.5 编辑Mapper的映射文件
说明: 通过mybatis加载其它的Mapper的映射文件
3.4.6 编辑Mybatis测试类
package com.jt;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
class SpringbootDemo2ApplicationTests {
/**
* 核心问题: SqlSession 理解为Mybatis操作数据的连接
* 1. 通过 SqlSessionFactoryBuilder 构建SqlSessionFactory
*/
@Test
public void testMybatis01() throws IOException {
//1.定义核心配置文件的路径
String resource = "mybatis/mybatis-config.xml";
//2.通过工具API读取资源文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//3.构建SqlSessionFactory
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
//4.获取SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//5.获取Mapper的接口对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//6.调用接口方法 获取返回值数据
List<User> userList = userMapper.findAll();
System.out.println(userList);
//7.连接用完记得关闭
sqlSession.close();
}
}
3.5 Mybatis报错总结
3.5.1 resultType错误
3.5.2 namespace 命名错误
检查namespace 命名空间
3.5.3 mybaits关联mapper映射文件异常
说明: 检查resource路径