MyBatis初识

MyBatis的由来

JDBC是基础访问数据库的能力【基础代表操作方式简单、原始(不简练)】

在实际的项目中为了解决代码冗余,提高效率,追求编码的一致性。用Mybatis来处理

什么是MyBatis

Mybatis是一个开源、轻量级的数据持久化框架,内部封装了JDBC,简化了加载驱动、创建

框架名词解释:

不仅帮我们节省代码量(解决了冗余代码),还给我们提供了编程的标准,变得更加地通用。

使用了MyBatis的好处[变化]

1.只关注SQL的编写,将SQL配置好(映射)好,Mybatis会帮你找到并执行

2.不用写Connection、PrepareStatement,ResultSet等,这些会由一个SqlSession对象【建立程序和数据库之间的一个会话】去执行映射好的sql

基本步骤

一、准备工作

1.下载MyBatis依赖【两类:MyBatis有关的+JDBC驱动

2.创建数据库表结构

3.创建实体类

二、实现SQL映射文件--【务必保证Sql语句正确】

           【关键之一:最后一步要执行的Sql是怎样传递给MyBatis的

目的:想要执行的Sql通过框架规定的方式配置出来

注意:在项目里会特意放在一个mapper<映射器>包中:xml文件中

分为两部分:一部分是版本信息【xml的版本信息和dtd文件的引入】用来做校验。

                      一部分是内容【结点是有要求的,不能随心所欲】

<mapper>是根结点 

           其中namespace属性:设置当前映射器的命名空间【规范:所在包+当前文件名】

子节点

        <select>   查询强调结果

            resultType属性:查询结果每一条用实体类来封装

                            【要求:实体类的属性名和表的字段名要一样】

        <insert>   插入强调传值

              parameterType属性:强调传递的值是以对象的方式

              #{属性} :获取传入对象的某个属性值

   知识点: #{ } 是OGNL【对象图访问语言】表达式:可以以对象的方式来访问数据

        <delete>

        <update>

    id属性:Sql映射的名称

寻找某条Sql:是命名空间+Sql的 id

再次理解框架:

        就是做好了一切,根据规则接受你给它的设置参数【即:把它想知道的东西(sql)传给它】

三、核心配置文件 --放在根目录下

SqlSession除了要找到执行的Sql语句,还要知道怎么连接数据库 ,需要主配置文件

<?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>
     <settings>
        <!--日志 需要创建log4j.configuration文件 -->
         <setting name="logImpl" value="LOG4J"/>
     </settings>
 <!--配置Mybatis运行环境   -->
	 <environments default="development"> 
		 <environment id="development">
     	  <!--1.事务管理  -->
		     <transactionManager type="JDBC"/>
		  <!--2.数据源,用连接池  -->
			 <dataSource type="POOLED">
			         <!-- 驱动类,使用驱动包里面的驱动类 -->
					 <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
					 <property name="url" value="jdbc:mysql://localhost:3306/north_american?charset=utf8mb4&amp;useSSL=false&amp;userTimezone=true&amp;serverTimezone=GMT%2B8"/>
					 <property name="username" value="root"/>
					 <property name="password" value="root"/>
			 </dataSource>
		 </environment>
	 </environments>
 <!--将mapper包下的所有文件加入到配置文件中  -->
    <mappers>
 	   <mapper resource="De01_chubu/mapper/WebsiteMapper.xml"/>
    </mappers>
</configuration>

四、日志文件

# Global logging configuration
log4j.rootLogger=ERROR,stdout

# MyBatis logging configuration...
log4j.logger.De01_chubu=DEBUG

# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

五、测试类

public class Test {
	public static void main(String[] args) throws IOException {
		InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
		SqlSessionFactory factory = builder.build(in);
		SqlSession sqlSession = factory.openSession();
		
		List<Website> list  = sqlSession.selectList("De01_chubu.mapper.WebsiteMapper.selectList");
		for(Website w : list) {
			System.out.println(w);
		}		
	}

}

1.Resources.getResourceAsStream()默认从ClassPath根目录路径下找mybatis-config.xml文件

2.SqlSessionFactory去读主配置文件

3.所以由SqlSessionFactory创建出来的SqlSession都能得到主配置文件的信息

4.通过SqlSession执行指定的Sql映射:

 4.1  根据映射路径在主配置文件中找

  找到后:

      插入语句有表达式会替换【底层用的是PeraparedStatement】

      事务是手动事务,所有的增删改以事务的方式去提交

      sqlSession.commit(); 【JDBC中是Connection提交】

  没找到:报错

报错分析: 

Mapped Statements collection 是Mapper映射操作集合

在Sql映射文件中会有很多的映射,会被放到一个集合里,

这个集合里面,每一个映射操作(执行的Sql)都是一个Mapped Statement,以Map的方式存储

Map的Key是Sql映射的完整访问名称:namespace+id

           value是每个要操作的Mapped Statement

所以:根据你给的路径去找value,

  情况1:没有在主配置文件中加载

  情况2:在主配置文件中加载,但书写路径错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值