zoukankan      html  css  js  c++  java
  • mybatis

    1.框架

    框架是一个半成品,已经对基础的代码进行了封装并提供相应的API,开发者在使用框架是直接调用封装好的api可以省去很多代码编写,从而提高工作效率和开发速度

    2.mybatis框架

    是一个持久层框架,和数据库打交道的一个框架,它对jdbc的操作数据库的过程进行了封装,是开发者是要关注sql语句,而不用话费太多时间去注册驱动,关闭资源等等。

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。

    3.mybatis入门程序

    1. 引入jar包(mybatis,驱动包)

    2. 配置mybatis的配置文件(SqlMapConfig.xml)

        配置数据源,事务   (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>
        <environments default="dd">
            <environment id="dd">
                <!--事务:使用jdbc事务-->
                <transactionManager type="JDBC"/>
                <!--数据库连接池-->
                <dataSource type="POOLED">
                    <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
                    <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
                    <property name="username" value="scott"/>
                    <property name="password" value="scott"/>
                </dataSource>
            </environment>
        </environments>
        <!--加载映射文件-->
        <mappers>
            <mapper resource="Goods.xml"/>
        </mappers>
    </configuration>

      3.创建实体类(类中的属性和数据库表字段名一样)  (java类)

    public class Goods {
        private Integer gid;
        private String gname;
        private double gprice;  //BigDecimal
        private GoodsType goodsType;
        //setter 和 getter
    }

      4.配置映射文件(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  命名空间-->
    <!--
    parameterType  参数类型
    resultType   结果类型 如果结果类型是一个类,
    查询的结果会自动设置到类实例的属性中
    -->
    <mapper namespace="test">
        <select id="findOneById" parameterType="int" resultType="com.sc.pojo.Goods">
          select * from goods where gid = #{gid}
        </select>
    </mapper>
    1. 编程测试  (java类)
    import com.sc.pojo.Goods;
    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.Reader;
    
    public class Test {
       public static void main(String[] args) throws  Exception {
           //1.读取配置文件
           Reader reader
                   = Resources.getResourceAsReader("SqlMapConfig.xml");
           //2.创建会话工厂,用来创建sqlSession
           SqlSessionFactory sqlSessionFactory
                   = new SqlSessionFactoryBuilder().build(reader);
           //3.创建sqlSession,用来操作数据库
           SqlSession sqlSession
                   = sqlSessionFactory.openSession();
           //4.执行sql
           //namespace.id
           Goods goods =
                   sqlSession.selectOne("test.findOneById",10);
           System.out.println(goods.getGname());
           //5.关闭资源
           sqlSession.close();
       }
    }

    4.#{}和${}的使用

    #{}表示一个占位符号,相当于预编译对象的? ,通过#{}可以实现preparedStatement向占位符中设置值,#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。如果parameterType 是pojo,#{}括号中是类的属性名称。

    ${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。

     

    5.查询   (mapper.xml文件)

    <select id="findOneById" parameterType="int" resultType="com.sc.pojo.Goods">
          select * from goods where gid = #{gid}
        </select>

    6.删除   (mapper.xml文件) 

    <delete id="deleById" parameterType="int">
          delete from GOODS where GID = #{value}
    </delete>

    7.修改  (java文件)

    GoodsType goodsType = new GoodsType(2,"");
    Goods goods = new Goods(12,"葡萄",100,goodsType);
    int row = sqlSession.update("test.updateGoods",goods)

    (mapper.xml文件)

    <update id="updateGoods" parameterType="com.sc.pojo.Goods">
            update GOODS set gname=#{gname},gprice=#{gprice} 
            where GID=#{gid}
    </update>

    8.添加   (java文件)

    GoodsType goodsType = new GoodsType(2,"");
    Goods goods = new Goods(12,"葡萄",100,goodsType);

    (mapper.xml文件)

    <insert id="saveGoods" parameterType="com.sc.pojo.Goods">
            insert into GOODS values
            (SEQ_GOOD.nextval,#{gname},#{gprice},#{goodsType.tid})
    </insert>

    9.resultMap

     一对一查询

    ​     方式一:使用 association (单条记录)

    ​     方式二:定义一个扩展类 ,类中定义属性,属性和查询出来的表字段对应

       一对多查询

        resultMap :用来解决表字段和类属性名不一致的情况

    ​     如果类中有对象类型的属性,用到association标签 javaType.

    ​     如果类中有List 类型的属性,用到collection标签

     

  • 相关阅读:
    [官网]清华大学的开源镜像站点 配置方法
    Android MIFARE NFCA源码解析
    Delphi XE8 TStyleBook的使用
    【FireMonkey】StyleBook使用方法
    Delphi第三方组件安装DCU.PAS.DPK.BPL.ActiveX控件
    M1卡说明及使用proxmark3破解方法
    M1卡修改各区块控制位值和数据
    DICOMDIR
    ZentaoPMS 系统的优先级以及修改
    集成禅道和svn
  • 原文地址:https://www.cnblogs.com/lin02/p/11233930.html
Copyright © 2011-2022 走看看