博主的每篇博文的浪漫主义
【“爱意就像大雨落下”】 https://www.bilibili.com/video/BV1444y1f7m6?share_source=copy_web&vd_source=385ba0043075be7c24c4aeb4aaa73352
“爱意就像大雨落下”
又又又见到各位读者拉,①我为什么又说又了??
没错,我们今天的学习笔记的内容是
- 什么是mybatis?
- 怎么样来创建一个mybatis?
- mybatis所带来的一系列东西!
什么是mybatis?
MyBatis 是一个开源、轻量级的数据持久化框架。
MyBatis 内部封装了 JDBC,简化了加载驱动、创建连接、创建 statement 等繁杂的过程,开发者只需要关注 SQL 语句本身。
那什么是数据的持久化尼?
数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中数据模型的统称。例如,文件的存储、数据的读取以及对数据表的增删改查等都是数据持久化操作。
MyBatis 支持定制化 SQL、存储过程以及高级映射,可以在实体类和 SQL 语句之间建立映射关系,是一种半自动化的 ORM 实现。
我们称之为ORM。
那什么是ORM尼?
ORM(Object Relational Mapping,对象关系映射)是一种数据持久化技术,它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过 JavaBean 对象去操作数据库表中的数据。
MyBatis 的主要思想是将程序中的大量 SQL 语句剥离出来,使用 XML 文件或注解的方式实现 SQL 的灵活配置,将 SQL 语句与程序代码分离,在不修改程序代码的情况下,直接在配置文件中修改 SQL 语句。
大伙呀,要好好理解这段话呀!!
总归有优点吧,那不然还要这个干什么?
- 与JDBC 相比,减少了 50% 以上的代码量
- MyBatis 相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL 写在 XML
中,和程序逻辑代码分离,降低耦合度,便于同一管理和优化,提高了代码的可重用性。 - 提供 XML 标签,支持编写动态 SQL 语句。
- 提供映射标签,支持对象与数据库的 ORM 字段关系映射。
大家看到这一段应该不陌生吧,通过jdbc连接数据库
使用 jdbc编程连接数据库的步骤:
- 加载数据库驱动
- 创连并获取数据庳链接
- 创建jdbc statement对象
- 设置sql语句
- 设置sql语句中的参数(使用preparedStatement)
- 通过statement执行sql并获取结果
- 对sql执行结栗进行解析处理
- 释放资源(resultset、preparedstatement、connection)
什么是mybatis
我们再来复习一遍!
MyBatis是一个优秀的持久层框架(ORM),它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的各种statement (statement,preparedstatemnt、CallableStatement〉配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
实现一个简易mybatis的步骤怎么来!!
数据源
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/数据库名
jdbc.username=root
jdbc.password=123456
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>
<properties resource="db.properties"></properties>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="logImpl" value="LOG4J"/>
<!--<setting name="logPrefix" value="mapper" />-->
</settings>
<!-- 配置mybatis运行环境 -->
<environments default="development">
<environment id="development">
<!-- 使用JDBC的事务管理 -->
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- MySQL数据库驱动 -->
<property name="driver" value="${jdbc.driver}" />
<!-- 连接数据库的URL -->
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!--mapper sql映射文件-->
<!-- 将mapper文件加入到配置文件中 -->
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
UserMapper(interface)
public interface UserMapper {
//根据ID查询
User findById(Integer id);
}
UserMapper(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">
<mapper namespace="mapper.UserMapper">
<select id="findById" resultType="domain.User">
select * from USER where id = #{id}
</select>
</mapper>
通过配置文件实现
@Test
public void test() throws Exception {
String resource = "mybatis-config.xml";
//获取配置文件流
InputStream resourceAsStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession session = sqlSessionFactory.openSession();
User u = session.selectOne("mapper.UserMapper.findById", 1);
System.out.println("user:" + u);
session.close();
}
SqlSessionFactory是SqlSession的创建工厂,每一个SqlSession实例代表应用程序和数据库的一次连接。 在整个应用当中,
- 我们应该只创建一个SqlSessionFactory实例,但是可以有多个SqlSession实例。
那么,
我们来学习一下SqlSessionFactory和SqlSession
这里的学习笔记知识点来自这位博主点这里
SqlSessionFactory
- SqlSessionFactory是MyBatis的关键对象,它是个单个数据库映射关系经过编译后的内存镜像。
- SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象类获得,而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例。
- 每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。
- SqlSessionFactory是线程安全的,SqlSessionFactory一旦被创建,应该在应用执行期间都存在。在应用运行期间不要重复创建多次,建议使用单例模式。
- SqlSessionFactory是创建SqlSession的工厂。
SqlSession
- SqlSession是MyBatis的关键对象,是执行持久化操作的独享,类似于JDBC中的Connection。
- 它是应用程序与持久层之间执行交互操作的一个单线程对象,也是MyBatis执行持久化操作的关键对象。
- SqlSession对象完全包含以数据库为背景的所有执行SQL操作的方法,它的底层封装了JDBC连接,可以用SqlSession实例来直接执行被映射的SQL语句。
- 每个线程都应该有它自己的SqlSession实例。
- SqlSession的实例不能被共享,同时SqlSession也是线程不安全的,绝对不能将SqlSeesion实例的引用放在一个类的静态字段甚至是实例字段中。也绝不能将SqlSession实例的引用放在任何类型的管理范围中,比如Servlet当中的HttpSession对象中。
- 使用完SqlSeesion之后关闭Session很重要,应该确保使用finally块来关闭它。
SqlSession源码:
SqlSessionFactory调用过程
mybatis框架主要是围绕着SqlSessionFactory进行的,创建过程大概如下:
- 定义一个Configuration对象,其中包含数据源、事务、mapper文件资源以及影响数据库行为属性设置settings
String resource = "mybatis-config.xml";//全局配置文件路径
InputStream inputStream = Resources.getResourceAsStream(resource);//读取xml文件
- 通过配置对象,则可以创建一个SqlSessionFactoryBuilder对象
new SqlSessionFactoryBuilder().build(inputStream);//构建会话工厂类
- 通过 SqlSessionFactoryBuilder 获得SqlSessionFactory 的实例。
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
- SqlSessionFactory 的实例可以获得操作数据的SqlSession实例,通过这个实例对数据库进行操作
SqlSession session = sqlSessionFactory.openSession();
根据上面代码:mybatis有三个基本要素:
- 每个 MyBatis 应用程序都以一个 SqlSessionFactory 对象的实例为核心。
- 首先获取 SqlSessionFactoryBuilder 对象,可以根据 XML 配置文件或者 Configuration
类的实例构建该对象。 - 然后获取 SqlSessionFactory 对象,该对象实例可以通过 SqlSessionFactoryBuilder 对象来获取。
- 有了 SqlSessionFactory 对象之后,就可以进而获取 SqlSession 实例。SqlSession
对象中完全包含以数据库为背景的所有执行 SQL 操作的方法,用该实例可以直接执行已映射的 SQL 语句。
我们再来看一下,通过常规代码实现
注意在下面该例中,configuration 添加了一个映射器类(mapper class)。映射器类是 Java 类,它们包含 SQL 映射语句的注解从而避免了 XML 文件的依赖。不过,由于 Java 注解的一些限制加之某些 MyBatis 映射的复杂性,XML 映射对于大多数高级映射(比如:嵌套 Join 映射)来说仍然是必须的。有鉴于此,如果存在一个对等的 XML 配置文件的话,MyBatis 会自动查找并加载它(这种情况下, BlogMapper.xml 将会基于类路径和 BlogMapper.class 的类名被加载进来)
@Test
public void test5() throws Exception {
//创建连接池
DataSource dataSource = new PooledDataSource("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3308/数据库名", "root", "123456");
//事务
TransactionFactory transactionFactory = new JdbcTransactionFactory();
//创建环境
Environment environment = new Environment("development", transactionFactory, dataSource);
//创建配置
Configuration configuration = new Configuration(environment);
//开启驼峰规则
configuration.setMapUnderscoreToCamelCase(true);
//加入资源(Mapper接口)
configuration.addMapper(UserMapper.class);
//通过一个SqlSessionFactoryBuilder对象获取一个SqlSessionFactory工厂实例,通过唯一工厂创建SqlSession
//(相当于获取数据库连接)
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
SqlSession session = sqlSessionFactory.openSession();
try {
//statement:sql唯一标识(mapper.xml映射文件中的id标识)
//parament:参数
User user = session.selectOne("mapper.UserMapper.findById", 1);
System.out.println(user);
//操作数据时,需要有提交操作
//提交session
session.commit();
} finally {
//关闭session
session.close();
}
}
救救就学到这里,博主的文章为什么没人看,虽然是抄作业吧,但我也是仔仔细细过了一遍的
提示:对于这篇学习笔记就暂时到这了,兄弟们加油
对于这篇学习笔记就暂时到这了,兄弟们加油
从现在做起,坚持下去,一天进步一小点,不久的将来,你会感谢曾经努力的你! |
如果又出错的,请各位友友指正。
新人报到,各位友友们,给我个三联(点赞,关注,收藏)