转载

MyBatis基础知识

1.mybatis的概念:

   ORM: 对象关系映射
    对象模型与数据库的关系模型是不匹配的,通常手动完成表中列与对象的属性之间的对应关系。
    
    表        《-----》    类
    表与表的关系    《--------》类与类(字段)的关系

    Hibernate(冬眠)/JPA(java持久化API)
    MyBatis/ibatis


2.mybatis的定义以及实现MyBatis的两种方法

    mybatis的定义:SQL映射(方法)技术,封装了JDBC的操作,简化了对关系数据库的操作的框架。

    1.基于XML(java 5之前没有注解)

           XML:


		<?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指定接口名称
		//id指定了方法名:selectBlog
		//调用了上述接口中的指定方法执行SQL语句
		//查询结果集封装成resultType指定的类型
		<mapper namespace="org.mybatis.example.BlogMapper">
 	 		<select id="selectBlog" resultType="Blog">
  	 			 select * from Blog where id = #{id}
  			</select>
		</mapper>

      java:

package org.mybatis.example;
		public interface BlogMapper {
 			
  			Blog selectBlog(int id);
			}

2.基于注解映射

package org.mybatis.example;
		public interface BlogMapper {
			//java5.0支持注解,不需要写BlogMapper.xml文件
 			 @Select("SELECT * FROM blog WHERE id = #{id}")
 			 Blog selectBlog(int id);
		}

3.官方介绍:

https://mybatis.org/mybatis-3/zh/index.html

SQL Mapping Framework for Java:基于java的SQL映射框架。


4.核心API

     SqlSessionFactory:SQL 会话工厂(数据库连接池)
    SqlSession:SQL会话(一个数据库连接)
    Mapper:SQL 映射(执行SQL语句)


5.基于SQL映射

    @One
	@Many
	@ResultMap:对@Result的命名,是可复用
	@Results:映射表和类
	@Result:具体的列和属性
	@MapKey:返回Map时指定key对应的属性
	@Options:其他选项,如获得自动生成的key

6.动态SQL

   定义:SQL语句执行时,会根据传入的参数的个数及参数的内容而发生变化。
               动态 SQL 基于条件查询。

xml方式:


	//select * from post where id in(1,2,3,);
	<select id="selectPostIn" resultType="domain.blog.Post">
 	 SELECT *
	  FROM POST P
 	 WHERE ID in
  		<foreach item="item" index="index" collection="list"
    	 	 open="(" separator="," close=")">
       	 	#{item}
  		</foreach>
	</select>
//条件(可选的)查询
	<select id="findActiveBlogWithTitleLike"
   	  resultType="Blog">
 	 SELECT * FROM BLOG
  	WHERE state = ‘ACTIVE’
		//可选条件
  		<if test="title != null">
   			 AND title like #{title}
  		</if>
	</select>

Java & 注解 实现动态 SQL

 return new SQL() {{
   	 SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FIRST_NAME, P.LAST_NAME");
    	FROM("PERSON P");
   	 if (id != null) {
      	WHERE("P.ID like #{id}");
    	}
    	if (firstName != null) {
      	WHERE("P.FIRST_NAME like #{firstName}");
   	 }
   	 if (lastName != null) {
     	 WHERE("P.LAST_NAME like #{lastName}");
    	}
   	 ORDER_BY("P.LAST_NAME");
  	}}.toString();
	

实现动态MySQL的方法

@SelectProvider
@DeleteProvider
@UpdateProvider
@InsertProvider

 

正文到此结束
本文目录