h e l l o
我感觉写这种一步一步操作的东西,如果不跟着多做几遍,实际上是没有什么效果的,顶多是在脑子里面放了一边视频,下次依然是做不出来的。
与其说还是那么传统的通过看书去学习东西,不如先多去看看看各个程序员的视频,多有一种编程的思维在脑袋里面,多通过实践去加深和了解这个思维的丰富程度和他的应用场景。
操作步骤:
- maven依赖:
首先创建一个项目,配置好maven的位置以及仓库的位置。 - 导入maven依赖pom.xml:
在项目中的pom.xml文件中加入元素用于定义项目的依赖库,这些库将在项目构建时被自动下载和引入。在这个例子中,项目依赖了MyBatis、JUnit和MySQL驱动。 - 建立数据库以及表:
提前建立一个建表语句:
CREATE TABLE device_info
(
id
BIGINT NOT NULL AUTO_INCREMENT,
typeNo
VARCHAR(50) NOT NULL,
price
DECIMAL(20,2) DEFAULT NULL,
date
DATE DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;device_info
- 表中添加初始数据:
添加一些备件信息
INSERT INTO device_info (typeNo, price, date)
VALUES
(‘D-1’, 1650.00, ‘2019-12-25’),
(‘D-3’, 2200.00, ‘2019-11-29’),
(‘D-2’, 1850.00, ‘2020-01-10’),
(‘D-4’, 1980.00, ‘2020-02-15’),
(‘D-5’, 1500.00, ‘2020-03-20’);
//删除表的语句:DROP TABLE IF EXISTS device_info;
额外 的 东西
在Java开发中,POJO包和DAO包是常见的包结构,用于组织代码和实现不同的功能。
- POJO包(Plain Old Java Object):POJO包通常用于存放普通的Java类,这些类通常只包含属性和对应的getter和setter方法,没有业务逻辑。POJO类用于封装数据,通常与数据库中的表结构或其他数据源的数据结构相对应。POJO类的任务是提供一个简单的数据容器,用于在不同的层之间传递数据。
- DAO包(Data Access Object):DAO包用于存放数据访问对象,这些对象用于与数据库或其他数据源进行交互。DAO类封装了对数据的访问和操作逻辑,提供了对数据的增删改查等操作方法。DAO类的任务是将数据访问逻辑与业务逻辑分离,使得业务逻辑层可以独立于具体的数据访问细节。
总结起来,POJO包用于存放简单的数据对象,而DAO包用于封装数据访问逻辑。POJO类提供了数据的封装和传递,而DAO类提供了对数据的访问和操作。这样的包结构可以使代码更加清晰、模块化,并且方便维护和扩展。
相较于传统的DAO包,使用Mapper的方式更加符合MyBatis框架的设计理念和使用习惯。Mapper接口提供了更灵活的方式来定义和执行SQL语句,同时也更加符合面向对象的编程思想。在MyBatis中,Mapper接口与对应的XML配置文件或注解一起使用,实现了数据访问逻辑与SQL语句的分离,提高了代码的可维护性和可读性。
- 新建项目+配置mybatis依赖mybatis-hello.xml:
在项目内新建一个像项目,命名创建之后,在新建项目的目录下有一个新的pom.xml文件,可以使用之前已经定义好的模板(这里的xml是mybatis的一些依赖和配置) - 创建POJO下的封装数据类Equipment.java:
POJO类通常只包含属性和对应的getter和setter方法,没有业务逻辑。这些类用于与数据库表的结构相对应,用于数据的封装和传递。 - 创建Mapper接口EquipmentMapper.java:
包含与数据库交互相关的方法。这些方法用于执行SQL语句和映射查询结果。
例如:
InsertCopy codevoid insertEquipment(Equipment equipment);
- 创建Mapper XML文件或注解EquipmentMapper.xml:
包含与数据库交互相关的SQL语句和参数映射关系。Mapper XML文件或注解中的语句和参数映射关系应该与Mapper接口中的方法名称和参数相对应,以便MyBatis框架能够正确地执行对应的SQL语句。
InsertCopy code<insert id="insertEquipment">
<!-- 插入设备信息 -->
INSERT INTO device_info (typeNo, price, date)
VALUES (#{typeNo}, #{price}, #{date})
</insert>
- 创建测试类TestEquipment.java:
使用MyBatis的配置文件和Mapper接口,可以方便地进行数据库操作,并使用JUnit框架进行单元测试。
测试类TestEquipment使用了JUnit测试框架。测试方法testEquipment01用于测试插入设备信息的功能。
@Test
public void testEquipment01() throws IOException {
// 加载 MyBatis 配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-hello.xml");
// 创建 SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 根据配置文件创建 SqlSessionFactory
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 打开 SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(true);
// 获取 EquipmentMapper 接口的实例 增
EquipmentMapper Equipment = sqlSession.getMapper(EquipmentMapper.class);
Equipment.insertEquipment();
sqlSession.close();
}
在测试方法中,首先加载MyBatis的配置文件mybatis-hello.xml,然后创建SqlSessionFactory和SqlSession,用于与数据库进行交互。
接下来,通过SqlSession的getMapper方法获取EquipmentMapper接口的实例。EquipmentMapper是一个Mapper接口,用于定义与设备信息相关的数据库操作方法。
在测试方法中,调用EquipmentMapper接口的insertEquipment方法,用于向数据库中插入设备信息。
最后,关闭SqlSession,完成测试。
编程思维:
整个过程分为:A(创建POJO类)A–> B(创建Mapper接口) B --> C(创建Mapper XML文件或注解) C --> D(创建测试类)D
不必纠结内部的哪个知识点我还没学过,先用了再说。本身的内容就十分的多了,需要以练促学;
这次的案例主要用到:ss
- 抽象和封装:创建POJO类和Mapper接口,将数据和数据访问逻辑进行抽象和封装。POJO类用于封装数据,Mapper接口用于定义数据访问方法。这样可以将复杂的业务逻辑和数据操作进行分离,提高代码的可维护性和可读性。
- 模块化和组件化:将代码组织成不同的包和类,实现模块化和组件化的设计。POJO包和Mapper包分别用于存放不同类型的类,实现了代码的模块化。这样可以更好地组织和管理代码,提高代码的可重用性和可扩展性。
- 面向对象思维:创建POJO类和Mapper接口,采用面向对象的思维来设计和实现代码。POJO类用于封装数据,具有属性和方法,符合面向对象的封装特性。Mapper接口用于定义与数据库交互的方法,符合面向对象的抽象和封装特性。
- 测试驱动开发思维:编写测试方法,先定义测试用例和预期结果,然后编写代码来满足测试用例的要求。这种思维方式强调先编写测试,再编写代码的开发流程,可以提高代码的质量和稳定性。
- 依赖注入思维:通过使用@Autowired注解将Mapper接口注入到测试类中,实现了依赖注入的思维。这样可以在测试方法中直接使用Mapper接口的实例,而不需要手动创建和管理对象。