MyBatis复习笔记

MyBatis复习

1.MyBatis简介

1.1MyBatis历史

  • MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github
  • iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)

1.2MyBatis特性

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

1.3MyBatis下载

1.4和其它持久化层技术对比

JDBC

  • SQL 夹杂在Java代码中耦合度高,导致硬编码内伤
  • 维护不易且实际开发需求中 SQL 有变化,频繁修改的情况多见
  • 代码冗长,开发效率低

Hibernate 和 JPA

  • 操作简便,开发效率高

  • 程序中的长难复杂 SQL 需要绕过框架

  • 内部自动生产的 SQL,不容易做特殊优化

  • 基于全映射的全自动框架,大量字段的 POJO 进行部分映射时比较困难。

  • 反射操作太多,导致数据库性能下降

MyBatis

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

2.搭建MyBatius

2.1开发环境

  • IDE:idea 2019.2
  • 构建工具:maven 3.5.4
  • MySQL版本:MySQL 5.7
  • MyBatis版本:MyBatis 3.5.7
    在这里插入图片描述

2.2创建maven工程

  • 打包方式:jar
   <groupId>org.example</groupId>
    <artifactId>MyBatius1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
<packagking>jar</packaging>
  • 引入依赖
<dependencies>
	<!-- Mybatis核心 -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.5.7</version>
	</dependency>
	<!-- junit测试 -->
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.12</version>
		<scope>test</scope>
	</dependency>
	<!-- MySQL驱动 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.3</version>
		</dependency>
</dependencies>

2.3创建MyBatis的核心配置文件

  • 习惯上命名为mybatis-config.xml,在resource文件夹创建,这个文件名仅仅只是建议,并非强制要求。将来整合Spring之后,这个配置文件可以省略,所以大家操作时可以直接复制、粘贴。核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息核心配置文件存放的位置是src/main/resources目录下

easycode一键生成jdbc代码方法

<?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">  
				**<!--pooled表示使用数据库连接池,会对使用的连接进行保存,下一次连接直接从连接池中取-->**  
				<property name="driver" value="com.mysql.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>

2.4创建mapper接口

MyBatis中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,我们不需要提供实现类

2.5创建MyBatis的映射文件

  • 相关概念:ORM(Object Relationship Mapping)对象关系映射。

    • 对象:Java的实体类对象
    • 关系:关系型数据库
    • 映射:二者之间的对应关系
      在这里插入图片描述
  • 映射文件的命名规则

    • 表所对应的实体类的类名+Mapper.xml 例如:表t_user,映射的实体类为User,所对应的映射文件为UserMapper.xml

    • 因此一个映射文件对应一个实体类,对应一张表的操作 MyBatis映射文件用于编写SQL,访问以及操作表中的数据

    • MyBatis映射文件存放的位置是src/main/resources/mappers目录下

  • MyBatis中可以面向接口操作数据,要保证两个一致

    • mapper接口的全类名和映射文件的命名空间(namespace)保持一致

    • mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致

    在UserMappsers.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.mapper.UserMapper">
    <!--int insertUser();-->
    <insert id="insertUser">
        insert into t_user values(1,'张三','123',23,'女',null)
    </insert>
</mapper>

2.6测试添加功能

@Test
    public void testMybatis() throws Exception{
        //加载核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder ssb = new SqlSessionFactoryBuilder();
        //获取SqlSessionFactory
        SqlSessionFactory ssf = ssb.build(is);
        //获取sqlsession true表示事务自动提交 下面的ss.comit可以不写 无参表示事务手动提交
        SqlSession ss = ssf.openSession(true);
        //获取mapper接口对象
        UserMapper mapper = ss.getMapper(UserMapper.class);
        //测试功能
        int count=mapper.insertUser();
        //提交事务
        ss.commit();
        System.out.println(count);


    }

此时需要手动提交事务,如果要自动提交事务,
则在获取sqlSession对象时,使用SqlSession sqlSession = sqlSessionFactory.openSession(true);,
传入一个Boolean类型的参数,值为true,这样就可以自动提交

2.7优化功能

加入log4j日志功能
加入依赖

<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>

加入log4j的配置文件
log4j的配置文件名为log4j.xml,存放的位置是src/main/resources目录下
日志的级别:FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试) 从左到右打印的内容越来越详细

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    </logger>
    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>

2.8测试修改和删除功能

 <update id="updateUser">
        update t_user set username='zs' where id=1
    </update>
    <!--void deleteUser();-->
    <delete id="deleteUser">
        delete from t_user where id=1
    </delete>

2.9查询功能

在这里插入图片描述
查询的标签select必须设置属性resultType或resultMap,用于设置实体类和数据库表的映射关系 否则会报上方错误
resultType:自动映射,用于属性名和表中字段名一致的情况
resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况
当查询的数据为多条时,不能使用实体类作为返回值,只能使用集合,否则会抛出异常TooManyResultsException;但是若查询的数据只有一条,可以使用实体类或集合作为返回值

2.10核心配置文件之environment

<environments default="development">
    <!--
    environment 配置某个具体的环境
    属性id 表示连接数据库环境的唯一标识不能重复
    -->
    <environment id="development">
        <!--
        transactionManaget 设置事务管理方式
        type=JDBC/MANAGED
        JDBC 表示当前环境中 执行sql时使用原生事务管理方式 事务的提交和回滚
        需要手动操作
        MANAGED 被管理 例如SPRING
        -->
        <transactionManager type="JDBC"/>
        <!--
        datasource 配置数据源
        属性
        type;数据源类型
        pooled/unpooled/jndi
        pooled 使用哦个连接池
        un不适用
        jndi 使用上下文的数据源
        -->
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
            <property name="username" value="root"/>
            <property name="password" value="162710"/>
        </dataSource>
    </environment>
</environments>##  2.11MyBatis核心配置文件之properties 

2.12properties文件

在resources目录下创建jdbc.properties文件
在这里插入图片描述
为防止名字重复 每个参数前加入jdbc前缀

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=162710

在mybatis-config.xml的configuration下引入properties文件
在这里插入图片描述
对dataresource进行修改

<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>
  1. MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接,#{}的本质就是占位符赋值
    ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号

2.13 MyBatis核心配置文件之typeAliases

在查询功能中 每个查询功能都要指定resulttype 如下所示

<select id="getUserByid" resultType="com.pojo.User">
    select * from t_user where id=1
</select>

如果有多个查询,每个都指定resulttype写入全类名会十分麻烦 所以在核心配置文件中引入typeAliases设置类型别名
在核心配置文件中标签有相应顺序 不按照顺序会报错
在这里插入图片描述
alias属性可以不写 ,写了的内容代表别名 比如User,不写的话表示默认为当前类名注意不是全类名,也就是User,不区分大小写。现在全类名就可以用User表示,并且类型别名不区分大小写 user也是一样的

  <typeAliases>
        <typeAlias type="com.pojo.User" alias="User"></typeAlias>
    </typeAliases>

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值