BuBu笔记——Mybatis入门(秃头BUBu的超详细备注,一定要看哦)


前言

每次打开学习视频看的时候,总想着以后都要整理起来记录一下,但是总是有一些大大小小的原因(好吧,只有懒)导致这个美好的梦想破灭了,哈哈,不知道今天是什么样的心情趋势我打开了它并且写下了这段话,但是希望真的能坚持下去吧。在开始写之前想到过文章内容会不会太简单,平台里的大佬太多了,我时常感觉自己像是还未入门的小喽啰,不过发布这些文章其实只是为了记录自己的成长,想到这里我也觉得无所谓了,知识太浅,希望大家多多指教~


提示:本篇文章介绍了关于MyBatis入门的一些内容,以下是本篇文章正文内容

一、MyBatis的简介

1. 原始JDBC存在的问题:

  1. 数据库频繁创建连接、释放连接,造成资源浪费,从而影响系统性能。
  2. Sql语句在代码中硬编码,代码不宜维护,而在实际开发中sql语句变化的可能性较大。
  3. 查询操作时,需要手动将结果进行封装。插入操作时,需要将实体数据手动设置到占位符位置。

2. 解决方案:

  1. 使用数据库连接池初始化连接资源
  2. 将Sql语句提取到xml配置文件中
  3. 使用反射、内省等底层技术,将实体属性与表字段自动映射

3. 什么是MyBatis?

以上所描述的问题,我们都可以使用MyBatis来解决
MyBatis是基于java的持久层框架,其特点如下:

  1. 内部封装了JDBC,
  2. 隐藏了JDBC繁杂的API
  3. 开发者只需要专注于sql语句即可
  4. 通过XML或注解的方式配置
  5. 采用orm自动思想解决实体与数据库映射的问题
    我们可以通过官网了解更多内容:
    mybatis 官网: http://www.mybatis.org/mybatis-3.

二、开发步骤

一、 添加MyBatis坐标

1、导入mysql数据库驱动

代码如下(示例):

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>版本号</version>
</dependency>

2、导入MyBatis坐标

代码如下(示例):

<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>版本号</version>
</dependency>

二、创建数据库表

三、编写实体类

四、映射文件Mapper.xml

1、mapping文件约束头:

<?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">

2、namespace:

命名空间,给当前mapper命名,与下边语句的id一起组成查询的标识,即调用mapper方法时直接使用 " 命名空间名称.方法名 " 调用

<mapper namespace="名称">

3、< mapper >配置

命名空间,给当前mapper命名,与下边语句的id一起组成查询的标识,即调用mapper方法时直接使用 " 命名空间名称.方法名 " 调用

<mapper>
	<select id="命名" resultType="查询结果对应的实体类型">
		要执行的sql语句
	</select>//执行其他操作时需要切换相应的标签,如insert、update、delete
</mapper>

五、核心文件MapConfig.xml

1、MyBatis核心文件约束头:

命名空间,给当前mapper命名,与下边语句的id一起组成查询的标识,即调用mapper方法时直接使用 " 命名空间名称.方法名 " 调用

<?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">

2、Mybatis核心文件配置

命名空间,给当前mapper命名,与下边语句的id一起组成查询的标识,即调用mapper方法时直接使用 " 命名空间名称.方法名 " 调用

<configuration>
	//数据源环境
	<!--default="development":指定默认的环境名称-->
	<environments default="development">
	<!--id="development":指定当前环境名称-->
		<environment id="development">
		<transactionManager type="JDBC"/>//事务管理器
		<!--type="POOLED":指定当前数据源类型是连接池-->
		<dataSource type="POOLED">//数据源
			<property name="driver" value="com.mysql.jdbc.Driver"/>
			<property name="url" value="jdbc:mysql://localhost:3306/test"/>
			<property name="username" value="root"/>
			<property name="password" value="root"/>
		</dataSource>
	</environment>
	//加载映射文件
	<mappers>
		<mapper resource="mapper配置文件位置"></mapper>
	</mappers>
</configuration>

六、测试类

//加载核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("核心配置文件.xml");
//获得sqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行sql语句
//param("namespace+id")
List<User> userList = sqlSession.selectList("namespace.id");//查询
sqlSession.id名("namespace.id",实体对象)//增改
sqlSession.delete("namespace.id",Object)//删除
//打印结果
System.out.println(userList);
//释放资源
sqlSession.close();

三、MyBatis的增删改查

1、查询操作

List<User> userList = sqlSession.selectList("userMapper.findAll");
sql语句
<select id="findAll" parameterType="要查询的数据的类型" resultType="BsHolidaySetUpResult">
        select * from User
</select>

2、新增操作

 sqlSession.insert("userMapper.add", user);
sql语句
<!--在进行新增操作时,values中的值为parameterType类中的属性名-->
<insert id="insert" parameterType="要插入的数据的类型">
	insert into user values(#{id},#{username},#{password},#{实体属性名})
</insert>

3、删除操作

sqlSession.delete("userMapper.delete",3);
sql语句
<!--依据某一字段删除数据,parameterType为该字段类型-->
<!--在传递单个参数时,可以使用#{任意字符串}的方式-->
<delete id="delete" parameterType="java.long.Integer">
	delete from user where id=#{任意字符串}
</delete>

4、修改操作

sqlSession.update("userMapper.update", user);
sql语句
<update id="update" parameterType="要修改的数据的类型">
	update user set username=#{username},password=#{password} where id=#{id}
</update>
<!--mybatis在执行更新操作时,需要手动的进行提交事务,即在执行增删查的操作时,要提交事务来实现对应操作-->
sqlSession.commit();

四、MyBatis的核心配置文件

一、层级关系

  • configuration 配置
    • properties 属性
    • settings 设置
    • typeAllases 类型别名
    • typeHandlers 类型处理器
    • objectFactory 对象工厂
    • plugins 插件
    • environments 环境
      • environment 环境变量
        • transactionManager 事务管理器
        • dataSource 数据源
    • databaseidProvider 数据库厂商标识
    • mappers 映射器

二、测试类常用配置解析

1、environments标签

该标签主要用于数据源环境的配置

<environments default="development">
	<environment id="development">
		<transactionManager type="JDBC"/>
		<dataSource type="POOLED">
			<property name="driver" value="${jdbc.driver}"/>
			<property name="url" value="${jdbc.url}"/>
			<property name="username" value="${jdbc.username}"/>
			<property name="password" value="${jdbc.password}"/>
		</dataSource>
	</environment>
</environments>

事务管理器(transactionManager)的类型有两种:

  • JDBC直接使用了JDBC的提交和回滚设置,依赖于connection连接来管理事务作用域
  • MANAGED使用容器来管理事务的整个生命周期。默认情况下会关闭Connection连接,需要将closeConnection属性设置为false来阻止关闭行为。

数据源(dataSource)类型有三种:

  • UNPOOLED:这个数据源的实现只是每次被请求是打开和关闭连接
  • POOLED:这种数据源的实现利用”池“的概念将JDBC连接对象组织起来。
  • JNDI:这个数据源的实现是为了能在如EJB或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。

2、mappers标签

该标签的作用是加载映射的,加载方式有如下几种:

  • 使用相对于类路径的资源引用
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  • 使用完全限定资源定位符(url)
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
  • 使用映射器接口实现类的完全限定类名
<mapper class="org.mybatis.builder.AuthorMapper"/>
  • 将包内的映射器接口实现全部注册为映射器
<package name="org.mybatis.builder"/>

3、properties标签

该标签可以加载额外配置的properties文件

<properties resourse="jdbc.properties"></properties>

3、typeAliases标签

该标签用于自定义别名

<typeAliases>
	<typeAlias type="原名" alias="别名"/>
</typeAliases>

mybatis框架设置好的常用的类型的别名

数据类型别名
Stringstring
Longlong
Integerint
Doubledouble
Booleanboolean

四、MyBatis的相应API

一、SqlSessionFactoryBuilder

常用API:SqlSessionFactory.build(InputStream inputStream)
通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象

String resource = "org/mybatis/builder/mybatis-config.xml";
InputStream inputStream = ResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);

其中,Resources工具类,这个类在org.apache.ibatis.io包中。Resources类帮助你从类路径下、文件系统或一个web URL中加载资源文件。
SqlSessionFactory有多个方法创建SqlSession实例。常用的有以下两个:

方法解释
openSession()会默认开启一个事务,但事务不会自动提交,也就意味着需要手动提交该事务,更新操作数据才会持久化到数据库中
openSession(boolean autoCommit)参数为是否自动提交,如果设置为true,则不需要手动提交事务

二、SqlSession会话对象

SqlSession实例在MyBatis中是非常强大的一个类。包括所有的执行语句、提交或回滚事务和获取映射器实例的方法。
执行语句的方法主要有:

<T> T selectOne(String statement,Object parameter)
<E> List<E> selectList(String statement,Object parameter)
int insert(String statement,Object parameter)
int update(String statement,Object parameter)
int delete(String statement,Object parameter)

操作事务的方法主要有:

void commit()
void rollback()

总结

以上就是今天的BuBu的笔记,对Markdown格式不熟悉的我写的腰酸背痛,才只完成了一篇,不过孰能生巧,多更一定会很熟练的啦,不说了,回家好好复习笔记啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值