Mybatis基础

一、Mybatis概述

 mybatis是一个优秀的基于 java 的持久层框架,它内部封装了jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
    
mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql 的动态参数进行映射生成最终执行的sql语句,最后由 mybatis 框架执行sql并将结果映射为 java 对象并返回。
    
采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbc api底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作。
    什么是orm思想?
1、hibernate使用orm思想对数据库进行crud操作
2、在web阶段学习javabean更正确的叫法是:实体类
3、orm: object   relational   mapping  对象关系映射
* O:面向对象领域的ObjectJavaBean对象)
          * R:关系数据库领域的Relational(表的结构)
          * M:映射Mapping(XML的配置文件)
     (1)让实体类和数据库表进行一一对应关系
          先让实体类和数据库表对应
          再让实体类属性和表里面字段对应
     (2)不需要直接操作数据库表,直接操作 表对应的实体类对象
什么是ORM(对象关系映射)
4、达到的效果,直接创建实体类对象,即在数据库中创建了一个与之对应的表
    
    mybatis的特点:
      (1) 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
      (2) 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
      (3) 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
      (4)提供映射标签,支持对象与数据库的orm字段关系映射
      (5) 提供对象关系映射标签,支持对象关系组建维护
      (6) 提供xml标签,支持编写动态sql。
      (7) 支持数据缓存和注解开发。
    
    mybatis的官方网址: https://www.mybatis.org/

二、Mybatis环境搭建

(一). 导入依赖
  <dependencies>
     <dependency>
         <groupId>org.mybatis</groupId>
         <artifactId>mybatis</artifactId>
         <version>3.4.6</version>
     </dependency>
     <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>5.1.47</version>
         <scope>runtime</scope>
     </dependency>
     <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.12</version>
         <scope>test</scope>
     </dependency>
     <dependency>
         <groupId>log4j</groupId>
         <artifactId>log4j</artifactId>
         <version>1.2.17</version>
     </dependency>
 </dependencies>

(二)搭建项目环境

1. 编写User实体类
2. 编写持久层User接口
public interface UserDao {

 /**
     * 查询所有User对象
     * @return 返回List集合
     */
    public List<User> queryAllUsers();
}

3. 编写持久层User接口映射文件UserDao.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="cn.mojie.dao.UserDao">

 <!--配置查询的sql语句-->
 <select id="queryAllUsers" resultType="cn.mojie.entity.User">
      select * from user
 </select>

</mapper>
4. 编写mybatis主配置文件SqlMapConfig.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>
 <!-- 配置 mybatis的环境 -->
 <environments default="development">
     <!-- 配置环境 -->
     <environment id="development">
         <!-- 配置事务的类型 -->
         <transactionManager type="JDBC"></transactionManager>
         <!-- 配置连接数据库的信息:用的是数据源【连接池】-->
         <dataSource type="POOLED">
             <property name="driver" value="com.mysql.jdbc.Driver"/>
             <property name="url" value="jdbc:mysql://localhost:3306/mybatis001"/>
             <property name="username" value="root"/>
             <property name="password" value="root"/>
         </dataSource>
     </environment>
 </environments>
 <!--  注册UserDao接品映射文件位置 -->
 <mappers>
     <mapper resource="cn/mojie/dao/UserDao.xml"/>
 </mappers>
</configuration>

三、Mybatist入门案例

(一)入门案例编写

1.编写工具类读取配置文件

​ 利用Mybatis对数据库进行操作时,都需要产生Mybatis总配置文件的输入流对象、构建SqlSessionFactoryBuilder对象、调用build方法进产生SqlSessionFactory工厂对象、调用工厂类openSession()方法创建SqlSession对象,代码冗余量大,步聚颇有繁琐,所以我们对产生SqlSession对象利用工具类进行优化。

package cn.mojie;
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 java.io.InputStream; 

public class MyBatisUtils {

 //定义静态变量sqlSessionFactory
 private static  SqlSessionFactory sqlSessionFactory;

 //创建静态块,当MyBatisUtils类被加载时,自动执行该静态块,始初数据。
 static{
     try{
         //获取mybatis主配置文件SqlMapperConfig.xml的输入流
         InputStream inputStream= Resources.getResourceAsStream("SqlMapperConfig.xml");
         //创建SqlSessionFactoryBuilder构建者对象
         SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
         //调用build方法返回SqlSessionFactory工厂对象
         sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
     }catch (Exception e){
          e.printStackTrace();
         System.out.println("初始化数据失失败"+e.getMessage());
     }
 }

 //创建getSqlSessionFactory方法返回SqlSessionFactory对象
 public static SqlSessionFactory getSqlSessionFactory(){
     return sqlSessionFactory;
 }

 //创建一个SqlSession对象并返回
 public static SqlSession getSession(){
     return sqlSessionFactory.openSession();
 }

 //关闭SqlSession方法
 public static void close(SqlSession session){
     if(session!=null) session.close();
 }
}
2.使用代理对象操作数据库
public class UserTest {

 @Test
 public void testQueryAllUsers() throws  Exception{
     //1.获取mybatis主配置文件SqlMapperConfig.xml的输入流
     InputStream inputStream=Resources.getResourceAsStream("SqlMapperConfig.xml");
     //2.创建SqlSessionFactoryBuilder构建者对象
     SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
     //3.调用build方法返回SqlSessionFactory工厂对象
     SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
     //4.调用sqlSessionFactory的openSession方法返回一个Session对象
     SqlSession sqlSession = sqlSessionFactory.openSession();
     //5.调用SqlSession 创建 UserDao接口的代理对象
     UserDao userDao = sqlSession.getMapper(UserDao.class);
     //6.调用代理对象的queryAllUsers方法查询所有User
     List<User> users = userDao.queryAllUsers();
     users.forEach(System.out::print);
     //7.释放资源
     sqlSession.close();
     inputStream.close();
 }

 @Test
 public void testQueryAllUsers2() throws  Exception{
    //调用MyBatisUtils工具创建SqlSession对象
     SqlSession sqlSession = MyBatisUtils.getSession();
     //调用SqlSession 创建 UserDao接口的代理对象
     UserDao userDao = sqlSession.getMapper(UserDao.class);
     //调用代理对象的queryAllUsers方法查询所有User
     List<User> users = userDao.queryAllUsers();
     users.forEach(System.out::print);
     //释放资源
     sqlSession.close();
     inputStream.close();
 }
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值