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>

转载于:https://www.cnblogs.com/kklb/p/11432250.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值