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>

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

全部评论

相关推荐

点赞 评论 收藏
分享
努力成为C语言高手:质疑大祥老师,理解大祥老师,成为大祥老师
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务