Mybatis的知识点快速入门或回顾

前言

本篇纪录的是mybatis的快速上手和基本知识点,方便知识review,不足之处后续会不断补充,感谢您的阅览!

Mybatsi简介

Apache的一个开源项目iBatis

是一个基于Java的持久层框架,简化原生的JDBC的大段代码

轻量级,性能出色

  • SQL 和 Java 编码分开,功能边界清晰。Java代码专注业务、SQL语句专注数据
  • 开发效率稍逊于HIbernate,但是完全能够接受

MyBatis特性

  1. MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
  2. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
  3. MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录
  4. MyBatis 是一个 半自动的ORM(Object Relation Mapping)框架

Mybatis的快速上手

1.导入Mybatis的核心依赖

	<!-- Mybatis核心 -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.5.7</version>
	</dependency>

2.创建MyBatis的核心配置文件

maven的情况下,在resource文件夹下面创建其核心配置文件
在这里插入图片描述

<?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>  
	<!--设置连接数据库的环境-->  
	<environments default="development">  
		<environment id="development">  
			<transactionManager type="JDBC"/>  
			<dataSource type="POOLED">  
				<property name="driver" value="com.mysql.cj.jdbc.Driver"/>  
				<property name="url" value="jdbc:mysql://localhost:3306/MyBatis"/>  
				<property name="username" value="root"/>  
				<property name="password" value="123456"/>  
			</dataSource>  
		</environment>  
	</environments>  
	<!--引入映射文件-->  
	<mappers>  
		<mapper resource="mappers/UserMapper.xml"/>  
	</mappers>  
</configuration>

如果是由Spring的话,它是交给了Spring管理的,什么连接池,数据源都写在yml配置文件中去了


3.根据数据库中的表字段创建pojo包下的实体类

一个pojo示例对应的是一张表

在这里插入图片描述
POJO的实体类就不必多说了


4.创建一个mapper包,做持久层

根据pojo实体类创建对应的mapper接口
比如实体类为User 就是UserMapper

public interface UserMapper {
    
      
	/**  
	* 添加用户信息  
	*/  
	int insertUser();  
}

其中添加了一个insert方法作为新增操作的方法


5.在resource/mappers下创建mapper的映射文件

表——实体类——映射文件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="com.atguigu.mybatis.mapper.UserMapper">  
	<!--int insertUser();-->  
	<insert id="insertUser">  
		insert into t_user values(null,'张三','123',23,'女')  
	</insert>  
</mapper>

下面是两个一致比较重要

在这里插入图片描述

6.核心配置中引入xml映射文件

在这里插入图片描述


7.调用接口,测试功能

这里虽然新增数据的业务代码是写完了,但是没人调啊,不跟项目中一样,有业务层,然后调用它,所以这里我写一个junit测试来调用mapper的方法,来操作数据库

public class UserMapperTest {
    
    
    @Test
    public void testInsertUser() throws IOException {
    
    
        //读取MyBatis的核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //获取sqlSession,此时通过SqlSession对象所操作的sql都必须手动提交或回滚事务
        //SqlSession sqlSession = sqlSessionFactory.openSession();
	    //创建SqlSession对象,此时通过SqlSession对象所操作的sql都会自动提交  
		SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //通过代理模式创建UserMapper接口的代理实现类对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //调用UserMapper接口中的方法,就可以根据UserMapper的全类名匹配元素文件,通过调用的方法名匹配映射文件中的SQL标签,并执行标签中的SQL语句
        int result = userMapper.insertUser();
        //提交事务
        //sqlSession.commit();
        System.out.println("result:" + result);
    }
}

至此,mybatis的一个基本的demo就完成了,实现了新增数据的功能,当调用mapper接口时,会映射到mapper.xml,xml中执行sql语句。


8.事务的自动提交

在这里插入图片描述

在这里插入图片描述


其他的crud操作基本类似,创建操作方法,是修改还是删除等,然后在该mapper的映射xml中书写对应的SQL语句,语句id绑定方法名,这样调用该方法时才知道执行的是哪条SQL


Mybatis的知识回顾

MyBatis的增删改查

都是在xml种写crud的简单sql,没什么好说的

  1. 添加

    <!--int insertUser();-->
    <insert id="insertUser">
    	insert into t_user values(null,'admin','123456',23,'男','[email protected]')
    </insert>
    
  2. 删除

    <!--int deleteUser();-->
     <delete id="deleteUser">
         delete from t_user where id = 6
     </delete>
    
  3. 修改

    <!--int updateUser();-->
     <update id="updateUser">
         update t_user set username = '张三' where id = 5
     </update>
    
  4. 查询一个实体类对象

    <!--User getUserById();-->  
    <select id="getUserById" resultType="com.atguigu.mybatis.bean.User">  
    	select * from t_user where id = 2  
    </select>
    
  5. 查询集合

    <!--List<User> getUserList();-->
    <select id="getUserList" resultType="com.atguigu.mybatis.bean.User">
    	select * from t_user
    </select>
    

但是对于查询的返回值接收而言,有些许变化

  1. 查询的标签select必须设置属性resultType或resultMap,用于设置实体类和数据库表的映射关系
    • resultType:自动映射,用于属性名和表中字段名一致的情况
    • resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况

  1. 当查询的数据为多条时,不能使用实体类作为返回值,只能使用集合,否则会抛出异常TooManyResultsException;但是若查询的数据只有一条,可以使用实体类或集合作为返回值
    在这里插入图片描述

核心配置文件中引入properties

在这里插入图片描述

换成在properties中设置数据库连接配置信息

在这里插入图片描述

设置完后,需要把设置好的properties文件给引入到mybatis的核心配置文件中去

在这里插入图片描述

原来的读取配置信息换成下面这种${ }的方式来读取

在这里插入图片描述


给resultType设置别名

这里resultType接收类型一直写全路径类名很累,搞轻松点就是给这个全路径类名起一个简单的别名,这样即使查询sql多了,也不至于那么累

先设置别名
在这里插入图片描述


再看看效果

在这里插入图片描述


第二种方式是更为常用的

在这里插入图片描述

用package标签,把pojo包下的所有类都设置为默认的别名(不写别名,就设置为默认),就是类名本身,这样下来包下所有类都设置好了,免得我一个一个设置,又轻松不少

以包为单位,将包下所有的类型设置默认的类型别名

核心配置文件引入映射文件也可以如上操作,批量引入

创建这个包的时候,中间以 / 分隔,而非 .
在这里插入图片描述
搞错了上面不是.xml而是.mapper,接口和映射的包名需一致),这样才能以包为单位批量引入


制作xml文件的模板

对于每个demo的mybatis设置都要做这几步,很浪费时间,如果创建为模板,则一创建就初始化好了,岂不美哉

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>

<!--    引入jdbc配置文件信息-->
    <properties resource="jdbc.properties"/>
<!--    配置别名-->
    <typeAliases>
<!--        给实体类设置别名-->
        <package name=""/>
    </typeAliases>
    <!--设置连接数据库的环境-->
    <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="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件-->
    <mappers>
<!--        以包为单位,将包中的xml文件全部引入-->
        <package name="com.mapper"/>
    </mappers>
</configuration>

把这些代码复制,然后按下面操作
在setting中打开

在这里插入图片描述

这里添加一个mybatis-config的模板

在这里插入图片描述


如此我们还可以做一个mapper的模板,这样mapper前面的那一大段我们也不用写了
对于mapper的代码也是如上操作设置为模板

在这里插入图片描述

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

MyBatis获取参数值的两种方式(重点)

猜你喜欢

转载自blog.csdn.net/giveupgivedown/article/details/129817314
今日推荐