MyBatis(是一个框架)
mybatis是一款优秀的持久层框架,用于简化JDBC开发
持久层:负责将数据保存到数据库中
框架:半成品软件,在框架基础上构建软件编写更加高效,规范,通用,可扩展
MyBaits简化:完善JDBC的缺点
- 硬编码->配置文件(SQL语句,注册驱动,获取连接)
- 操作繁琐->自动完成(手动设置参数,手动封装结果集)
免除几乎所有的JDBC代码,以及设置参和获取结果集的工作
1.快速入门:
主要步骤
- 创建表,添加数据(直接用了数据库pethospital的parent表格)
- 创建模块(记得选maven),导入坐标(使用mysql驱动,junit单元测试等)
<dependencies>
<!-- mybatis的依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<!-- mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
<!-- junit单元测试坐标-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
</dependency>
<!-- 添加slf4j日志api-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.3.0-beta0</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.3.0</version>
</dependency>
</dependencies>
- 编写mybatis核心配置文件–>替换连接信息,解决硬编码问题
原本的JDBC的硬编码是:
mybatis代替如下:
数据库连接如下:
- 编写SQL映射文件(mapper),实现统一管理
注意要有命名空间和结果的类型
- 编码:
①定义pojo类
快捷键(Alt+左键拖对应的行,可以同时编辑)
②加载核心配置文件,获取SqlSessionFactory(工厂)对象----直接上网复制就好啦,不用背
- 调用SqlSessionFactory的openSession()方法
- 注意resource是mybatis的资源加载类
③获取SqlSession对象,执行SQL语句
④释放资源sqlSession.close()
名称空间加上对应的唯一标识
//3.执行sql
final List<User> users = sqlSession.selectList("com.rogue.Mapper.UserMapper.selectAll");
System.out.println(users);
2.解决SQL语句警告
在映射文件中会有警告,如下所示:
原因:IDEA和数据库没有创建连接
警告虽然不会编译失败,但是在编写SQL语句的时候是十分不方便的,IDEA提供强大的SQL语句的提示信息
解决方法:
并且可以在控制台进行SQL语句的查询
3. Mapper代理开发
要求:
案例入门:
- 定义与SQL映射文件同名的Mapper接口,并且将Mapper接口与SQL映射文件在同一个目录下面
注意在resources下创建目录的时候,为了使映射文件和接口在同一目录下面,新建的名字与接口名字一致但是原本的“.“换成”/"作为分隔符
注意在防止相同的映射文件的时候在资源库下新建一个同名的文件即可与创建软件包的形式不同,用“/”分隔
- 设置SQL映射文件的namespace属性为Mapper接口全限定名
- 在Mapper接口中定义方法,方法的名字就是mapper映射文件的执行SQL语句的id的名字
注意在设置方法的时候,如果查找的是多个数据,返回的是List,如果查找的是一个值的时候,返回的是一个User对象
- 编码:
- 通过SqlSession的getMapper方法获取Mapper接口的代理对象
- 通过调用执行sql语句
附加:
如果Mapper接口名称和SQL映射文件名称相同,并在同一个目录下,则可以包扫描的方式简化SQL映射文件的加载
4. Mybatis核心配置文件
配置文件的结构如下:注意在配置各个标签的时候,需要遵循前后顺序。(否则会报错)
<!--enviroments:配置数据库连接信息,可以配置数据库的环境信息,可以配置多个环境信息,通过default属性切换不同的环境l-->
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
在mybatis-config的配置文件里面增加别名,作用:简化配置(在后续的.xml文件中的resultype中可以起相应的名字,并且不区分大小写)
<typeAliases>
<package name="com.rogue.pojo"/>
</typeAliases>
增加别名之后,在对应的映射文件中只需要写入对应的pojo包相应的名字即可(不区分大小写)
原本的:
添加别名之后