使用mybatis的代理方式完成查询所有操作(保姆级别,略过maven项目的创建过程,自留)
需求描述
现有如下表结构,请使用mybatis的代理方式完成数据的查询操作,并满足以下要求:
要求
- 新创建一个名为 student-demo 的 Maven 模块,在 pom.xml 中导入对应依赖的坐标
- 定义一个 Student 实体类,放置在 com.itheima.pojo 包下
- 定义一个 StudentMapper 类,放置在 com.itheima.mapper 包下
- 将查询到的每一条数据封装成 Student 对象,多个存储到 List集合中
素材
student 表的创建语句如下:
create table student (
id int primary key auto_increment,
name varchar(32),
age int,
address varchar(100),
gender char,
phone varchar(11),
birthday date
);
insert into student values (1,"张三丰",25,"北京海淀区","男","13612345678","2022-01-01");
insert into student values (2,"郭襄",20,"北京昌平区","女","13656445678","2017-01-01");
提示
- 使用 mybatis 代理方式满足特定的要求
- 在 resources 下创建和 StudentMapper 同目录结构时,需要书写成 com\itheima\mapper
编码实现
一、连接数据库,建表
1.打开idea,先将idea和MySQL进行连接
2.我的账户User和密码PassWord都是root,将URL中的“localhost”改为“127.0.0.1”(这一步属实脱裤子放屁哈哈哈),修改结果如下图,如有需要,可在Comment中填写“本地数据库“,再点击Test Connection,测试连接通过,点击”OK"即可
3.进入查询控制台
可以选择新建,也可以选择默认,这里我选择了新建一个查询控制台console_1
4.接下来直接复制建表语句,全选直接运行就可以了,代码爆红不是报错,是idea的锅
下面是sql语句代码
#创建数据库demo
create database demo;
#使用demo数据库
use demo;
#将学生表student创建在数据库demo下
create table student
(
id int primary key auto_increment,
name varchar(32),
age int,
address varchar(100),
gender char,
phone varchar(11),
birthday date
);
#插入数据
insert into student
values (1, "张三丰", 25, "北京海淀区", "男", "13612345678", "2022-01-01");
insert into student
values (2, "郭襄", 20, "北京昌平区", "女", "13656445678", "2017-01-01");
#复制代码后,可以选择Ctrl+Alt+L,格式化代码
🆗,数据库已准备完成
二、概念了解
1.Maven 是专门用于管理和构建Java项目的工具,Maven使用标准的 坐标 配置来管理各种依赖,只需要简单的配置就可以完成依赖管理。
2.Apache Maven 是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。
3.MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发。其中,JDBC的缺点存在于:
- 硬编码
- 注册驱动、获取连接
- SQL语句
- 操作繁琐
- 手动设置参数
- 手动封装结果集
通过Mybatis 优化之后:
- 硬编码可以配置到配置文件
- 操作繁琐的地方mybatis都自动完成
了解完概念后,可以上手操作了🤭
三、导入依赖包
创建maven项目后,要在创建好的模块中的 pom.xml 配置文件中添加依赖的坐标,这里我还另外添加了单元测试和日志依赖
注意:需要在项目的 resources 目录下创建logback的配置文件logback.xml
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--
CONSOLE :表示当前的日志信息是可以输出到控制台的。
-->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%level] %blue(%d{HH:mm:ss.SSS}) %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern>
</encoder>
</appender>
<logger name="com.itheima" level="DEBUG" additivity="false">
<appender-ref ref="Console"/>
</logger>
<!--
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
, 默认debug
<root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
-->
<root level="DEBUG">
<appender-ref ref="Console"/>
</root>
</configuration>
四、编写mybatis配置文件
在模块下的 resources 目录下创建mybatis的配置文件 mybatis-config.xml ,只需替换连接信息,解决硬编码问题
mybatis-config.xml
<?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">
<configuration>
<typeAliases>
<package name="com.yyh.pojo"/>
</typeAliases>
<!--
environments:配置数据库连接环境信息。可以配置多个environment,通过default属性切换不同的environment
-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--数据库连接信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///day04?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加载sql映射文件-->
<!-- <mapper resource="com/itheima/mapper/StudentMapper.xml"/>-->
<!--Mapper代理方式-->
<package name="com.yyh.mapper"/>
</mappers>
</configuration>
五、定义Student 实体类
建立pojo类封装查询到的学生数据
先在src/main/java文件夹下新建包com.yyh.pojo
再在pojo目录下创建Student.java,定义的属性和数据库的学生表字段对应
最后创建无参和有参构造方法、Getter和Setter方法以及toString方法
六、 定义StudentMapper 接口
在java文件夹下新建包com.yyh.mapper,在包里面定义接口StudentMapper,在接口里面定义getAllStudent()方法,将查询到的学生Student对象封装到List集合中
StudentMapper.java
package com.yyh.mapper;
import com.yyh.pojo.Student;
import java.util.List;
public interface StudentMapper {
List<Student> getAllStudent();
}
七、创建 StudentMapper.xml 的映射配置文件
在 resources 下创建 com\itheima\mapper 目录结构,这里要注意,Mapper接口名称和SQL映射文件名称相同,并在同一目录下,我们才可以使用包扫描的方式简化SQL映射文件的加载
SQL映射文件中sql语句的id就是mapper接口里定义的方法名,并保持参数类型和返回值类型一致
这里只有查询需求,所以使用select标签,在标签里写上sql查询语句
StudentMapper.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:名称空间.必须是对应接口的全限定名
-->
<mapper namespace="com.yyh.mapper.StudentMapper">
<select id="getAllStudent" resultType="Student">
select * from student;
</select>
</mapper>
八、编写测试类
在src.test.java目录中新建StudentTest测试类
StudentTest.java
import com.yyh.mapper.StudentMapper;
import com.yyh.pojo.Student;
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.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class StudentTest {
@Test
public void getAllStudent() throws IOException {
//1. 加载mybatis的核心配置文件,获取 SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2. 获取SqlSession对象,用它来执行sql
SqlSession sqlSession = sqlSessionFactory.openSession();
//3. 执行sql
//3.1 获取UserMapper接口的代理对象
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
//调用mapper方法去数据库获取信息
List<Student> allStudent = mapper.getAllStudent();
for (Student student : allStudent) {
System.out.println(student);
}
//4. 释放资源
sqlSession.close();
}
}
九、运行测试类
运行测试类,查询到两条学生数据
既然你都看到这里了,不如点个赞再走吧!!