zoukankan      html  css  js  c++  java
  • Mybatis

    Mybatis

    优秀的持久层 框架(解耦、代码的复用) 。它是对jdbc做了一个简单的封装。免除了写jdbc繁琐的代码。他也被叫做 ORM(Object Relation Mapping / 对象关系映射)框架

    ORM :

    O:Object -> model

    R:Relation -> 对象与表的关系

    M:Mapping -> 通过sql语句 把表中的字段值映射到对象属性中

    Mybatis 有两个核心的配置文件

    1. mybatis-config.xml / 配置数据库和事务管理范围,事务管理器等

    2. xxxxMapping.xml / SQL语句的映射文件

    使用Mybatis步骤

    1. 导入mybatis 、 数据库连接 jar包

    2. 配置mybatis-config.xml / 配置数据源

      创建SqlSessionFactory有两种方式:1.编程式(java代码);2.声明式(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>
          <!--给对象配置一个别名-->
          <typeAliases>
              <!--如果原类名过长,可以通过改标签起一个别名-->
              <typeAlias type="原类名(全类名)" alias="别名"></typeAlias>
          </typeAliases>
          
          <!--配置使用的环境  默认是开发环境-->
          <environments default="development">
              <!--开发环境-->
              <environment id="development">
                  <!--事务管理器  使用JDBC的事务管理-->
                  <transactionManager type="JDBC"/>
                  <!--数据源-->
                  <dataSource type="POOLED">
                      <property name="driver" value="com.mysql.jdbc.Driver"/>
                      <property name="url" value="jdbc:mysql://127.0.0.1:3306/demo"/>
                      <property name="username" value="root"/>
                      <property name="password" value="301415"/>
                  </dataSource>
              </environment>
          </environments>
          
          <!--第四步:注册映射文件-->
          <mappers>
              <mapper resource="org/mybatis/example/BlogMapper.xml"/>
          </mappers>
      </configuration>
    3. 配置映射文件: 对象与表的关系 ,使用SQL语句把表的字段值 映射 到 对应的属性上

    <?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">
    
    <!--namespace:命名空间 与java的包名作用类似 方便管理 防止命名重名-->
    <mapper namespace="org.mybatis.example.BlogMapper">
        <!--select:表示执行select语句-->
        <!--id:类似方法名-->
        <!--resultType:类似返回类型(类的全名)-->
        <!--#{}:占位符-->
      <select id="selectBlog" resultType="Blog">
        select * from Blog where id = #{id}
          <!--映射时表的字段名 与 对象的对应的属性名 一致才能映射成功 / 可以通过 as 取别名对应-->
      </select>
    </mapper>
    1. 把映射文件 注册到mybatis-config.xml中

    2. 运行代码使用

     
     String resource = "config/mybatis-config.xml";
            InputStream inputStream = null;
            try {
                //创建sqlSessionFactory
                inputStream = Resources.getResourceAsStream(resource);
                SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    
                //获得连接对象SqlSession
                SqlSession session = sqlSessionFactory.openSession();
                
                //使用SqlSession调用 映射文件 中的方法
                CityBean cityBean = (CityBean) session.selectOne("bean.selectByCity", 1);
                
                //session.selectOne() -> 查询一条数据
                //session.selectList() -> 查询数据集合
                //session.update() -> 修改数据
                //session.delete() -> 删除数据
                //session.insert() -> 添加数据
                
                //使用Mybatis进行增删改时必须要提交事务。不然,数据库中不会执行。
                SqlSession.commit();//事务的提交
                SqlSession.rollback();//事务的回滚

    xxxxMapping.xml / SQL语句的映射文件 中的增删改查

    <!---->
        <!--select:表示执行select语句-->
        <!--id:类似方法名-->
        <!--resultType:类似返回类型(类的全名)-->
        <!--#{}:占位符-->
      <select id="selectBlog" resultType="Blog">
        select * from Blog where id = #{id}
          <!--映射时表的字段名 与 对象的对应的属性名 一致才能映射成功 / 可以通过 as 取别名对应-->
      </select>
    
    <!---->
        <!--id:类似方法名-->
        <!--parameterType:参数类型-->
        <insert id="insertAuthor" parameterType="domain.blog.Author">
            insert into Author (id,username,password,email,bio) values (#{id},#{username},#{password},#{email},#{bio})
            <!--添加操作时,占位符的名称与对应属性的名字相同(原理:调用对应属性的get方法,与get方法的名字相同)-->
        </insert>
    
    <!---->
        <delete id="deleteAuthor" parameterType="int">
           delete from Author where id = #{id}
        </delete>
    
    <!---->
        <update id="updateAuthor" parameterType="domain.blog.Author">
          update Author set
            username = #{username},
            password = #{password},
            email = #{email},
            bio = #{bio}
          where id = #{id}
    </update>
  • 相关阅读:
    bzoj 2969: 矩形粉刷 概率期望+快速幂
    loj #6191. 「美团 CodeM 复赛」配对游戏 期望dp
    CF446C DZY Loves Fibonacci Numbers 线段树 + 数学
    CF696B Puzzles 概率期望
    bzoj 3566: [SHOI2014]概率充电器 数学期望+换根dp
    loj #6342. 跳一跳 期望dp
    CF316G3 Good Substrings 广义后缀自动机
    bzoj 3829: [Poi2014]FarmCraft 树形dp+贪心
    bzoj 2131: 免费的馅饼
    CF19D Points 平衡树
  • 原文地址:https://www.cnblogs.com/-Archenemy-/p/12907513.html
Copyright © 2011-2022 走看看