MyBatis环境搭建

概述简介

  • MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。

  • MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

  • MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录.

Mybatis;和数据库进行交互,持久化层框架(SQL映射框架)

  1. 从原始的jdbc-dbutils(QueryRunner)--jdbcTemplate----xx;
    称工具
  • 工具:一些功能的简单封装
  • 框架:某个领域的整体解决方法;缓存,考虑异常处理问题,考虑部分字段映射问题

原生的JDBC Hibernate Mybatis 的介绍
JDBC:

  • 麻烦
  • sql语句是硬编码在程序中的【语句固定 修改需要重新编译 启动项目】耦合(数据库层和Java编码耦合)

Hibernate 数据库交互的框架(ORM框架 对象关系映射)(全自动框架)

  • 创建好javaBean 【@Table】
  • 黑箱操作【sql全部已经定义好了】
  • 缺点:自己编写sql代码麻烦【HQL】全映射机制【不能半映射 效率性能降低】

Mybatis 【支持定制sql,而且功能强大,sql也不要硬编码在java文件中(导致维护修改比较麻烦)】

  • Mybatis将重要的步骤抽取出来可以人工定制,其他步骤自动化
  • 重要步骤都是写在配置文件中(好维护)
  • 完全解决数据库的优化问题
  • Mybatis底层就是对原生JDBC的一个简单封装
  • 即将java编码与sql抽取出来,还不会失去自动化功能,半自动的持久化层框架
    图片说明

导包

一个包默认是就行了 mybatis-3.4.6.jar 还有一些驱动包 日志包
图片说明
以及日志依赖的log4j.xml
图片说明

搭建环境

mybatis的实现代码【】

  • 配置数据源
  • 引入我们自己编写的每一个接口的实现文件
    resource:表示从类路径下找资源
    <?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>
    <properties resource="db.properties"></properties>
    <environments default="development">
      <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
          <property name="driver" value="${jdbc.driverClass}"/>
          <property name="url" value="${jdbc.jdbcUrl}"/>
          <property name="username" value="${jdbc.user}"/>
          <property name="password" value="${jdbc.password}"/>
        </dataSource>
      </environment>
    </environments>
    <mappers>
      <mapper resource="com/project/mapper/MyMapper.xml"/>
    </mappers>
    </configuration>
    bean对象的代码
    public class book {
      public String isbn;
      public String book_name;
      public Integer price;
    }    
    环境查询信息接口代码
    public interface MyMapper {
      public Book getBookByIsbn(String isbn);
    }    
    对应接口的实现配置信息
  • namespace:名称空间:写接口的全类名,相当于告诉Mybatis这个配置文件是实现哪个接口的
  • public Book getBookByIsbn(String isbn);
    select 用来定义一个查询操作
    id:方法名,相当于这个配置是对于某个方法的实现
    resultType:指定方法运行后的返回值类型(查询操作必须指定的)
    ‘#’{属性名}:代表取出传递过来的某个参数的值
    <?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.project.mapper.MyMapper">
    <select id="getBookByIsbn" resultType="com.project.bean.Book">
      select * from book where isbn = #{isbn}
    </select>
    </mapper>
    实现文件mybatis默认是不知道的,需要在全局配置文件中注册
    测试代码
    根据全局配置文件先创建一个
public class MyService {
    @Test
    public void test() {
        // 1. 根据全局配置文件创建出一个SqlsessionFactory
        // SqlSessionFactory 是sqlSession工厂 负责创建sqlSession对象
        // SqlSession:sql会话(代表和数据库的一次会话)
        String resource = "mybatisConf.xml";
        InputStream inputStream = null;
        SqlSessionFactory sqlSessionFactory = null;
        SqlSession openSession = null;
        MyMapper myMapper = null;
        Book book = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            // 2.获取和数据库的一次会话:getConnnection()
            openSession = sqlSessionFactory.openSession();
            // 3. 使用sqlsession操作数据库,获取mapper接口的实现
            myMapper = openSession.getMapper(MyMapper.class);
            book = myMapper.getBookByIsbn("ISBN-001");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            openSession.close();
        }
        System.out.println(book);
    }
}
book [isbn=ISBN-001, book_name=book01, price=100]

SqlSession

SqlSession 的实例不是线程安全的,因此是不能被共享的。

SqlSession每次使用完成后需要正确关闭,这个关闭操作是必须的

SqlSession可以直接调用方法的id进行数据库操作,但是我们一般还是推荐使用SqlSession获取到Dao接口的类,执行对象的方法,可以更安全的进行类型检查操作

所有的相关查询【增删改查】 没有增删改提交 需要提交

sqlSessionFactory.openSession();--> sqlSessionFactory.openSession(true);自动提交

  • 增删改查代码

    public class MyService {
      private InputStream inputStream = null;
      private SqlSessionFactory sqlSessionFactory = null;
    
      @Before
      public void initFunc() {
          System.out.println("启动初始化");
          String resource = "mybatisConf.xml";
          try {
              inputStream = Resources.getResourceAsStream(resource);
          } catch (IOException e) {
              e.printStackTrace();
          }
          sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      }
    
      @Test
      public void insertBookTest() {
          SqlSession openSession = sqlSessionFactory.openSession();
          try {
              MyMapper myMapper = openSession.getMapper(MyMapper.class);
              Book book = new Book();
              book.setBook_name("java");
              book.setIsbn("ISBN-007");
              book.setPrice(500);
              System.out.println(myMapper.insertBook(book));
          } finally {
              openSession.commit();
              openSession.close();
          }
      }
    
      @Test
      public void deleteBookTest() {
          SqlSession openSession = sqlSessionFactory.openSession();
          try {
              MyMapper myMapper = openSession.getMapper(MyMapper.class);
              System.out.println(myMapper.deleteBookByIsbn("ISBN-007"));
          } finally {
              openSession.commit();
              openSession.close();
          }
      }
    
      @Test
      public void updateBookTest() {
          SqlSession openSession = sqlSessionFactory.openSession();
          try {
              MyMapper myMapper = openSession.getMapper(MyMapper.class);
              Book book = new Book();
              book.setBook_name("book003");
              book.setIsbn("ISBN-003");
              book.setPrice(700);
              System.out.println(myMapper.updateBook(book));
          } finally {
              openSession.commit();
              openSession.close();
          }
      }
    
      @Test
      public void getAllBookTest() {
          SqlSession openSession = sqlSessionFactory.openSession();
          try {
              MyMapper myMapper = openSession.getMapper(MyMapper.class);
              List<Book> ls = myMapper.getBookAll();
              for (Book book : ls) {
                  System.out.println(book);
              }
          } finally {
              openSession.close();
          }
      }
    }
  • 配置MyMapper.xml

    <mapper namespace="com.project.mapper.MyMapper">
    <select id="getBookByIsbn" resultType="com.project.bean.Book">
      select * from book where isbn = #{isbn}
    </select>
    
    <select id="getBookAll" resultType="com.project.bean.Book">
      select * from book 
    </select>
    
    <insert id="insertBook" parameterType="com.project.bean.Book">
        insert into book(book_name,price,isbn) values(#{book_name},#{price},#{isbn}) 
    </insert>
    <!--
        增删改不用写返回值类型,增删改是返回影响多少行
        mybatis自动判断,如果是数字(int long)
        如果是boolean(影响0行自动封装 false 否则true)
        #{属性名},从传入的参数对象中取出对应属性的值 
    -->
    <update id="updateBook" parameterType="com.project.bean.Book">
        update book set book_name = #{book_name} , price = #{price} where isbn = #{isbn}
    </update>
    
    <delete id="deleteBookByIsbn" parameterType="String">
        delete from book where isbn = #{isbn}
    </delete>
    </mapper>

    可以更加详细的匹配
    图片说明

全部评论

相关推荐

点赞 评论 收藏
分享
诨号无敌鸭:恭喜佬,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务