北京建委安全员c证/seo网站优化排名
文章目录
- 一、前调:充分了解一下Mybatis
- 一、1 什么是MyBatis
- 二、2 解释:持久化
- 三、3 解释:持久层(dao,mapper)
- 四、4 为什么需要Mybatis
- 五、5 Mybatis的优点
- 二、小试牛刀:第一个Mybatis程序
- 1、准备工作
- 2、搭建实验数据库
- 3、导入Mybatis相关的jar包
- 4、编写核心配置文件(可以参照官方帮助文档)
- 5、编写MyBatisUtils工具类
- 6、创建对应的JavaBean和dao层的接口
- 7、编写Mapper.xml配置文件(相当于DaoImpl.java)
- 8、测试类
- 9、对于可能出现的问题解决方案
- 1、Maven静态资源过滤问题:找不到对应的配置文件等等问题
- 2、暂不支持发行版本5的解决方案
- 3、我们的Mpper.xml没有到Mybatis的核心配置文件中注册
一、前调:充分了解一下Mybatis
一、1 什么是MyBatis
- mybatis是一款优秀的持久层的框架,他支持自定义Sql 存储过程以及高级映射
- Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程
- MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。
- Mybatis官方文档 : http://www.mybatis.org/mybatis-3/zh/index.html
- GitHub : https://github.com/mybatis/mybatis-3
二、2 解释:持久化
**持久化是将程序数据在持久状态和瞬时状态间转换的机制。**把瞬时状态转换为持久状态,可断电,把内存中的数据持久化处理
- 即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。
- JDBC就是一种持久化机制。文件IO也是一种持久化机制。
但是我们为啥需要持久化?,因为内存的数据不可断电,断电后内存中数据就会丢失,我们无法保证数据不会丢失,不会断电,等等,还有就是内存的性价比不高
三、3 解释:持久层(dao,mapper)
就是javaWeb基础阶段使用过的dao层,与数据打交道的那一层,
DAO( data access Object 数据访问对象)
大多数情况下特别是企业级应用,数据持久化往往也就意味着将内存中的数据保存到磁盘上加以固化,而持久化的实现过程则大多通过各种关系数据库来完成
四、4 为什么需要Mybatis
- 我认为很简单,就是因为当我们使用来哦Mybatis框架之后,我们可以省去很多不必要的操作,我们可以更加简便的和数据库打交道,提高了我们的开发效率,与稳定性
- 传统的jdbc操作 , 有很多重复代码块 .比如 : 数据取出时的封装 , 数据库的建立连接等等… , 通过框架可以减少重复代码,提高开发效率 .
- Mybatis是一个半自动化的ORM框架(ORM 对象关系映射,数据的一张表对应java的一个bean)
- 即使我们不使用Mybatis我们依然可以做到所有的事,而是使用了只不过是方便了我们,解放了我们的双手,可以提高我们的开发效率
五、5 Mybatis的优点
- 首先肯定是简单易学,没有第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件就可以了,易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
- 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
- **解除sql与程序代码的耦合:**通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
- 提供xml标签,支持编写动态sql。
二、小试牛刀:第一个Mybatis程序
1、准备工作
-
搭建环境
-
导入Mybatis相关依赖在prom.xml
-
编写代码 {
- 创建数据库,以及对应的表信息
- ORM 创建对应的Javabean,以及Dao层,对应dao接口
- 编写Mybatis的核心配置文件
- 编写对应的接口的Mapper.xml
- 运行测试
}
-
测试
2、搭建实验数据库
CREATE DATABASE `mybatis`;USE `mybatis`;DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (
`id` int(20) NOT NULL,
`name` varchar(30) DEFAULT NULL,
`pwd` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3、导入Mybatis相关的jar包
<!--配置依赖-->
<dependencies><!--导入mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!--导入junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!--导入Mybatis--><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.2</version></dependency>
</dependencies>
4、编写核心配置文件(可以参照官方帮助文档)
直接从
复制过来
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><mappers><mapper resource="org/mybatis/example/BlogMapper.xml"/></mappers>
</configuration>
5、编写MyBatisUtils工具类
主要作用是加载配置文件,返回SqlSession(简介的相当于我们JDBC的connection)
package com.atdk.utils;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 java.io.IOException;
import java.io.InputStream;/*** SqlSessionFactory-->sqlSession*/
public class MybatisUtils {private static SqlSessionFactory sqlSessionFactory;/*** 使用Mybatis的第一步操作,加载配置文件,获取SqlSessionFactory对象* 这一串代码是写死的*/static {String resource = "mybatis-config.xml";InputStream inputStream = null;try {inputStream = Resources.getResourceAsStream(resource);} catch (IOException e) {e.printStackTrace();}sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);}/*** 既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。* SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。* 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句** @return 返回一个sqlSession对象*/public static SqlSession getSqlSession() {SqlSession sqlSession = sqlSessionFactory.openSession();return sqlSession;}
}
6、创建对应的JavaBean和dao层的接口
User.java
public class User {private int id;private String name;private String pwd;public User() {}}
UserMapper.java (因为我们现在使用了Mybatis框架,按照规定 我们使用Mapper代替dao 做后缀修饰dao层的接口 为了规范)
package com.atdk.dao;import com.atdk.pojo.User;import java.util.List;
import java.util.Map;public interface UserMapper {/*** 获取所有用户信息** @return 所有用户信息*/List<User> getUserList();
}
7、编写Mapper.xml配置文件(相当于DaoImpl.java)
Mapper.xml替代了接口的实现类
命名空间属性namespace的作用有两个:
-
一个是利用更长的全限定名来将不同的语句隔离开来,同时也实现了你上面见到的接口绑定。就算你觉得暂时用不到接口绑定,你也应该遵循这里的规定,以防哪天你改变了主意。
-
长远来看,只要将命名空间置于合适的 Java 包命名空间之中,你的代码会变得更加整洁,也有利于你更方便地使用 MyBatis。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--一个Mapper对应一个接口的实现类-->
<!--namespace属性 绑定一个Dao对应的接口,替代UserDaoImpl-->
<mapper namespace="com.atdk.dao.UserMapper"><!--select查询语句 id为UserDao的方法名字,一定要一样,resultType:为返回的类型--><select id="getUserList" resultType="com.atdk.pojo.User">select * from mybatis.user;</select>
</mapper>
8、测试类
官方建议我们使用try-catch-finally 关闭资源
@Test
public void test() {SqlSession sqlSession = null;try {//1、获取SqlSession对象sqlSession = MybatisUtils.getSqlSession();//方式一:getMapper() 推荐//1、获取UserDao实现类对象(Mapper.xml替代了Impl实现类)UserMapper userDao = sqlSession.getMapper(UserMapper.class);//2、调用方法List<User> users = userDao.getUserList();//方式二:selectList()过时了,还需要强转,不推荐使用//List<User> list = sqlSession.selectList("com.atdk.dao.UserMapper");for (User user : users) {System.out.println(user);}} catch (Exception e) {e.printStackTrace();} finally {sqlSession.close();}
}
9、对于可能出现的问题解决方案
1、Maven静态资源过滤问题:找不到对应的配置文件等等问题
<!--配置资源过滤解决方案-->
<build><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources>
</build>
2、暂不支持发行版本5的解决方案
在pom.xml文件中指定对应使用的JDK版本号
<!--指定JDK的版本号-->
<properties><java.version>11</java.version><maven.compiler.source>${java.version}</maven.compiler.source><maven.compiler.target>${java.version}</maven.compiler.target>
</properties>
3、我们的Mpper.xml没有到Mybatis的核心配置文件中注册
解决方案,那就注册呗
<!--每一个Mapper.xml配置文件都需要在Mybatis的核心配置文件中注册“.”,改成“/”--><mappers><!--使用resource属性指定:Mapper配置文件路径,resource路径需要使用/--><mapper resource="com/atdk/dao/UserMapper.xml"/></mappers>