1.MyBatis 简介

一.MyBatis 简介

1、MyBatis历史

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)。

MyBatis下载地址:GitHub - mybatis/mybatis-3: MyBatis SQL mapper framework for Java

2、MyBatis特性
  • MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
  • MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
  • MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录
  • MyBatis 是一个 半自动的ORM(Object Relation Mapping)框架
3、框架对比
JDBC
  • SQL 夹杂在Java代码中耦合度高,导致硬编码内伤
  • 维护不易且实际开发需求中 SQL 有变化,频繁修改的情况多见
  • 代码冗长,开发效率低
Hibernate & JPA
  • 操作简便,开发效率高
  • 程序中的长难复杂 SQL 需要绕过框架
  • 内部自动生产的 SQL,不容易做特殊优化
  • 基于全映射的全自动框架,大量字段的 POJO 进行部分映射时比较困难。
  • 反射操作太多,导致数据库性能下降
MyBatis
  • 轻量级,性能出色
  • SQL 和 Java 编码分开,功能边界清晰。Java代码专注业务、SQL语句专注数据
  • 开发效率稍逊于HIbernate,但是完全能够接受

二.MyBatis 搭建

1、引入依赖
<dependencies> 
  <!-- Mybatis核心 --> 
  <dependency> 
    <groupId>org.mybatis</groupId> 
    <artifactId>mybatis</artifactId> 
    <version>3.5.7</version> 
  </dependency>
  <!-- log4j日志 --> 
  <dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.17</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>8.0.16</version> 
  </dependency> 
</dependencies>
2、创建配置文件

mybatis-config.xml主要用于配置连接数据库的环境以及MyBatis的全局配置信息

核心配置文件存放的位置是src/main/resources目录下

<?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.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
        <property name="username" value="root"/>
        <property name="password" value="0903he0419"/>
      </dataSource>
    </environment>
  </environments>
  <!--引入映射文件-->
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

log4j配置文件

<?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>
3、创建接口
public interface UserMapper { 
    /*** 添加用户信息 */ 
    int insertUser(); 
}
4、创建xml映射文件
  • 映射文件的命名规则:
    • 表所对应的实体类的类名+Mapper.xml
    • MyBatis映射文件用于编写SQL,访问以及操作表中的数据
    • MyBatis映射文件存放的位置是src/main/resources/mapper接口目录 在resources目录下创建包不能使用"."应该使用“/”
  • MyBatis中可以面向接口操作数据,要保证两个一致:
    • mapper接口的全类名和映射文件的命名空间(namespace)保持一致
    • mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致
<?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.lemon.mybatis.mapper.UserMapper">
  <!--int insertUser();-->
  <insert id="insertUser">
    insert into t_user values(null,'tom','123456',23,'男','mybatis@163.com');
  </insert>

  <!--查询标签必须设置resultType或resultMap
	resultType:设置默认的映射关系(字段名和属性名一致)
	resultMap:设置自定义的映射关系-->
    <select id="getUserById" resultTyp="com.lemon.mybatis.pojo.User">
		select * from t_user where id = 3
	</select>
</mapper>
5、测试
//读取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);

三.配置文件说明

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

  <!--
  MyBatis核心配置文件中的标签必须要按照指定的顺序配置:
  properties?,settings?,typeAliases?,typeHandlers?,
  objectFactory?,objectWrapperFactory?,reflectorFactory?,
  plugins?,environments?,databaseIdProvider?,mappers?
  -->

  <!--引入properties文件,此后就可以在当前文件中使用${key}的方式访问value-->
  <properties resource="jdbc.properties" />

  <!--
  typeAliases:设置类型别名,即为某个具体的类型设置一个别名
  在MyBatis的范围中,就可以使用别名表示一个具体的类型
  -->
  <typeAliases>
    <!--
    type:设置需要起别名的类型
    alias:设置某个类型的别名
    -->
    <!--<typeAlias type="com.atguigu.mybatis.pojo.User" alias="abc"></typeAlias>-->
    <!--若不设置alias,当前的类型拥有默认的别名,即类名且不区分大小写-->
    <!--<typeAlias type="com.atguigu.mybatis.pojo.User"></typeAlias>-->
    <!--通过包设置类型别名,指定包下所有的类型将全部拥有默认的别名,即类名且不区分大小写-->
    <package name="com.atguigu.mybatis.pojo"/>
  </typeAliases>

  <!--
  environments:配置连接数据库的环境
  属性:
  default:设置默认使用的环境的id
  -->
  <environments default="development">
    <!--
    environment:设置一个具体的连接数据库的环境
    属性:
    id:设置环境的唯一标识,不能重复
    -->
    <environment id="development">
      <!--
      transactionManager:设置事务管理器
      属性:
      type:设置事务管理的方式
      type="JDBC|MANAGED"
      JDBC:表示使用JDBC中原生的事务管理方式
      MANAGED:被管理,例如Spring
      -->
      <transactionManager type="JDBC"/>
      <!--
      dataSource:设置数据源
      属性:
      type:设置数据源的类型
      type="POOLED|UNPOOLED|JNDI"
      POOLED:表示使用数据库连接池
      UNPOOLED:表示不使用数据库连接池
      JNDI:表示使用上下文中的数据源
      -->
      <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>

    <environment id="test">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>

  <!--引入mybatis的映射文件-->
  <mappers>
    <!--<mapper resource="mappers/UserMapper.xml"/>-->
    <!--
    以包的方式引入映射文件,但是必须满足两个条件:
    1、mapper接口和映射文件所在的包必须一致
    2、mapper接口的名字和映射文件的名字必须一致
    -->
    <package name="com.atguigu.mybatis.mapper"/>
  </mappers>
</configuration>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值