MyBatis入门

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

MyBatis主要就完成2件事情

  1. 封装JDBC操作

  2. 利用反射打通Java类与SQL语句之间的相互转换

        MyBatis的主要设计目的就是让我们对执行SQL语句时对输入输出的数据管理更加方便,所以方便地写出SQL和方便地获取SQL的执行结果才是MyBatis的核心竞争力。

mybaits的代码由github.com管理

下载地址:https://github.com/mybatis/mybatis-3/releases

依赖信息

​<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.6</version>
</dependency>​

学习地址:http://www.mybatis.org/mybatis-3/zh/index.html

特点:

灵活:

  • mybatis不会对应用程序或者数据库的现有设计强加任何影响。
  • sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。

解除sql与程序代码的耦合 :

  • 通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。
  • sql和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象于数据库的orm字段关系映射
  • 提供对象关系映射标签,支持对象关系组建维护
  • 提供xml标签,支持编写动态sql

MyBatis框架中涉及到的几个API:

  • SqlSessionFactoryBuilder:该对象负责根据MyBatis配置文件MyBatis-config.xml构建SqlSessionFactory实例
  • SqlSessionFactory:每一个MyBatis的应用层序都以一个SqlSessionFactory对象为核心。该对象负责创建SqlSession对象实例
  • SqlSession:该对象包含了所有执行SQL操作的方法,用于执行已映射的SQL语句
@Test
	public void test2() throws Exception {
        // 1. 创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        // 2. 加载SqlMapConfig.xml配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 3. 创建SqlSessionFactory对象
        SqlSessionFactory factory = sqlSessionFactoryBuilder.build(inputStream);
		// 4. 创建SqlSession对象
		SqlSession sqlSession = sqlSessionFactory.openSession();
		// 5. 执行SqlSession对象执行查询,获取结果User
		// 查询多条数据使用selectList方法
                //查询单条数据使用selectone方法
		List<Object> list = sqlSession.selectList("queryUserByUsername1", "%王%");
		// 6. 打印结果
		for (Object user : list) {
			System.out.println(user);
		}
		// 7. 释放资源
		sqlSession.close();
	}

搭建MyBatis环境

  1. 创建数据库表
  2. 创建java项目,并添加依赖(mysql,mybatis,log4j)
  3. 在resources目录下添加MyBatis的核心配置文件MyBatis-config.xml、log4j日志文件log4j.properties
  4. 创建pojo(简单的实体类)
  5. 加入sql映射文件:在resources目录下创建 例如 "StudentMapper.xml"文件
    <!-- namespace:命名空间,用于隔离sql -->
    <mapper namespace="test">
      
    </mapper>

     

  6. 在resources目录下,创建UserMapper.xml文件

MyBatis框架需要加载UserMapper.xml映射文件,将UserMapper.xml添加在mybatis-config.xml,如下:

<mappers>
        <mapper resource="com/qf/mapper/UserMapper.xml"/>
</mappers>

#{} 和 ${} 的区别

(1)#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它任意名称。

(2)${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。

MyBatis两种开发方式

         使用MyBatis开发Dao,通常有两种方式,即原始Dao开发方式Mapper接口动态代理开发方式(推荐)

原始Dao方式

...

Mapper接口动态代理方式(重点)

Mapper接口开发需要遵循以下规范:
1、Mapper.xml文件中的namespace与mapper接口的类路径相同。
2、Mapper接口方法名和Mapper.xml中定义的每个statement的id相同 
3、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同(注意:mapper.xml中parameterType可不写,如果不写则由Mapper接口中的方法参数类型决定)
4、Mapper接口方法的返回值类型和mapper.xml中定义的每个sql的resultType(输出参数类型)的类型相同

MyBatis核心配置文件:

mybatis-config.xml中包含的内容顺序如下

  •     properties(属性)
  •     settings(全局配置参数)
  •     typeAliases(类型别名)
  •     typeHandlers(类型处理器)
  •     objectFactory(对象工厂)
  •     plugins(插件)
  •     environments(环境集合属性对象)
  •     environment(环境子属性对象)
  •     transactionManager(事务管理)
  •     dataSource(数据源)
  •     mappers(映射器)

propertie(属性)

databas.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/MyBatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

在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>
	<!-- 是用resource属性加载外部配置文件 -->
	<properties resource="db.properties">
		<!-- 在properties内部用property定义属性 -->
		<!-- 如果外部配置文件有该属性,则内部定义属性被外部属性覆盖 -->
		<property name="jdbc.username" value="root" />
		<property name="jdbc.password" value="root" />
	</properties>

	<!-- 和spring整合后 environments配置将废除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理 -->
			<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>

MyBatis 将按照下面的顺序来加载属性:
(1)在 properties 元素体内定义的属性首先被读取。 
(2)然后会读取properties 元素中resource或 url 加载的属性,它会覆盖已读取的同名属性

mappers(映射器)

Mapper配置的几种方法:
1. <mapper resource=" " />
使用相对于类路径的资源(现在的使用方式)
如:<mapper resource="sqlmap/User.xml" />

2. <mapper class=" " />
使用mapper接口类路径
如:<mapper class="com.qf.mapper.UserMapper"/>
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。

3. <package name=""/>
注册指定包下的所有mapper接口
如:<package name="com.qf.mapper"/>
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。

 

POM.xml文件中加入

<build>
<resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <!-- 是否替换资源中的属性-->
                <filtering>false</filtering>
            </resource>
  </resources>
  </build>

总结

1 日志框架 : log4j 1.2.x log4j 2 logback jul

2 Mybatis;持久层的框架:

(1)封装jdbc操作

(2)利用反射打通Java类与SQL语句之间的相互转换

3 入门程序

核心步骤

1 创建MyBatis的核心配置文件 :mybatis-config.xml

2 创建Sql映射文件 :UserMapper.xml

3 核心配置文件关联映射文件

4 编码

//3.1创建builder

SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder ();

//3.2获取流读取mybatis-config.xml

//3.3 创建SqlSessionFacotry

//3.4获取SqlSession

//3.5 执行 selectOne selectList insert update delete

//3.6 提交 关闭

4 Mybatis的两种开发方式 : (1)原始Dao方式 (2)Mapper接口动态代理方式(推荐)

5 核心配置文件的说明

properties

typeAliases

mappers

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值