Mybatis的第一天

 一.MyBatis简介

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

二.MyBatis如何安装?

去浏览器搜github或者点这下载地址:Releases · mybatis/mybatis-3 · GitHubhttps://github.com/mybatis/mybatis-3/releases

三.如何使用mybatis


1. 引入mybatis和mysql的jar

在我们的maven的java工程中的pom.xml文件中,引入我们的jar,效果如下:

注意:引入完jar以后,千万不要忘记了刷新maven 

四.MyBatis开发流程

1.准备工作

在数据库中建表,并且添加几条数据

2.创建实体类与dao层

 这个实体类的类名就是你想用的数据库中的表名。里面的私有属性为你的列名。

五.创建并编写MyBatis配置文件(mybatis-config.xml)

mybatis-config.xml初始模板:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <!--配置标签的顺序:(properties?, settings?, typeAliases?,
        typeHandlers?, objectFactory?, objectWrapperFactory?,
        reflectorFactory?, plugins?, environments?,
        databaseIdProvider?, mappers?)-->


</configuration>

 配置相关信息

<?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="resource/druid/druid.properties"/>
	<!-- 读取实体类别名 -->
	<typeAliases>
		<package name="com.dyit.entity"/>
	</typeAliases>
	
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC"/><!-- 配置数据库事务管理 -->
				<dataSource type="com.dyit.util.MybatisDataSource"><!-- 读取数据源信息 -->
					<property name="driverClassName" value="${druid.driver}"/>
					<property name="url" value="${druid.url}"/>
					<property name="username" value="${druid.username}"/>
					<property name="password" value="${druid.password}"/>
				</dataSource>			
		</environment>
	</environments>
	
	<!-- 加载xxx.mapper.xml -->
	<mappers>
		<mapper resource="resource/mapper/Book.mapper.xml"/>
	</mappers>
</configuration>

六.日志配置

在src下创建log4j.properties配置日志信息

log4j.rootLogger=debug,stdout,logfile
#console output
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.appender.stdout.PatternLayout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}<-->%F<-->%p<-->%m%n 
#file output
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=D:/logs/log.log
log4j.appender.logfile.layout=org.apache.log4j.SimpleLayout
log4j.appender.logfile.PatternLayout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}<-->%F<-->%p<-->%m%n

#mybatis log 
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

————————————————
版权声明:本文为CSDN博主「橘子恶霸、」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_55627064/article/details/122943949

七.配置xxx.mapper.xml

IBookMapper.java中的抽象方法,如何去实现它们呢?

这就要靠我们的Mapper配置文件了,一个Dao接口文件对应一个Mapper配置文件。MyBatis替我们封装了数据访问的其他操作,我们只需要关注Sql语句本身就可以了,而Sql语句写在哪呢?就是Mappe配置文件中。

在src\resource\mapper下创建Book.mapper.xml

下面是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="com.dao.UserDao">


</mapper>

 配置相关信息 , <mapper>标签下的sql写法

<?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.cskt.mybatis.mapper.CarMapper">
    <!--int insertCar();-->
    <!--insert语句-->
    <insert id="insertCar">
        insert into t_car(id,car_num,brand,guide_price,produce_time,car_type) values(null,'1003','丰田霸道',30.0,'2023-10-11','燃油车')
    </insert>


    <!--void updateCar();-->
    <!--update语句-->
    <update id="updateCar">
        update t_car set brand='奔驰大G' where id=4
    </update>

    <!--void deleteCar();-->
    <!--delete语句-->
    <delete id="deleteCar">
        delete from t_car where id=4
    </delete>
    <!--Car getCarById();-->
    <!--select语句-->
<!--
查询功能的标签必须设置resultType或resultMap
resultType:设置默认的映射关系
resultMap:设置自定义的映射关系
-->
    <select id="getCarById" resultType="com.cskt.mybatis.pojo.Car">
        select * from t_car where id=4
    </select>
<!--List<Car> getCarList();-->
<select id="getCarList" resultType="Car">
    select * from t_car
</select>
</mapper>

八.测试mybatis

        可以在这里建一个测试类,名字不要与”Test“重复(避免与junit冲突)。所以我们在测试之前可以在pom.xml文件中引入junit的jar,刷新以后再写测试。

测试代码如下所示

package com.cskt.mybatis.test;

import com.cskt.mybatis.mapper.CarMapper;
import com.cskt.mybatis.pojo.Car;
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 org.junit.Test;

import java.io.InputStream;
import java.util.List;

public class MybatisTest {
    /**
     * Sqlsession默认不自动提交事务,若需要自动提交事务
     * 可以使用SqlSessionFactory.openSession(true);
     */


    @Test
    public void testMybatis() throws Exception{
//加载核心配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");//Resources.getResourceAsStream默认就是从类的根路径下开始查找资源。
        //获取SqlSessionFactoryBuilder
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
        //获取SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        //获取SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //获取mapper接口对象
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        //测试功能
        int result= mapper.insertCar();
        System.out.println("插入了几条数据"+result);
//        //提交事务
//        sqlSession.commit();
    }

  注意: 当我们对数据库里的表做删除修改添加的时候,也就是需要改变表里的数据的时候,一定不要忘记了加上提交(session.commit();),不然数据库里的内容不会发生改变。像查询方法就不需要写这一行代码,因为查询的时候没有改动表内容。 

九.MyBatis的工作原理以及核心流程详解

MyBatis的工作原理如下图所示:

上面中流程就是MyBatis内部核心流程,每一步流程的详细说明如下文所述:

(1)读取MyBatis的配置文件。mybatis-config.xml为MyBatis的全局配置文件,用于配置数据库连接信息。

(2)加载映射文件。映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,需要在MyBatis配置文件mybatis-config.xml中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一张表。

(3)构造会话工厂。通过MyBatis的环境配置信息构建会话工厂SqlSessionFactory。

(4)创建会话对象。由会话工厂创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。

(5)Executor执行器。MyBatis底层定义了一个Executor接口来操作数据库,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。

(6)MappedStatement对象。在Executor接口的执行方法中有一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等信息。

(7)输入参数映射。输入参数类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输入参数映射过程类似于JDBC对preparedStatement对象设置参数的过程。

(8)输出结果映射。输出结果类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输出结果映射过程类似于JDBC对结果集的解析过程。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值