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标签

     

  • 相关阅读:
    《C# to IL》第一章 IL入门
    multiple users to one ec2 instance setup
    Route53 health check与 Cloudwatch alarm 没法绑定
    rsync aws ec2 pem
    通过jvm 查看死锁
    wait, notify 使用清晰讲解
    for aws associate exam
    docker 容器不能联网
    本地运行aws lambda credential 配置 (missing credential config error)
    Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
  • 原文地址:https://www.cnblogs.com/lin02/p/11233930.html
Copyright © 2011-2022 走看看