精华内容
下载资源
问答
  • 安全配置 复写 系统日志文件 原始数据库实例 数据提取即服务 测验 有用的Docker命令 docker exec -it [img-id] psql -U postgres(连接到postgres) docker-compose开始/停止 码头工人检查[obj] 数据库架构 2个...
  • 复习day1环境搭建CRUD操作DB6个核心的APIday2TO PO DO 及其状态切换OID 自然主键 代理主键(uuid)一级缓存 Session绑定 load/get关系1对1 1对多(重点) 一set one-to-many 多many-to-one对多对 两边都是set ...

    复习
    day1
    环境搭建
    CRUD操作DB
    6个核心的API
    day2
    TO PO DO 及其状态切换
    OID 自然主键 代理主键(uuid)
    一级缓存 Session绑定
    load/get
    关系
    1对1
    1对多(重点) 一set one-to-many 多many-to-one
    对多对 两边都是set many-to-many
    表结构 外键
    对象 Set 对象
    配置
    级联操作 cascade 多
    inverse true/false
    --------------------------------------------
    数据查询(数据检索)
    OID数据查询方式
    load/get 3个不同点
    HQL数据查询方式
    HQL语句 Query
    QBC数据查询方式
    Criteria
    本地SQL查询方式
    SQL语句 SQLQuery
    OGN数据查询方式
    获取到了对象后,就可以读取对象中所包含的对象的属性
    对象名.对象名.属性
    sm.teacher.teacherName

    HQL数据查询方式
    1.简单查询
    select内容是按照数据库的顺序给定的,开发中字段
    2.链式格式
    3.查询结果的获取
    查询数据总量:
    多条数据
    单一数据
    查询结果
    单一对象或者单一属性
    多个属性或对象
    4.别名
    5.聚合函数使用
    6.分页
    7.条件查询
    参数设定可以使用索引格式或者使用变量名格式
    设置参数
    setParameter(??,??)
    setLong(??,??) setString(??,??)
    setEntity(??,对象)
    *对象必须是DO PO(具有OID)
    8.投影
    构造方法
    List
    Map
    0 李若亮
    1 Jock
    0 张三丰
    1 张真人
    9.分组
    group by 属性
    10.排序
    order by 属性
    11.多态查询(不用)
    OrderModel
    Order1Model
    Order2Model
    如果当前模型在cfg.xml中注册了,包名可以省略不写
    java.lang.Object
    TeacherModel
    12.配置格式的查询
    1.在任意的hbm.xml文件中添加命名的查询HQL,query元素属于hibernate-mapping子元素,不是class的子元素
    <query name="getAll">
    <![CDATA[from TeacherModel where teacherName = :name]]>
    </query>
    2.Query对象获取
    s.getNamedQuery(配置查询的名称"getAll")
    3.其他内容同普通查询
    以上操作均为单表查询
    -----------------
    以下操作为多表查询
    多表查询,7种
    交叉连接(笛卡尔积)
    内连接
    内连接
    “from TeacherModel tm inner join tm.students s”
    数据模型:主表数据 主表关联的数据
    数据总量:关联数据总量
    迫切内连接
    “from TeacherModel tm inner join fetch tm.students s”
    数据模型:主表数据
    数据总量:关联数据总量
    隐式内连接
    “from TeacherModel”
    数据模型:主表数据
    数据总量:主表数据总量
    外连接
    左外连接
    “from TeacherModel tm left outer join tm.students s ”
    数据模型:主表数据 主表关联的数据
    数据总量:从表被关联数据总量+主表未关联数据总量
    迫切左外连接
    “from TeacherModel tm left outer join fetch tm.students s ”
    数据模型:主表数据
    数据总量:从表被关联数据总量+主表未关联数据总量
    右外连接
    “from TeacherModel tm right out join tm.students s”
    数据模型:主表数据 主表关联的数据
    数据总量:从表数据总量

    迫切连接与非迫切连接区别
    0.获取的数据总量都相同
    1.非迫切连接包含主和从
    2.迫切连接只包含主

    转载于:https://www.cnblogs.com/xyhero/p/9348825.html

    展开全文
  • 投影(Projections)、聚合(aggregation)和分组(grouping) 15.8. 离线(detached)查询和子查询 15.9. 根据自然标识查询(Queries by natural identifier) 16. Native SQL查询 16.1. 使用SQLQuery 16.2. 别名和...
  • 组件配置 不同表 一对一关联映射 多对一 一对多 多对多 2、对象查询 OID get: load: HQL(面向对象的查询语句) 条件查询 投影查询(只查询结果中的部分内容) 不封装对象 封装对象 分页查询 setFirstReult:查询的...

    05.Hibernate中的关联关系映射,对象查询,二级缓存

    1、关联关系映射

    同表
    组件配置

    不同表
    一对一关联映射

    多对一
    一对多
    多对多

    2、对象查询

    OID
    get:
    load:
    HQL(面向对象的查询语句)
    条件查询
    投影查询(只查询结果中的部分内容)
    不封装对象
    封装对象
    分页查询
    setFirstReult:查询的起始位置
    setMaxResult:查询的内容数量
    连接查询
    迫切
    因为结果数量对标了普通查询结果,所以需要去重复
    非迫切
    内联、左外连接、右外连接、全连接、交叉链接
    报表查询(GROUP BY HAVING ,SUM,AVG,MAX,MIN,COUNT)
    动态SQL
    QBC
    标准化查询
    本地SQL
    执行批量操作
    使用HQL的步骤
    1、创建Query对象
    2、调用Query的方法

    3、二级缓存(当Session被关闭之后,仍然缓存在SessionFactory中)

    Session缓存
    SessionFactory缓存
    	
    	两块
    		内置缓存
    			不是我们要操作的内容,里面存放了大量Hibernate的配置信息
    		外置缓存
    			默认处于关闭状态
    			适合存放的内容
    				频繁的被读取的内容,少有被修改的
    				允许并发的数据
    			Hibernate提供并发访问策略
    				Nonstrict-read-write:非严格的读写,对应READ UNCOMMITTED
    				Read-write:读写,对应READ COMMITTED
    				Transaction:事务,对应REPEATABLE READ
    				Read-only:只读,对应SERIALIZABLE
    			可配置的缓存插件
    				EHCache:
    				OpenSymphony OSCache,SwarmCache,JBossCache
    			配置二级缓存
    				加入jar包:hibernate-release-5.4.22.Final\lib\optional\ehcache
    				加入EHCache配置文件:hibernate-release-5.4.22.Final\project\etc
    				开启Hibernate外置二级缓存的支持:
    <propertyname="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.internal.EhcacheRegionFactory</property>
    				设置哪些内容加入二级缓存:<class-cache usage="缓存策略" class="被缓存的类"/>
    

    4、session与线程绑定

    案例

    案例1:多对一(一对多)

    导入相应的jar包

    创建实体类

    创建一个班级类ClassInfo.java

    package com.zb.entity;
    
    import java.util.HashSet;
    import java.util.Set;
    
    public class ClassInfo {
    	private Integer class_id;
    	private String class_name;
    	private String class_address;
    	private String class_manager;
    	// 关联关系配置在一段(一对多,数据库中怎么记录跟我们没有关系)
    	private Set<StuInfo> stuInfos = new HashSet<StuInfo>();//初始化集合
    
    	public Integer getClass_id() {
    		return class_id;
    	}
    
    	public void setClass_id(Integer class_id) {
    		this.class_id = class_id;
    	}
    
    	public String getClass_name() {
    		return class_name;
    	}
    
    	public void setClass_name(String class_name) {
    		this.class_name = class_name;
    	}
    
    	public String getClass_address() {
    		return class_address;
    	}
    
    	public void setClass_address(String class_address) {
    		this.class_address = class_address;
    	}
    
    	public String getClass_manager() {
    		return class_manager;
    	}
    
    	public void setClass_manager(String class_manager) {
    		this.class_manager = class_manager;
    	}
    
    	public Set<StuInfo> getStuInfos() {
    		return stuInfos;
    	}
    
    	public void setStuInfos(Set<StuInfo> stuInfos) {
    		this.stuInfos = stuInfos;
    	}
    
    	public ClassInfo() {
    		super();
    	}
    
    	@Override
    	public String toString() {
    		return "ClassInfo [class_id=" + class_id + ", class_name=" + class_name + ", class_address=" + class_address
    				+ ", class_manager=" + class_manager + ", classId=" + stuInfos + "]";
    	}
    }
    

    创建一个学生类StuInfo.java

    package com.zb.entity;
    
    public class StuInfo {
    	private Integer stu_id;
    	private String stu_name;
    	private String stu_sex;
    	private Integer stu_age;
    	private Integer class_id;
    	// 关联关系保存在多的一端(多对一)
    	//private ClassInfo classInfo;
    
    	public Integer getStu_id() {
    		return stu_id;
    	}
    
    	public void setStu_id(Integer stu_id) {
    		this.stu_id = stu_id;
    	}
    
    	public String getStu_name() {
    		return stu_name;
    	}
    
    	public void setStu_name(String stu_name) {
    		this.stu_name = stu_name;
    	}
    
    	public String getStu_sex() {
    		return stu_sex;
    	}
    
    	public void setStu_sex(String stu_sex) {
    		this.stu_sex = stu_sex;
    	}
    
    	public Integer getStu_age() {
    		return stu_age;
    	}
    
    	public void setStu_age(Integer stu_age) {
    		this.stu_age = stu_age;
    	}
    /*
    	public ClassInfo getClassInfo() {
    		return classInfo;
    	}
    
    	public void setClassInfo(ClassInfo classInfo) {
    		this.classInfo = classInfo;
    	}
    	public StuInfo(String stu_name, String stu_sex, Integer stu_age, ClassInfo classInfo) {
    		super();
    		this.stu_name = stu_name;
    		this.stu_sex = stu_sex;
    		this.stu_age = stu_age;
    		this.classInfo = classInfo;
    	}
     */
    	
    	
    	public Integer getClass_id() {
    		return class_id;
    	}
    
    	public StuInfo(String stu_name, String stu_sex) {
    		super();
    		this.stu_name = stu_name;
    		this.stu_sex = stu_sex;
    	}
    
    	public void setClass_id(Integer class_id) {
    		this.class_id = class_id;
    	}
    
    	public StuInfo() {
    		super();
    	}
    /*
    	@Override
    	public String toString() {
    		return "StuInfo [stu_id=" + stu_id + ", stu_name=" + stu_name + ", stu_sex=" + stu_sex + ", stu_age=" + stu_age
    				+ ", classInfo=" + classInfo + "]";
    	}
    	*/
    }
    

    配置全局cfg.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
    		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    		"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
        	<!-- 数据库连接 -->
        	<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    		<property name="hibernate.connection.username">root</property>
    		<property name="hibernate.connection.password">123456</property>
    		<property name="hibernate.connection.url">jdbc:mysql:///user_db?characterEncoding=UTF-8</property>
        	<!-- 数据库方言 -->
        	<property name="hibernate.dialect">org.hibernate.dialect.MySQL55Dialect</property>
        	<!-- 打印SQL -->
        	<property name="hibernate.show_sql">true</property>
        	<property name="hibernate.format_sql">true</property>
        	<!-- 表生成策略 -->
        	<property name="hibernate.hbm2ddl.auto">update</property>  
        	
        	<!-- 引入映射 -->
        	<mapping resource="class-mapping.hbm.xml"/>
        	<mapping resource="stu-mapping.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>
    
    

    配置hbm.xml文件

    stu-mapping.hbm.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    		"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    		"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    	<class name="com.zb.entity.StuInfo" table="stu_info">
    		<id name="stu_id" column="stu_id">
    			<generator class="native"></generator>
    		</id>
    		<property name="stu_name" column="stu_name"></property>
    		<property name="stu_sex" column="stu_sex"></property>
    		<property name="stu_age" column="stu_age"></property>
    		<property name="class_id" column="class_id"></property>
    		<!-- 
    			关联关系映射
    				name:关联的属性名称
    				class:关联的属性类型
    				column:关联的列名
    		 -->
            <!-- 多对一 -->
    		<!-- <many-to-one name="classInfo" class="com.zb.entity.ClassInfo" column="class_id"></many-to-one> -->
    	</class>
    </hibernate-mapping>
    

    class-mapping.hbm.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    		"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    		"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    	<class name="com.zb.entity.ClassInfo" table="class_info">
    		<id name="class_id" column="class_id">
    			<generator class="native"></generator>
    		</id>
    		<property name="class_name" column="class_name"></property>
    		<property name="class_address" column="class_address"></property>
    		<property name="class_manager" column="class_manager"></property>
    		
    		<!-- 
    			配置集合(Set-><set>;List-><list>)
    				name:集合的名称
    				table:关联的表的表名
    		 -->
    		<set name="stuInfos" table="stu_info">
    			<!-- 
    				配置集合对应的
    					column:多端关联的一端的列名
    			 -->
    			<key column="class_id"/>
    			<!-- 
    				集合元素的类型,多端全类名
    			 -->
    			<one-to-many class="com.zb.entity.StuInfo"/>
    		</set>
    	</class>
    </hibernate-mapping>
    

    Test类

    public class TestClass {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction t = null;
    
        @Before
        public void qianZhi() {
            sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
            session = sessionFactory.openSession();
            t = session.beginTransaction();
            System.out.println("----------程序开始----------");
        }
    
        @After
        public void houZhi() {
            t.commit();
            session.close();
            System.out.println("----------程序结束----------");
        }
    	
        //多对一
        @Test
        public void testMethod01() {
            List<StuInfo> listStuInfos = new ArrayList<StuInfo>();
            listStuInfos.add(session.get(StuInfo.class, 1));
            listStuInfos.add(session.get(StuInfo.class, 2));
            listStuInfos.add(session.get(StuInfo.class, 3));
            listStuInfos.add(session.get(StuInfo.class, 4));
            listStuInfos.add(session.get(StuInfo.class, 5));
            listStuInfos.add(session.get(StuInfo.class, 6));
            System.out.println(listStuInfos);
    
        }
        
    	//一对多
        @Test
        public void testMethod02() {
            ClassInfo ci1 = session.get(ClassInfo.class, 1);
            ClassInfo ci2 = session.get(ClassInfo.class, 2);
            System.out.println(ci1);
            System.out.println(ci2);
        }
    }
    

    案例2:多对多

    导入相应的jar包

    创建实体类

    创建学生类StuInfo2.java

    package com.zb.entity;
    
    import java.util.HashSet;
    import java.util.Set;
    
    public class StuInfo2 {
    	private Integer stu_id;
    	private String stu_name;
    	private String stu_sex;
    	private Integer stu_age;
    
    	private Set<CourseInfo> courseInfos = new HashSet<CourseInfo>();
    
    	public Integer getStu_id() {
    		return stu_id;
    	}
    
    	public void setStu_id(Integer stu_id) {
    		this.stu_id = stu_id;
    	}
    
    	public String getStu_name() {
    		return stu_name;
    	}
    
    	public void setStu_name(String stu_name) {
    		this.stu_name = stu_name;
    	}
    
    	public String getStu_sex() {
    		return stu_sex;
    	}
    
    	public void setStu_sex(String stu_sex) {
    		this.stu_sex = stu_sex;
    	}
    
    	public Integer getStu_age() {
    		return stu_age;
    	}
    
    	public void setStu_age(Integer stu_age) {
    		this.stu_age = stu_age;
    	}
    
    	public Set<CourseInfo> getCourseInfos() {
    		return courseInfos;
    	}
    
    	public void setCourseInfos(Set<CourseInfo> courseInfos) {
    		this.courseInfos = courseInfos;
    	}
    	
    	public StuInfo2(String stu_name, String stu_sex) {
    		super();
    		this.stu_name = stu_name;
    		this.stu_sex = stu_sex;
    	}
    
    	public StuInfo2() {
    		super();
    	}
    
    	@Override
    	public String toString() {
    		return "StuInfo2 [stu_id=" + stu_id + ", stu_name=" + stu_name + ", stu_sex=" + stu_sex + ", stu_age=" + stu_age
    				+ ", courseInfos=" + courseInfos + "]";
    	}
    }
    

    创建课程实体类CourseInfo.java

    package com.zb.entity;
    
    import java.util.HashSet;
    import java.util.Set;
    
    public class CourseInfo {
    	private Integer course_id;
    	private String course_name;
    	private String course_tname;
    
    	private Set<StuInfo2> stuInfos = new HashSet<StuInfo2>();
    
    	public Integer getCourse_id() {
    		return course_id;
    	}
    
    	public void setCourse_id(Integer course_id) {
    		this.course_id = course_id;
    	}
    
    	public String getCourse_name() {
    		return course_name;
    	}
    
    	public void setCourse_name(String course_name) {
    		this.course_name = course_name;
    	}
    
    	public String getCourse_tname() {
    		return course_tname;
    	}
    
    	public void setCourse_tname(String course_tname) {
    		this.course_tname = course_tname;
    	}
    
    	public Set<StuInfo2> getStuInfos() {
    		return stuInfos;
    	}
    
    	public void setStuInfos(Set<StuInfo2> stuInfos) {
    		this.stuInfos = stuInfos;
    	}
    	/*
    	@Override
    	public String toString() {
    		return "CourseInfo [course_id=" + course_id + ", course_name=" + course_name + ", course_tname=" + course_tname
    				+ ", stuInfos=" + stuInfos + "]";
    	}
    	*/
    }
    

    配置全局cfg.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
    		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    		"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
        	<!-- 数据库连接 -->
        	<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    		<property name="hibernate.connection.username">root</property>
    		<property name="hibernate.connection.password">123456</property>
    		<property name="hibernate.connection.url">jdbc:mysql:///user_db?characterEncoding=UTF-8</property>
        	<!-- 数据库方言 -->
        	<property name="hibernate.dialect">org.hibernate.dialect.MySQL55Dialect</property>
        	<!-- 打印SQL -->
        	<property name="hibernate.show_sql">true</property>
        	<property name="hibernate.format_sql">true</property>
        	<!-- 表生成策略 -->
        	<property name="hibernate.hbm2ddl.auto">update</property>
        	
        	<!-- 引入映射 -->
        	<mapping resource="stu2-mapping.hbm.xml"/>
        	<mapping resource="course-mapping.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>
    

    配置hbm.xml文件

    stu2-mapping.hbm.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    		"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    		"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    	<class name="com.zb.entity.StuInfo2" table="stu_info2">
    		<id name="stu_id" column="stu_id">
    			<generator class="native"></generator>
    		</id>
    		<property name="stu_name" column="stu_name"></property>
    		<property name="stu_sex" column="stu_sex"></property>
    		<property name="stu_age" column="stu_age"></property>
    		
    		<set name="courseInfos" table="stu_course_info">
    			<!-- 我们提供给中间表的关联列 -->
    			<key column="stu_id"/>
    			<!-- 我们关联的中间表的关联列 -->
    			<many-to-many class="com.zb.entity.CourseInfo" column="course_id"/>
    		</set>
    	</class>
    </hibernate-mapping>
    

    course-mapping.hbm.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    		"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    		"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    	<class name="com.zb.entity.CourseInfo" table="course_info">
    		<id name="course_id" column="course_id">
    			<generator class="native"></generator>
    		</id>
    		<property name="course_name" column="course_name"></property>
    		<property name="course_tname" column="course_tname"></property>
    		<!-- 
    			对多的映射关系
    				name:集合名称
    				table:因为两边都不是直接关联的,依赖的是中间表,所以此处写中间表的表名
    		 -->
    		<set name="stuInfos" table="stu_course_info">
    			<key column="course_id"/>
    			<many-to-many class="com.zb.entity.StuInfo2" column="stu_id"/>
    		</set>
    	</class>
    </hibernate-mapping>
    

    Test类

    public class TestClass {
    	SessionFactory sessionFactory = null;
    	Session session = null;
    	Transaction t = null;
    
    	@Before
    	public void qianZhi() {
    		sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
    		session = sessionFactory.openSession();
    		t = session.beginTransaction();
    		System.out.println("----------程序开始----------");
    	}
    
    	@After
    	public void houZhi() {
    		t.commit();
    		session.close();
    		System.out.println("----------程序结束----------");
    	}
    	
    	@Test
    	public void testMethod03() {
    		StuInfo2 si1 = session.get(StuInfo2.class, 2);
    		for(CourseInfo ci : si1.getCourseInfos()) {
    			System.out.println(ci.getCourse_name());
    		}
    		System.out.println(si1);
    	}
    }    
    

    案例3:HQL(面向对象的查询语句)

    创建实体类

    package com.zb.entity;
    
    import java.util.HashSet;
    import java.util.Set;
    
    public class StuInfo2 {
    	private Integer stu_id;
    	private String stu_name;
    	private String stu_sex;
    	private Integer stu_age;
    
    	private Set<CourseInfo> courseInfos = new HashSet<CourseInfo>();
    
    	public Integer getStu_id() {
    		return stu_id;
    	}
    
    	public void setStu_id(Integer stu_id) {
    		this.stu_id = stu_id;
    	}
    
    	public String getStu_name() {
    		return stu_name;
    	}
    
    	public void setStu_name(String stu_name) {
    		this.stu_name = stu_name;
    	}
    
    	public String getStu_sex() {
    		return stu_sex;
    	}
    
    	public void setStu_sex(String stu_sex) {
    		this.stu_sex = stu_sex;
    	}
    
    	public Integer getStu_age() {
    		return stu_age;
    	}
    
    	public void setStu_age(Integer stu_age) {
    		this.stu_age = stu_age;
    	}
    
    	public Set<CourseInfo> getCourseInfos() {
    		return courseInfos;
    	}
    
    	public void setCourseInfos(Set<CourseInfo> courseInfos) {
    		this.courseInfos = courseInfos;
    	}
    	
    	public StuInfo2(String stu_name, String stu_sex) {
    		super();
    		this.stu_name = stu_name;
    		this.stu_sex = stu_sex;
    	}
    
    	public StuInfo2() {
    		super();
    	}
    
    	@Override
    	public String toString() {
    		return "StuInfo2 [stu_id=" + stu_id + ", stu_name=" + stu_name + ", stu_sex=" + stu_sex + ", stu_age=" + stu_age
    				+ ", courseInfos=" + courseInfos + "]";
    	}
    }
    
    package com.zb.entity;
    
    public class NameAndSex {
    	private String stu_name;
    	private String stu_sex;
    
    
    	public String getStu_name() {
    		return stu_name;
    	}
    
    	public void setStu_name(String stu_name) {
    		this.stu_name = stu_name;
    	}
    
    	public String getStu_sex() {
    		return stu_sex;
    	}
    
    	public void setStu_sex(String stu_sex) {
    		this.stu_sex = stu_sex;
    	}
    	
    	public NameAndSex() {
    		super();
    	}
    
    	public NameAndSex(String stu_name, String stu_sex) {
    		super();
    		this.stu_name = stu_name;
    		this.stu_sex = stu_sex;
    	}
    
    	@Override
    	public String toString() {
    		return "NameAndSex [name=" + stu_name + ", sex=" + stu_sex + "]";
    	}
    }
    

    Test类

    public class TestClass {
    	SessionFactory sessionFactory = null;
    	Session session = null;
    	Transaction t = null;
    
    	@Before
    	public void qianZhi() {
    		sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
    		session = sessionFactory.openSession();
    		t = session.beginTransaction();
    		System.out.println("----------程序开始----------");
    	}
    
    	@After
    	public void houZhi() {
    		t.commit();
    		session.close();
    		System.out.println("----------程序结束----------");
    	}
    
    	
    	
    	@Test
    	public void testMethod04() {
    		//创建HQL语句,它与SQL语句几乎相同,将其中的表名替换成对应的类名,列名替换为字段名
    		String hql = " FROM StuInfo2 ";
    		//创建Query对象
    		Query query = session.createQuery(hql);
    		//执行查询方法getResultList/list:查询一个list类型的结果
    		List<StuInfo2> sis = query.getResultList();
    		
    		System.out.println(sis);
    	}
    	
    	@Test
    	public void testMethod05() {
    		//创建HQL语句,它与SQL语句几乎相同,将其中的表名替换成对应的类名,列名替换为字段名
    		String hql = " FROM StuInfo2 WHERE stu_age IN (15,18) ";
    		//创建Query对象
    		Query query = session.createQuery(hql);
    		//执行查询方法getResultList/list:查询一个list类型的结果
    		List<StuInfo2> sis = query.getResultList();
    		
    		for(StuInfo2 si : sis) {
    			System.out.println(si.getStu_name());
    		}
    	}
    	
    	@Test
    	public void testMethod06() {
    		//创建HQL语句,它与SQL语句几乎相同,将其中的表名替换成对应的类名,列名替换为字段名
    		String hql = " FROM StuInfo2 WHERE stu_age IN (?0,?1) ";
    		//创建Query对象
    		Query query = session.createQuery(hql);
    		//如果有参数
    		query.setParameter(0, 16);
    		query.setParameter(1, 18);
    		
    		//执行查询方法getResultList/list:查询一个list类型的结果
    		List<StuInfo2> sis = query.getResultList();
    		
    		for(StuInfo2 si : sis) {
    			System.out.println(si.getStu_name());
    		}
    	}
    	
    	@Test
    	public void testMethod07() {
    		//创建HQL语句,它与SQL语句几乎相同,将其中的表名替换成对应的类名,列名替换为字段名
    		String hql = " FROM StuInfo2 WHERE stu_sex = :sex ";
    		//创建Query对象
    		Query query = session.createQuery(hql);
    		//如果有参数
    		//query.setParameter(0, 16);
    		//query.setParameter(1, 18);
    		query.setParameter("sex", "女");
    		
    		//执行查询方法getResultList/list:查询一个list类型的结果
    		List<StuInfo2> sis = query.getResultList();
    		
    		for(StuInfo2 si : sis) {
    			System.out.println(si.getStu_name());
    		}
    	}
    	
        //条件查询
    	@Test
    	public void testMethod08() {
    		//创建HQL语句,它与SQL语句几乎相同,将其中的表名替换成对应的类名,列名替换为字段名
    		String hql = " FROM StuInfo2 WHERE stu_sex = :sex AND stu_age = :age ";
    		//创建Query对象
    		Query query = session.createQuery(hql);
    		//如果有参数
    		query.setParameter("sex", "女");
    		query.setParameter("age", 18);
    		//执行查询方法getResultList/list:查询一个list类型的结果
    		List<StuInfo2> sis = query.getResultList();
    		
    		for(StuInfo2 si : sis) {
    			System.out.println(si.getStu_name());
    		}
    	}
    	
        //条件查询
    	@Test
    	public void testMethod09() {
    		List<StuInfo2> sis = session.createQuery(" FROM StuInfo2 WHERE stu_sex = :sex AND stu_age = :age ").
    				setParameter("sex", "女").
    				setParameter("age", 18).
    				getResultList();
    		for(StuInfo2 si : sis) {
    			System.out.println(si.getStu_name());
    		}
    	}
    	
        //投影查询(只查询结果中的部分内容)
    	@Test
    	public void testMethod10() {
    		List<Object[]> sis = session.createQuery(" SELECT stu_name,stu_sex FROM StuInfo2 ").
    				getResultList();
    		for(Object[] os : sis) {
    			System.out.println(Arrays.asList(os));
    		}
    	}
    	
         //投影查询(只查询结果中的部分内容)
    	@Test
    	public void testMethod11() {
    		List<StuInfo2> sis = session.createQuery(" SELECT new StuInfo2(stu_name,stu_sex) FROM StuInfo2 ").
    				getResultList();
    		for(StuInfo2 os : sis) {
    			System.out.println(os);
    		}
    	}
        
        //投影查询(只查询结果中的部分内容)
        @Test
    	public void testMethod12() {
    		List<NameAndSex> sis = session.createQuery(" SELECT new NameAndSex(stu_name,stu_sex) FROM StuInfo2 ").
    				getResultList();
    		for(NameAndSex os : sis) {
    			System.out.println(os);
    		}
    	}
    }    
    

    案例4:HQL(分页查询)

    创建实体类

    package com.zb.entity;
    
    import java.util.HashSet;
    import java.util.Set;
    
    public class StuInfo2 {
    	private Integer stu_id;
    	private String stu_name;
    	private String stu_sex;
    	private Integer stu_age;
    
    	private Set<CourseInfo> courseInfos = new HashSet<CourseInfo>();
    
    	public Integer getStu_id() {
    		return stu_id;
    	}
    
    	public void setStu_id(Integer stu_id) {
    		this.stu_id = stu_id;
    	}
    
    	public String getStu_name() {
    		return stu_name;
    	}
    
    	public void setStu_name(String stu_name) {
    		this.stu_name = stu_name;
    	}
    
    	public String getStu_sex() {
    		return stu_sex;
    	}
    
    	public void setStu_sex(String stu_sex) {
    		this.stu_sex = stu_sex;
    	}
    
    	public Integer getStu_age() {
    		return stu_age;
    	}
    
    	public void setStu_age(Integer stu_age) {
    		this.stu_age = stu_age;
    	}
    
    	public Set<CourseInfo> getCourseInfos() {
    		return courseInfos;
    	}
    
    	public void setCourseInfos(Set<CourseInfo> courseInfos) {
    		this.courseInfos = courseInfos;
    	}
    	
    	public StuInfo2(String stu_name, String stu_sex) {
    		super();
    		this.stu_name = stu_name;
    		this.stu_sex = stu_sex;
    	}
    
    	public StuInfo2() {
    		super();
    	}
    
    	@Override
    	public String toString() {
    		return "StuInfo2 [stu_id=" + stu_id + ", stu_name=" + stu_name + ", stu_sex=" + stu_sex + ", stu_age=" + stu_age
    				+ ", courseInfos=" + courseInfos + "]";
    	}
    }
    

    Test类

    public class TestClass {
    	SessionFactory sessionFactory = null;
    	Session session = null;
    	Transaction t = null;
    
    	@Before
    	public void qianZhi() {
    		sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
    		session = sessionFactory.openSession();
    		t = session.beginTransaction();
    		System.out.println("----------程序开始----------");
    	}
    
    	@After
    	public void houZhi() {
    		t.commit();
    		session.close();
    		System.out.println("----------程序结束----------");
    	}
        @Test
            public void testMethod13() {
                List<StuInfo> sis = session.createQuery(" FROM StuInfo ").
                        setFirstResult(4).
                        setMaxResults(2).
                        getResultList();
    
                for(StuInfo os : sis) {
                    System.out.println(os.getStu_name());
                }
            }
    }    
    

    案例5:HQL连接查询(迫切)

    创建实体类

    package com.zb.entity;
    
    public class StuInfo {
    	private Integer stu_id;
    	private String stu_name;
    	private String stu_sex;
    	private Integer stu_age;
    	private Integer class_id;
    	// 关联关系保存在多的一端(多对一)
    	//private ClassInfo classInfo;
    
    	public Integer getStu_id() {
    		return stu_id;
    	}
    
    	public void setStu_id(Integer stu_id) {
    		this.stu_id = stu_id;
    	}
    
    	public String getStu_name() {
    		return stu_name;
    	}
    
    	public void setStu_name(String stu_name) {
    		this.stu_name = stu_name;
    	}
    
    	public String getStu_sex() {
    		return stu_sex;
    	}
    
    	public void setStu_sex(String stu_sex) {
    		this.stu_sex = stu_sex;
    	}
    
    	public Integer getStu_age() {
    		return stu_age;
    	}
    
    	public void setStu_age(Integer stu_age) {
    		this.stu_age = stu_age;
    	}
    /*
    	public ClassInfo getClassInfo() {
    		return classInfo;
    	}
    
    	public void setClassInfo(ClassInfo classInfo) {
    		this.classInfo = classInfo;
    	}
    	public StuInfo(String stu_name, String stu_sex, Integer stu_age, ClassInfo classInfo) {
    		super();
    		this.stu_name = stu_name;
    		this.stu_sex = stu_sex;
    		this.stu_age = stu_age;
    		this.classInfo = classInfo;
    	}
     */
    	
    	
    	public Integer getClass_id() {
    		return class_id;
    	}
    
    	public StuInfo(String stu_name, String stu_sex) {
    		super();
    		this.stu_name = stu_name;
    		this.stu_sex = stu_sex;
    	}
    
    	public void setClass_id(Integer class_id) {
    		this.class_id = class_id;
    	}
    
    	public StuInfo() {
    		super();
    	}
    /*
    	@Override
    	public String toString() {
    		return "StuInfo [stu_id=" + stu_id + ", stu_name=" + stu_name + ", stu_sex=" + stu_sex + ", stu_age=" + stu_age
    				+ ", classInfo=" + classInfo + "]";
    	}
    	*/
    }
    
    package com.zb.entity;
    
    import java.util.HashSet;
    import java.util.Set;
    
    public class ClassInfo {
    	private Integer class_id;
    	private String class_name;
    	private String class_address;
    	private String class_manager;
    	// 关联关系配置在一段(一对多,数据库中怎么记录跟我们没有关系)
    	private Set<StuInfo> stuInfos = new HashSet<StuInfo>();//初始化集合
    
    	public Integer getClass_id() {
    		return class_id;
    	}
    
    	public void setClass_id(Integer class_id) {
    		this.class_id = class_id;
    	}
    
    	public String getClass_name() {
    		return class_name;
    	}
    
    	public void setClass_name(String class_name) {
    		this.class_name = class_name;
    	}
    
    	public String getClass_address() {
    		return class_address;
    	}
    
    	public void setClass_address(String class_address) {
    		this.class_address = class_address;
    	}
    
    	public String getClass_manager() {
    		return class_manager;
    	}
    
    	public void setClass_manager(String class_manager) {
    		this.class_manager = class_manager;
    	}
    
    	public Set<StuInfo> getStuInfos() {
    		return stuInfos;
    	}
    
    	public void setStuInfos(Set<StuInfo> stuInfos) {
    		this.stuInfos = stuInfos;
    	}
    
    	public ClassInfo() {
    		super();
    	}
    
    	@Override
    	public String toString() {
    		return "ClassInfo [class_id=" + class_id + ", class_name=" + class_name + ", class_address=" + class_address
    				+ ", class_manager=" + class_manager + ", classId=" + stuInfos + "]";
    	}
    }
    

    Test类

    public class TestClass {
    	SessionFactory sessionFactory = null;
    	Session session = null;
    	Transaction t = null;
    
    	@Before
    	public void qianZhi() {
    		sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
    		session = sessionFactory.openSession();
    		t = session.beginTransaction();
    		System.out.println("----------程序开始----------");
    	}
    
    	@After
    	public void houZhi() {
    		t.commit();
    		session.close();
    		System.out.println("----------程序结束----------");
    	}
        
        //迫切查询
        @Test
    	public void testMethod14() {
    		//XXXX JOIN FETCH 
    		List<Object[]> sis = session.createQuery(" SELECT SI.stu_name,SI.stu_sex,CI.class_name FROM StuInfo AS SI INNER JOIN ClassInfo AS CI ON SI.class_id = CI.class_id").
    				getResultList();
    		for(Object[] os : sis) {
    			System.out.println(Arrays.toString(os));
    		}
    	}
        
        //报表查询(GROUP BY HAVING ,SUM,AVG,MAX,MIN,COUNT)
        @Test
    	public void testMethod15() {
    		Object[] sis = (Object[]) session.createQuery(" SELECT SUM(stu_age),AVG(stu_age) FROM StuInfo ").
    				getSingleResult();
    		for(Object os : sis) {
    			System.out.println(os);
    		}
    	}
    	
        //报表查询
    	@Test
    	public void testMethod16() {
    		Object sis = session.createQuery(" SELECT SUM(stu_age) FROM StuInfo ").
    				getSingleResult();
    		System.out.println(sis);
    	}
    	
        //动态SQL
    	@Test
    	public void testMethod17() {
    		NativeQuery nq = session.createSQLQuery(" INSERT INTO stu_info VALUES (DEFAULT,'老李','女',15,1) ");
    		nq.executeUpdate();
    	}
    }    
    

    案例6:二级缓存的使用

    配置二级缓存
    			加入jar包:hibernate-release-5.4.22.Final\lib\optional\ehcache
    			加入EHCache配置文件:hibernate-release-5.4.22.Final\project\etc
    			开启Hibernate外置二级缓存的支持:<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.internal.EhcacheRegionFactory</property>
    			设置哪些内容加入二级缓存:<class-cache usage="缓存策略" class="被缓存的类"/>
    

    导入二级缓存相应的jar包

    创建实体类

    package com.zb.entity;
    
    public class StuInfo {
    	private Integer stu_id;
    	private String stu_name;
    	private String stu_sex;
    	private Integer stu_age;
    	private Integer class_id;
    
    	public Integer getStu_id() {
    		return stu_id;
    	}
    
    	public void setStu_id(Integer stu_id) {
    		this.stu_id = stu_id;
    	}
    
    	public String getStu_name() {
    		return stu_name;
    	}
    
    	public void setStu_name(String stu_name) {
    		this.stu_name = stu_name;
    	}
    
    	public String getStu_sex() {
    		return stu_sex;
    	}
    
    	public void setStu_sex(String stu_sex) {
    		this.stu_sex = stu_sex;
    	}
    
    	public Integer getStu_age() {
    		return stu_age;
    	}
    
    	public void setStu_age(Integer stu_age) {
    		this.stu_age = stu_age;
    	}
    	
    	
    	public Integer getClass_id() {
    		return class_id;
    	}
    
    	public StuInfo(String stu_name, String stu_sex) {
    		super();
    		this.stu_name = stu_name;
    		this.stu_sex = stu_sex;
    	}
    
    	public void setClass_id(Integer class_id) {
    		this.class_id = class_id;
    	}
    
    	public StuInfo() {
    		super();
    	}
    }
    

    配置cfg.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
    		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    		"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
        	<!-- 数据库连接 -->
        	<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    		<property name="hibernate.connection.username">root</property>
    		<property name="hibernate.connection.password">123456</property>
    		<property name="hibernate.connection.url">jdbc:mysql:///user_db?characterEncoding=UTF-8</property>
        	<!-- 数据库方言 -->
        	<property name="hibernate.dialect">org.hibernate.dialect.MySQL55Dialect</property>
        	<!-- 打印SQL -->
        	<property name="hibernate.show_sql">true</property>
        	<property name="hibernate.format_sql">true</property>
        	<!-- 表生成策略 -->
        	<property name="hibernate.hbm2ddl.auto">update</property>
        	
        	<!-- 设置Hibernate使用的二级缓存的缓存插件(插件全类名) -->
        	<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.internal.EhcacheRegionFactory</property>
        	
        	<!-- 引入映射 -->
        	<mapping resource="stu-mapping.hbm.xml"/>
        	
        	<!-- 设置要缓存的类   有多个类需要设置二级缓存方法同理,在class属性写上对应类的包名 -->
        	<class-cache usage="read-only" class="com.zb.entity.StuInfo"/>
            <!-- 注意:class-cache标签必须写在映射文件之后,否则会报错. -->
        </session-factory>
    </hibernate-configuration>
    

    配置hbm.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    		"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    		"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    	<class name="com.zb.entity.StuInfo" table="stu_info">
    		<id name="stu_id" column="stu_id">
    			<generator class="native"></generator>
    		</id>
    		<property name="stu_name" column="stu_name"></property>
    		<property name="stu_sex" column="stu_sex"></property>
    		<property name="stu_age" column="stu_age"></property>
    		<property name="class_id" column="class_id"></property>
    	</class>
    </hibernate-mapping>
    

    ehcache.xml(导入二级缓存包会有此文件)

    <ehcache>
    	<!-- 当内存缓存满了,则保存到磁盘的目标位置 -->
        <diskStore path="D://cache"/>
        <!-- 
        	maxElementsInMemory:内存缓存该对象的最大数量
            eternal:缓存的对象是否永久存在
            timeToIdleSeconds:最大空闲时间s
            timeToLiveSeconds:最大缓存时间s
            overflowToDisk:超出最大大小之后是否存放到磁盘中
         -->
        <defaultCache
            maxElementsInMemory="2"
            eternal="false"
            timeToIdleSeconds="20"
            timeToLiveSeconds="120"
            overflowToDisk="true"
            />
    </ehcache>
    

    Test类

    public class TestClass {
    	SessionFactory sessionFactory = null;
    	Session session = null;
    	Transaction t = null;
    
    	@Before
    	public void qianZhi() {
    		sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
    		session = sessionFactory.openSession();
    		t = session.beginTransaction();
    		System.out.println("----------程序开始----------");
    	}
    
    	@After
    	public void houZhi() {
    		t.commit();
    		session.close();
    		System.out.println("----------程序结束----------");
    	}
        
        //测试二级缓存
        @Test
    	public void testMethod18() {
    		StuInfo si1 = session.get(StuInfo.class, 1);
    		StuInfo si2 = session.get(StuInfo.class, 2);
    		StuInfo si3 = session.get(StuInfo.class, 3);
    		StuInfo si4 = session.get(StuInfo.class, 4);
    		StuInfo si5 = session.get(StuInfo.class, 5);
    		StuInfo si6 = session.get(StuInfo.class, 6);
    		StuInfo si7 = session.get(StuInfo.class, 7);
    	}
    }    
    

    案例中使用到的数据库

    
    CREATE TABLE class_info
    (
    	class_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    	class_name VARCHAR(32) NOT NULL,
    	class_address VARCHAR(32) NOT NULL,
    	class_manager VARCHAR(32) NOT NULL
    )
    
    INSERT INTO class_info
    VALUES
    (DEFAULT,"Java53班","401","刘艳"),
    (DEFAULT,"挖掘机1班","山东蓝翔","挖掘机")
    
    CREATE TABLE stu_info
    (
    	stu_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    	stu_name VARCHAR(32) NOT NULL,
    	stu_sex VARCHAR(32) NOT NULL,
    	stu_age INT NOT NULL,
    	class_id INT NOT NULL,
    	FOREIGN KEY (class_id) REFERENCES class_info(class_id)
    )
    
    INSERT INTO stu_info
    VALUES
    (DEFAULT,"小明","女",15,1),
    (DEFAULT,"小黑","男",16,1),
    (DEFAULT,"小白","女",18,1),
    (DEFAULT,"老张","男",55,2),
    (DEFAULT,"老王","女",66,2),
    (DEFAULT,"老刘","男",88,2)
    
    SELECT * FROM stu_info INNER JOIN class_info ON stu_info.class_id = class_info.class_id
    
    CREATE TABLE course_info
    (
    	course_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    	course_name VARCHAR(32) NOT NULL,
    	course_tname VARCHAR(32) NOT NULL
    )
    
    INSERT INTO course_info
    VALUES
    (DEFAULT,"语文","语文老师"),
    (DEFAULT,"数学","体育老师"),
    (DEFAULT,"英语","美术老师")
    
    CREATE TABLE stu_info2
    (
    	stu_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    	stu_name VARCHAR(32) NOT NULL,
    	stu_sex VARCHAR(32) NOT NULL,
    	stu_age INT NOT NULL
    )
    
    INSERT INTO stu_info2
    VALUES
    (DEFAULT,"小明","女",15),
    (DEFAULT,"小黑","男",16),
    (DEFAULT,"小白","女",18)
    
    CREATE TABLE stu_course_info
    (
    	stu_id INT NOT NULL,
    	course_id INT NOT NULL,
    	FOREIGN KEY (stu_id) REFERENCES stu_info2(stu_id),
    	FOREIGN KEY (course_id) REFERENCES course_info(course_id)
    )
    
    INSERT INTO stu_course_info
    VALUES
    (1,1),
    (1,2),
    (1,3),
    (2,2),
    (2,3),
    (3,1),
    (3,3)
    
    展开全文
  • 由于对环境的鲁棒性能并不够优异所以在每次移动到新的环境中需要对肤色进行重新采样。...在我们完成键盘的配置、手势的识别后,需要实现把手的位置投影到场景中来。demo画面先大致这样,Point center; Poin...

    由于对环境的鲁棒性能并不够优异所以在每次移动到新的环境中需要对肤色进行重新采样。虽然这样的做法相对来说比较繁复,但对于不同肤色的人来说或是对于不同的环境(包括环境色的干扰、光照的强弱、光源的位置等等)来说,至少能够保证我们的程序使能够良好运行的。

    在我们完成键盘的配置、手势的识别后,需要实现把手的位置投影到场景中来。


    demo画面先大致这样,

    Point center;
                Point temp;
                Moments moment = Imgproc.moments(contour1, false);
                center = new Point(moment.m10 / moment.m00, moment.m01 / moment.m00);
                //质心点
                Imgproc.circle(rgbaMat, center, 6, new Scalar(0, 0, 255, 255), -1);
    
                MatOfPoint conPointMat = contours[boundPos1];
                List<Point> conPoint = conPointMat.toList();
                List<Point> fingerTips = new List<Point>();
                  
                          double max = 0;  
                          int count = 0;  
                          int notice = 0;  
                          for (int i = 0; i < conPoint.Count; i++) {  
                              temp = conPoint [i];  
                              double dist = (temp.x - center.x) * (temp.x - center.x) + (temp.y - center.y) * (temp.y - center.y);  
                              if (dist > max) {  
                                  max = dist;  
                                  notice = i;  
                              }  
                              if (dist != max) {  
                                  count++;  
                                  if (count > 40) {  
                                      count = 0;  
                                      max = 0;  
                                      bool flag = false;  
                                      if (center.y < conPoint [notice].y)  
                                          continue;  
                                      for (int j = 0; j < fingerTips.Count; j++) {  
                                          if (Mathf.Abs ((float)conPoint [notice].x - (float)fingerTips [j].x) < 20) {  
                                              flag = true;  
                                              break;  
                                          }  
                                      }  
                                      if (flag)  
                                          continue;  
                                      fingerTips.Add (conPoint [notice]);  
                                      Imgproc.circle (rgbaMat, conPoint [notice], 6, new Scalar (0, 0, 255, 255), -1);  
                                      Imgproc.line (rgbaMat, center, conPoint [notice], new Scalar (0, 0, 255, 255), 2);  
                                  }  
                  
                              }
                              
                          }

    这样检测出手指的位置是用conPoint这个list来存储。center是手的质心。我们把comPoint的位置用白色的小圆来代替。

    在前面的图上以正中心的小圆为instance。然后乘上系数,对应到键盘的canvas上。

    void Update () {
    			//Imgproc.circle(my_thumb)
    			if (hand.listPoDefect1.Count > key) {
    				my_thumb = hand.listPoDefect1 [key];
    				//Debug.Log (hand.listPoDefect [key].y + "");
    				//this.gameObject.SetActive (true);
    				this.GetComponent<Image>().enabled=true;
    			} else {
    				//this.gameObject.SetActive (false);
    				this.GetComponent<Image>().enabled=false;
    			}
    			Vector3 pos=this.gameObject.transform.position;
    			//Debug.Log ("" + my_thumb.x);
    			pos.x = (float)my_thumb.x;
    			pos.y =450f -(float)my_thumb.y;
    			this.gameObject.transform.position = WorldToUI(Camera.main,pos);
    			//this.gameObject.transform.position=WorldToUI(Camera.main,Vector3.Lerp(this.gameObject.transform.position,pos,0.5f));
    		}
    		public Vector3 WorldToUI(Camera camera,Vector3 pos){  
    			CanvasScaler scaler = GameObject.Find("Canvas").GetComponent<CanvasScaler>();  
    			float resolutionX = scaler.referenceResolution.x;  
    			float resolutionY = scaler.referenceResolution.y;  
    
    			Vector3 viewportPos = camera.WorldToViewportPoint(pos);  
    
    			Vector3 uiPos = new Vector3(viewportPos.x * resolutionX - resolutionX * 0.5f,  
    				viewportPos.y * resolutionY - resolutionY * 0.5f,0);  
    
    			return uiPos;  
    		} 

    然后调整一下在场景中的位置就行


    展开全文
  • osgEarth::MapInfo主要用于记录Map的参数配置信息、投影信息(大地、正交、立方体)和高程插值信息。一般从Map生成MapInfo mapInfo(context-&gt;getMap()); osgEarth/MapInfo class OSGEARTH_EXPORT MapInfo ...

    目标:(三十)中的问题89

    osgEarth::MapInfo主要用于记录Map的参数配置信息、投影信息(大地、正交、立方体)和高程插值信息。一般从Map生成MapInfo mapInfo(context->getMap());

    osgEarth/MapInfo
        class OSGEARTH_EXPORT MapInfo
        {
            osg::ref_ptr<const Profile> _profile;
            bool _isGeocentric, _isCube;
            ElevationInterpolation _elevationInterpolation;
        }

    osgEarth::MapFrame的作用见(三十),一般也是从Map生成,它里面包含了MapInfo的信息(在setMap时会构造)。

    osgEarth/MapFrame
        class OSGEARTH_EXPORT MapFrame
        {
            bool _initialized;
            osg::observer_ptr<const Map> _map;
            std::string _name;
            MapInfo _mapInfo;
            Revision _mapDataModelRevision;
            LayerVector _layers;
            ElevationLayerVector _elevationLayers;
            unsigned _highestMinLevel;
            osg::ref_ptr<osg::Referenced> _pool;
        }
    osgEarth/MapFrame.cpp
    void
    MapFrame::setMap(const Map* map)
    {
        _layers.clear();
        _pool = 0L;
    
        _map = map;
        if ( map )
        {
            _mapInfo.setMap(map);
        }
    
        _initialized = false;
        _highestMinLevel = 0;
    
        if (map)
        {
            sync();
        }
    }

     

    待继续分析列表:

    9、earth文件中都有哪些options((九)中问题)

    10、如何根据earth文件options创建不同的地理信息引擎节点((九)中问题)

    11、rex地理信息引擎的四梁八柱((九)中问题)

    12、osgEarth::TerrainEngineNode中setMap方法作用((十二)中问题)

    13、RexTerrainEngineNode中_mapFrame的作用((十二)中问题)

    14、地形变形(Terrain morphing)((十二)中问题)

    15、地球瓦片过期门限的含义((十二)中问题)

    16、高分辨率优先的含义((十二)中问题)

    17、OSGEARTH_DEBUG_NORMALS环境变量的作用((十二)中问题)

    18、活跃瓦片寄存器的作用((十二)中问题)

    19、资源释放器子节点的作用((十二)中问题)

    20、共享几何图形池子节点的作用((十二)中问题)

    21、分页瓦片加载器子节点的作用((十二)中问题)

    22、分页瓦片卸载器子节点的作用((十二)中问题)

    23、栅格化器子节点的作用((十二)中问题)

    24、地形子节点的作用((十二)中问题)

    25、绑定渲染器的作用((十二)中问题)

    26、地图回调函数的作用((十二)中问题)

    27、如何将地图图层添加到rex引擎中((十二)中问题)

    28、选择信息的作用((十二)中问题)

    29、瓦片包围盒修改回调函数的作用((十二)中问题)

    30、刷新rex引擎((十二)中问题)

    31、刷新边界作用((十二)中问题)

    32、osgEarth::Metrics类的意义((十四)中问题)

    33、请求合并队列_mergeQueue((十四)中问题)

    34、分页瓦片加载器在更新遍历时对请求处理过程((十四)中问题)

    35、分页瓦片加载器在更新遍历时对已处理请求裁剪过程((十四)中问题)

    36、已处理的请求队列_requests((十四)中问题)

    37、DatabasePager中的_fileRequestQueue和_httpRequestQueue((十六)中问题)

    38、瓦片请求的生成到处理过程详解((十六)中问题)

    39、瓦片节点TileNode的创建过程((十七)中问题)

    40、request请求加载瓦片优先级的含义((十七)中问题)

    41、request的_internalHandle的作用((十七)中问题)

    42、DatabaseRequest中_objectCache含义((十七)中问题)

    42、osgEarth的多线程分析((十七)中问题)

    43、osgEarth的缓存及其结构((十七)中问题)

    44、DatabaseThread从缓存加载数据过程((十七)中问题)

    45、DatabaseThread从文件加载数据过程((十七)中问题)

    46、决定创建TileNode的时机条件((十七)中问题)

    47、TerrainEngineNode的createTileModel过程详解((十七)中问题)

    48、DatabaseThread中CompileSet的含义((十七)中问题)

    48、PagerLoader的traverse过程详解((十七)中问题)

    49、DatabaseThread的run过程详解((十七)中问题)

    50、LoadTileData的invoke过程详解((十七)中问题)

    51、TileNode的cull过程详解((十七)中问题)

    52、遮罩生成器osgEarth::Drivers::RexTerrainEngine::MaskGenerator((十八)中问题)

    53、RexTerrainEngineNode::traverse过程详解((十八)中问题)

    54、TileNode节点下的场景树分析((十八)中问题)

    55、地形瓦片大小尺寸和LOD的关系((十八)中问题)

    56、TileNode的_tileKeyValue作用((十八)中问题)

    57、TileNode的_morphConstants作用((十八)中问题)

    58、TileNode的_stitchNormalMap作用((十八)中问题)

    59、TileNode的_renderModel作用((十八)中问题)

    60、初始化高程栅格过程详解((十八)中问题)

    61、LoadTileData中的CreateTileModelFilter作用((十八)中问题)

    62、TileNode节点何时会从场景树中移除((十八)中问题)

    63、osgEarth::Map的Profile创建过程((二十)中问题)

    64、osgEarth::TerrainTileModelFactory添加颜色层和影像层的区别((二十一)中问题)

    65、osgEarth::PatchLayer修补层的作用((二十一)中问题)

    66、osgEarth::TerrainLayer中的_memCache(osgEarth::MemCache)详解((二十一)中问题)

    67、osgEarth::Layer::RenderType图层渲染类型的作用((二十一)中问题)

    68、osgEarth::TerrainLayer中TileSource的作用((二十一)中问题)

    69、earth文件没有设置高程图层会不会有默认高程层(高程均为0)((二十一)中问题)

    70、TerrainTileModelFactory::addColorLayers过程详解((二十一)中问题)

    71、TerrainTileModelFactory::addElevation过程详解((二十一)中问题)

    72、osgearth中可能用到的几个全局实例对象(osgDB::Registry osgEarth::Registry osg::Timer osg::DisplaySetting)((二十三)中问题)

    73、osgEarth::Map::addLayer过程详解((二十三)中问题)

    74、TileNode::setDirty过程详解((二十三)中问题)

    75、请求四个状态的含义(IDLE RUNNING MERGING FINISHED)((二十三)中问题)

    76、什么时候删除TileNode节点,不会一直增加吧((二十三)中问题)

    77、寄存器中请求状态活动记录的含义Registry::instance()->endActivity( req->getName() )((二十三)中问题)

    78、瓦片TileNode的生命周期流程详解((二十三)中问题)

    79、rex引擎如何将瓦片构造成地球形状((二十五)中问题)

    80、高程、影像文件格式详解((二十五)中问题)

    81、TileNode的merge过程详解((二十六)中问题)

    82、osgEarth支持的空间参考坐标系详解(osgEarth::SpatialReference、osgEarth::CubeSpatialReference、osgEarth::TangentPlaneSpatialReference)((二十九)中问题)

    83、osgEarth地球椭球体ellipsoid 大地基准面datum 地图投影Projection详解((二十九)中问题)

    84、空间参考坐标系和坐标系统类型的关系(geocentric projected)((二十九)中问题)

    85、proj4是什么((二十九)中问题)

    86、为什么要删除设置过的垂直水准面((二十九)中问题)

    87、osgEarth如何对投影坐标系和大地坐标系进行显示处理的((二十九)中问题)

    88、TileNode的节点构成,一个surface、tilenode((三十)中问题)

    89、MapFram和MapInfo的关系((三十)中问题)

    90、ModifyBoundingBoxCallback的使用时机和场合((三十)中问题)

    91、MapFrame为什么要单独存放高程层_elevationLayers,而不是放在图层_layers中((三十)中问题)

    92、MapFrame和Map中高程池的作用osg::ref_ptr<ElevationPool> _elevationPool((三十)中问题)

    93、osgEarth::Drivers::RexTerrainEngine::TileDrawable分析((三十)中问题)

    94、请求读取地理信息失败会如何处理((三十二)中问题)

    95、RexTerrainEngineNode的遍历过程详解((三十三)中问题)

    96、osgEarth::Drivers::RexTerrainEngine::TerrainCuller的apply过程详解((三十三)中问题)

    97、RexTerrainEngineNode的updateState过程详解 设置了很多着色器变量((三十三)中问题)

    98、什么时候分配opengl资源((三十三)中问题)

    99、TileNode释放opengl资源过程releaseGLObjects详解((三十三)中问题)

    100、最近一次遍历的帧号和时间是怎么设置呢(在渲染遍历里),怎么就不会再渲染遍历该瓦片节点了((三十三)中问题)

    101、osg::State和osg::StateSet的关系((三十四)中问题)

    102、osgEarth::SpatialReference和osgEarth::Profile的关系((三十六)中问题)

    103、osgEarth的Geographic、Geodetic、Geocentric和Project的关系((三十六)中问题)

    104、TileNode绘制过程详解((三十七)中问题)

    105、如何控制父子TileNode节点的显隐((三十七)中问题)

    106、GeometryPool的createGeometry过程详解((三十七)中问题)

    107、TileNode如何从地图中提取与其分辨率相适应的图像数据((三十七)中问题)

     

     

     

    展开全文
  • Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    千次下载 热门讨论 2009-01-14 08:06:55
    15.7. 投影(Projections)、聚合(aggregation)和分组(grouping) 15.8. 离线(detached)查询和子查询 15.9. 根据自然标识查询(Queries by natural identifier) 16. Native SQL查询 16.1. 使用SQLQuery 16.1.1....
  • hibernate要做的事,就是让对象投影关系数据库中,然后实施持久化。其具体实现:建立对象到关系数据库的映射. 然后在通过hibernate.cfg.xml中配置到数据库的联接,并读取User.hbm.xml文件,...
  • 各种关系代数运算,包括投影,联接等 数据提取ETL,可从非结构化数据中提取结构化记录 数据提取ETL以从JSON数据中提取结构化记录 具有可配置规则和统计参数的数据验证ETL 使用各种技术进行数据分析ETL 具有可配置...
  • PostGIS简介、安装、新建空间数据库、简单SQL语句查询练习、几何数据操作和练习、空间关系操作与练习、空间链接与练习、投影数据与练习、空间索引与练习…… 还包括PostgreSQL for spatial的配置,验证,postgis函数...
  • 1、当我们停止对Create Database这类Oracle命令进行思考,开始按安全管理、可用管理、连续管理、更改...2、关系型数据库的五个关系操作:选择(Selection)、投影(Projection)、并(Union)、差(Difference)、联结(Join)
  • 使用Hopf代数结构以及用于确定QCD的Slavnov-Taylor恒等式的图解技术,我们可以在一回路中构造三元和四元胶子顶点的关系。 通过在格林函数的外部胶子上进行纵向投影,我们表明该腿的胶子自能始终被幻影自能代替。 ...
  • 请参考./scripts/perf_test.pl以了解如何配置超参数。 数据集 训练/测试知识图数据集存储在./dataset中。 测试集也是我们在本文中描述的新的类比推理数据集。 参考 [1]通过知识图的非对称低秩投影学习更好的词嵌入...
  • 默认情况下,脚本配置为从root plant_stress_phenotyping文件夹运行。 资料索引 文件名 文件夹 描述 CMV2K-SSM5x5-600_875-5.5.9.2.xml 用于数据集的Ximea相机,镜头和滤镜设置的光谱响应数据 代码索引 相机校准,3D...
  • 一、多对多表的映射文件配置详解 1、Hibernate的多表关联关系映射 2、多对多表保存数据注意事项讲解 3、加载策略 1)类级别的加载策略 2)关联级别的加载策略 3)fetch 4)多对一的加载策略 5)批量加载...
  • i)Detect_VC.m(在给定位置检测VC的类型)ii)Enlist_empire1D_CutProj.m(使用几何方法构建用于链配置的帝国)iii)singleFlipMonteCarloStep1D.m(基于Metropolis算法计算新的链配置) iv)countDefectsFibChain....
  • # step2 : 计算匹配(根据数据集的不同,决定使用**顺序匹配**或者是**暴力匹配**, 通过修改config中配置文件的参数来实现) ./ComputeMatches ../config/NEU.yaml # step3 : 检查匹配, 通过显示不同图像之间的匹配对,...
  • 该存储库用于管理OSLC开放项目规范的开发,包括Core 3.0,OSLC查询,跟踪的资源集,配置管理以及所有各种OSLC域规范。 快速链接 (+ ) 规格表 标题 描述 负责任的 定义简单,独立于实现的选择和投影查询功能。 ...
  • ArcMap中故障问题解决

    千次阅读 2020-03-31 20:45:16
    问:mxd文档打不开 ...答:查看投影;将数据以不同的格式输出;检查并修复几何关系;检查工具的使用方法;将模板和脚本停止手动执行。 问:网络、工作区间、配置/机器 析:位置故障问题 答:将数据更换至...
  • 在对各自的杨-巴克斯特关系的系统研究中,我们发现了一组可解决的十九个顶点模型,这些模型的统计配置因时间反转对称性而不变。 玻尔兹曼权重位于7代数的三倍数上,它在双向上等效于三维投影空间。 这允许根据三个...
  • 山东大学软件学院 2021年增强现实考试 选择题8*5 上课认真听基本都能做出来 增强现实的三要素 张正友标定原理 多幅相互匹配的图像可以得到什么 画面抖动的原因 空间AR 论述题 ...(2)如何配置头部标志点
  • 目前,由于这项工作之后出现了新的高度可配置的笛卡尔界面,因此已宣布iKinArmCtrl被取代。 但是,现在过时的控制器的代码在this下仍然可用。 viteCtrl 它是Hersch模块的逐字复制,只添加了少量代码段,这些代码段...
  •  6.5.2 投影、聚合和分组  6.5.3 离线查询和子查询  6.6 SQL查询  6.6.1 标量查询  6.6.2 实体查询  6.6.3 处理关联和继承  6.6.4 命名SQL查询  6.6.5 调用存储过程  6.6.6 使用定制SQL  6.7 数据过滤  ...
  •  18.2 投影查询  18.3 报表查询  18.3.1 使用聚集函数  18.3.2 分组查询  18.3.3 优化报表查询的性能  18.4 高级查询技巧  18.4.1 动态查询  18.4.2 集合过滤  18.4.3 子查询  18.4.4 本地SQL查询  18.4....
  •  18.2 投影查询  18.3 报表查询  18.3.1 使用聚集函数  18.3.2 分组查询  18.3.3 优化报表查询的性能  18.4 高级查询技巧  18.4.1 动态查询  18.4.2 集合过滤  18.4.3 子查询  18.4.4 本地SQL查询  18.4....
  •  18.2 投影查询  18.3 报表查询  18.3.1 使用聚集函数  18.3.2 分组查询  18.3.3 优化报表查询的性能  18.4 高级查询技巧  18.4.1 动态查询  18.4.2 集合过滤  18.4.3 子查询  18.4.4 本地SQL查询  18.4....
  •  18.2 投影查询  18.3 报表查询  18.3.1 使用聚集函数  18.3.2 分组查询  18.3.3 优化报表查询的性能  18.4 高级查询技巧  18.4.1 动态查询  18.4.2 集合过滤  18.4.3 子查询  18.4.4 本地SQL查询  18.4....
  • 在识读第三角画法的视图时,由于其视图的配置方式与第一角画法不同,因此在识图时,应先学会辨认主视图和其他视图的名称和投射方向,否则识图时,将无法搞清各个视图的投射方向及相互位置关系。下面介绍五种常见的第...

空空如也

空空如也

1 2 3 4 5 6
收藏数 116
精华内容 46
关键字:

投影关系配置