zoukankan      html  css  js  c++  java
  • Mybatis学习日志一

    一、初识Mybatis

      MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索封装。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录.
    二、使用步骤 

      1. 加入相关的jar包。

      2. 创建相应的实体类bean。

      3. 创建mybatis的配置文件。 

      4. 创建mybatis的映射文件。

      5. mybatis的映射文件要引入到配置文件中。

      6. 测试。

     三、优化

      1.如果映射文件中的查询条件有多个,则可以使用Map集合作为参数

      2.将属性文件单独列出db.recourses,需要将属性文件导入Mybatis配置文件中,之后使用${}

        <properties resource="db.properties"></properties>

        ${jdbc.driver}

      3.为实体类起别名,为包下所有类起别名,别名为类名(不建议使用,不方便别人解读代码)

        <typeAliases>
          <package name="com.zhiyou100.klb.bean"/>
        </typeAliases>

      4.加入日志信息log4j.properties,方便我们查错

     四、使用接口结合xml文件

      1.创建一个接口,该接口要和映射文件匹配。方法名=ID名

      2.映射文件中,命名空间要与映射文件路径一直,例如:com.zhiyou100.klb.dao.UsersDao

      3.测试程序运行状况,  

        //解析conf.xml
        Reader reader = Resources.getResourceAsReader("conf.xml");
        //获取sessionFactory对象
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //获取session对象,用于操作数据库
        session = sessionFactory.openSession();
        //得到接口的实现类
        usersDao = session.getMapper(UsersDao.class);

    五、解决数据库中的字段与类中的属性不匹配问题

      1.在SQL语句中为字段起别名,别名与类的属性名一致

      2.利用resultMap  

        <!--引用resultMap标签 -->
        <select id="getClazz" parameterType="int" resultMap="clazzMap"></select>
        <!--resultMap:写数学与字段的对应关系
        type:表示哪个实体类与表的对应关系
        -->
        <resultMap type="com.zhiyou100.klb.bean.Clazz" id="clazzMap">
          <!-- ID:表示表中的主键与实体类的属性的对应关系 -->
          <id column="c_id" property="cid"/>
          <result column="c_name" property="cname"/>
          <result column="teacher_id" property="tid"/> 
        </resultMap>

     六、联表查询

      <!--引用resultMap标签 -->
      <select id="getClazz" parameterType="int" resultMap="clazzMap">
      select * from class c,teacher t,student s where c.teacher_id=t.t_id and c.c_id=s.class_id and c.c_id = #{id}
      </select>

      <!--resultMap:写数学与字段的对应关系
      type:表示哪个实体类与表的对应关系
      -->
      <resultMap type="com.zhiyou100.klb.bean.Clazz" id="clazzMap">
      <!-- ID:表示表中的主键与实体类的属性的对应关系 -->
      <id column="c_id" property="cid"/>
      <result column="c_name" property="cname"/>
      <result column="teacher_id" property="tid"/>

      <association property="teacher" javaType="com.zhiyou100.klb.bean.Teacher">
      <id column="t_id" property="tid"/>
      <result column="t_name" property="tname"/>
      </association>

      <collection property="students" ofType="com.zhiyou100.klb.bean.Student">
      <id column="s_id" property="sid"/>
      <result column="s_name" property="sname"/>
      <result column="class_id" property="cid"/>
      </collection>
      <!-- <association property="teacher" javaType="com.zhiyou100.klb.bean.Teacher"
      column="teacher_id" select="com.zhiyou100.klb.dao.TeacherDao.getTeacher">
      </association> -->
      </resultMap>

    七、Mybatis中${ }和#{ }的区别

    1. $: 解析时不会为内容添加”” 他是sql语句的拼接存在sql注入的危害。传入的为表结构时。
    2. #: 解析时会为内容添加””,它的sql时采用占位符,防止sql注入。

    八、添加对象时如何返回ID

      <insert id="add" parameterType="Users" useGeneratedKeys="true" keyProperty="id">
        insert into users(name,age) values(#{name},#{age})
      </insert>

  • 相关阅读:
    TCP/IP协议详解
    linux高性能服务器编程--初见
    聚合类
    类class 2
    继承
    构造函数再探
    静态成员与友元
    MySQL图形工具SQLyog破解版
    MySQL注释符号
    数据库中多对多关系的中间表的命名规则
  • 原文地址:https://www.cnblogs.com/kklb/p/11432250.html
Copyright © 2011-2022 走看看