1HQL
Hibernate Query Language是一种面向对象的查询语言,HQL的操作对象时类,实例,属性;与EJB3 QL很接近。
HQL的功能非常丰富,where子句后支持的运算符异常丰富,不仅包括SQL的运算符,还包括EJB-QL的运算符等。
除了Java类与属性的名称外,查询语句对大小些并不敏感。
HQL 不支持union联合查询。
select子句
select子句用于确定选择出的属性,当然select选择的属性必须是from后持久化类包含的属性。例如:
select p.name from Person as p
这个select子句与EJB3 QL一样。
from子句
Hibernate中最简单的查询语句的形式如下:
from Cat
大多数情况下, 你需要指定一个别名, 原因是你可能需要 在查询语句的其它部分引用到Cat:from Cat as cat
where子句
where子句中允许使用大部分SQL支持的表达式:
数学运算符+、–、*、/?等。
比较运算符=、>、>=、<、<=、<>、!=、like等。
逻辑运算符and、or、not等。
in、not in、between、is null、is not null、is empty、is not empty、member of和not member of等。
简单的case、case ... when ... then ... else ... end和case、case when ... then ... else ... end等。
字符串连接符value1 || value2或使用字符串连接函数concat(value1 , value2)。
时间操作函数current_date()、current_time()、current_timestamp()、second()、minute()、hour()、day()、month()、year()等。
HQL还支持EJB-QL 3.0所支持的函数或操作substring()、trim()、lower()、upper()、length()、locate()、abs()、sqrt()、bit_length()、coalesce()和nullif()等。
还支持数据库的类型转换函数,如cast(... as ...),第二个参数是Hibernate的类型名,或者extract(... from ...),前提是底层数据库支持ANSI cast()?和extract()。
例如:
cast(arg1 as arg2);arg1是要转换的数据,arg2是目标类型(不是数据库类型名,是hibernate类型名:比如目标类型是varchar,必须写string)
SELECT CAST( ’2012-12-24′ AS DATE ) 把字符串转换成date类型
SELECT CAST( 2012 AS string ) 把数字转化成字符串
SELECT CAST( ‘baiduzhidao’ AS char(3) ) 取指定长度的字符
在HQL中子查询一般出现在where子句中,不能像sql语句那样在from后嵌套子查询,通过子查询来查询某个字段等。如:
List list=session.createQuery(“from Customer c where 1>(select count(o) from c.orders o)”).list();
下面这种子查询是正确的:
Query query=em.createQuery("select g.ginID as ginID,(select x.name from Gstorage x where x.gstorageID=g.glocationID) as gstorageN from Gin g ");
下面这种子查询是错误的:
Query query=em.createQuery("select o.ginID as ginID from ( select g.ginID as ginID from Gin g ) o");
如果底层数据库支持如下单行函数sign()、trunc()、rtrim()、sin()。则HQL语句也完全可以支持。
HQL语句支持使用?作为参数占位符,这与JDBC的参数占位符一致,也可使用命名参数占位符号,方法是在参数名前加冒号:,例如 :start_date和:x1等。
当然,也可在where子句中使用SQL常量,例如'foo'、69、'1970-01-01 10:00:01.0'等。
还可以在HQL语句中使用Java public static final 类型的常量,例如eg.Color.TABBY。
除此之外,where子句还支持如下的特殊关键字用法。
in与between...and可按如下方法使用:
from DomesticCat cat where cat.name between 'A' and 'B'
from DomesticCat cat where cat.name in ( 'Foo','Bar','Baz')
当然,也支持not in和not between...and的使用,例如:
from DomesticCat cat where cat.name not between 'A' and 'B'
from DomesticCat cat where cat.name not in ( 'Foo','Bar','Baz' )
子句is null与is not null可以被用来测试空值,例如:
from DomesticCat cat where cat.name is null;
from Person as p where p.address is not null;
size关键字用于返回一个集合的大小,例如:
from Cat cat where cat.kittens.size > 0
from Cat cat where size(cat.kittens) > 0
对于有序集合,还可使用minindex与maxindex函数代表最小与最大的索引序数。同理,可以使用minelement与maxelement函数代表集合中最小与最大的元素。例如:
from Calendar cal where maxelement(cal.holidays) > current date
from Order order where maxindex(order.items) > 100
from Order order where minelement(order.items) > 10000
where子句中,有序集合的元素(arrays, lists, maps)可以通过[ ]运算符访问。例如:
//items是有序集合属性,items[0]代表第一个元素
from Order order where order.items[0].id = 1234
//holidays是map集合属性,holidays[national day]代表其中一个元素
select person from Person person, Calendar calendar
where calendar.holidays['national day'] = person.birthDay
and person.nationality.calendar = calendar
//下面同时使用list 集合和map集合属性
select item from Item item, Order order
where order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11
select item from Item item, Order order
where order.items[ maxindex(order.items) ] = item and order.id = 11
在[]中的表达式甚至可以是一个算术表达式,例如:
select item from Item item, Order order
where order.items[ size(order.items) - 1 ] = item
连接查询
迫切左外连接
from User u left join fetch u.student s where u.name like '%java%'
左外连接
左连接就是要把左边这个表里面的所有的数据显示出来。
from User u left join u.student s where u.name like '%java%'
迫切内连接
from User u inner join fetch u.student where u.name like '%java%'
内连接
内连接是把所有的相等的,完全符合条件的列出来。
内连(join).可以将inner 关键字省略,默认就是内连接。
from User u inner join u.student where u.name like '%java%'
右外连接
from User u right join u.student where u.name like '%java%'
HQL中的条件用with即:left join ... with...
SQL中的条件用on即:left join ... on...
Fetch:
在我们查询User对象的时候,默认只有User的内容,并不包含student的信息,如果在User.hbm.xml里设置lazy="true"的话同时又想取出关联的所有student内容,那么可以使用fetch。
order by子句
排序order by
HQL和SQL的使用方法很类似,"ASC"和"DESC"分别为升序和降序,如果不显式注明,HQL中默认为asc升序。
//先按照年龄降序排序,然后再按出生日期升序排序
Query query = sessionFactory.getCurrentSession().createQuery("select p from Person p order by p.age desc, p.birthday asc");
group by子句
分组查询,大部分标准的SQL聚集函数都可以在HQL语句中使用,比如:
count(),sum(),max(),min(),avg()等。
select cat.color, sum(cat.weight), count(cat) from Cat cat group by cat.color
Query query=sessionFactory.getCurrentSession().createQuery("select p.sex,count(*) from Person p group by p.sex");
HQL和可以使用和SQL那样的grouping,group by rollup(...)
如:
select g.belongOrganID,g.customerN,g.vtype,(case when grouping(g.belongOrganID)=0 then 1 when grouping(g.belongOrganID)=1 then 0 end )+(case when grouping(g.customerN)=0 then 1 when grouping(g.customerN)=1 then 0 end )+(case when grouping(g.vtype)=0 then 1 when grouping(g.vtype)=1 then 0 end ),uuid() as ID,count(*) as count, sum(g.totoalPrice) as totoalPrice from Gin o where 1=1 group by rollup(g.belongOrganID,g.customerN,g.vtype)
聚合查询
HQL也支持查询中的聚合函数,目前HQL支持的聚合函数包括:
avg(),count(),max(),min(),sum()
distinct
有时查询结果集中有相同的数据,关键词distinct用于返回唯一不同的数据。
select [distinct] object(variable) from abstractschemaname [as] variable [where value comparison value]
子查询
如果底层数据库支持子查询,则可以在HQL语句中使用子查询。与SQL中子查询相似的是,HQL中的子查询也需要使用()括起来。如:
from Cat as fatcat
where fatcat.weight > ( select avg(cat.weight) from DomesticCat cat )
如果select中包含多个属性,则应该使用元组构造符:
from Cat as cat
where not ( cat.name, cat.color ) in (
select cat.name, cat.color from DomesticCat cat
)
命名查询
命名查询也和EJB3 QL一样使用@NamedQuery注解。
@NamedQuery
我们可以使用@NamedQuery注释来定义命名查询,这个注释可以放在任何实体Bean的上方,但为了便于管理,最好放在相关的实体Bean上方。
@NamedQuery(name="MyQuery",query="select p from PersonFlight p where name like ?1")
@NamedQueries( {
@NamedQuery(name = "person.query", query = "from Person p where p.id=? "),
@NamedQuery(name = "person.query1", query = "from Person p where p.id=? ") })
也可以在hbm.xml文件中配置命名查询:
select distinct g
from org.jbpm.pvm.internal.identity.impl.MembershipImpl m
join m.user u
join m.group g
where u.id = :userId
]]>
Query query = session.getNamedQuery("findGroupsByUser");
query.setInteger("userId", 25);
List result= query.list();
Hibernate org.hibernate.Query类
setParameter()方法:
在Hibernate的HQL查询中可以通过setParameter()方法邦定任意类型的参数,如下代码:
String hql="from User user where user.name=:customername";//注意=:后不要有空格
Query query=session.createQuery(hql);
query.setParameter("customername",name,Hibernate.STRING);
如上面代码所示,setParameter()方法包含三个参数,分别是命名参数名称,命名参数实际值,以及命名参数映射类型。对于某些参数类型 setParameter()方法可
以更具参数值的Java类型,猜测出对应的映射类型,因此这时不需要显示写出映射类型,像上面的例子,可以直接这样写:
query.setParameter("customername",name); 但是对于一些类型就必须写明映射类型,比如java.util.Date类型,因为它会对应Hibernate的多种映射类型,比如
Hibernate.DATA或者Hibernate.TIMESTAMP。
setProperties()方法:
在Hibernate中可以使用setProperties()方法,将命名参数与一个对象的属性值绑定在一起,如下程序代码:
Customer customer=new Customer();
customer.setName("pansl");
customer.setAge(80);
Query query=session.createQuery("from Customer c where c.name=:name and c.age=:age");
query.setProperties(customer);
setProperties()方法会自动将customer对象实例的属性值匹配到命名参数上,但是要求命名参数名称必须要与实体对象相应的属性同名。
查询单个字段
String hql = " select name from Users";
Query query = session.createQuery(hql);
List
list = query.list();
for(String str : list){
System.out.println(str);
}
输出结果为:
name1
name2
name3
查询其中几个字段
String hql = " select name,passwd from Users";
Query query = session.createQuery(hql);
//默认查询出来的list里存放的是一个Object数组
List list = query.list();
for(Object[] object : list){
String name = (String)object[0];
String passwd = (String)object[1];
System.out.println(name + " : " + passwd);
}
输出结果为:
name1 : password1
name2 : password2
name3 : password3
修改默认查询结果(query.list())不以Object[]数组形式返回,以List形式返回
添加new list(),注意list里的l是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是List集合了
String hql = " select new list(name,passwd) from Users";
Query query = session.createQuery(hql);
//默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是List集合了
List list = query.list();
for(List user : list){
String name = (String)user.get(0);
String passwd = (String)user.get(1);
System.out.println(name + " : " + passwd);
}
/**
输出结果为:
name1 : password1
name2 : password2
name3 : password3
*/
修改默认查询结果(query.list())不以Object[]数组形式返回,以Map形式返回
添加new map(),注意map里的m是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是 map集合了
String hql = " select new map(name,passwd) from Users";
Query query = session.createQuery(hql);
//默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是Map集合了
List list = query.list();
for(Map user : list){
//一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value是字段值
//如果将hql改为:String hql = " select new map(name as username,passwd as password) from Users";,那么key将不是字符串0,1,2...了,而是"username","password"了
String name = (String)user.get("0");//get("0");是get(key),注意:0,1,2...是字符串,而不是整形
String passwd = (String)user.get("1");
System.out.println(name + " : " + passwd);
}
/**
输出结果为:
name1 : password1
name2 : password2
name3 : password3
*/
修改默认查询结果(query.list())不以Object[]数组形式返回,以自定义类型形式返回
public class MyUser {
private String username;
private String password;
//因为:String hql = " select new com.domain.MyUser(name,passwd) from Users";所以必须要有接受2个参数的构造函数
public MyUser(String username,String password){
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2使用HibernateCallBack
HibernateTemplate还提供了一种更加灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。HibernateTemplate的灵活访问方式可通过如下两个方法完成
Object execute(HibernateCallback action)
List executeFind(HibernateCallback action)
这两个方法都需要一个HibernateCallback的实例,HibernateCallback实例可在任何有效的Hibernate数据访问中使用。程序开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决Spring封装 Hibernate后灵活性不足的缺陷。
HibernateCallback 是一个接口,该接口包含一个方法doInHibernate(org.hibernate. Session session),该方法只有一个参数Session。在开发中提供HibernateCallback实现类时,必须实现接口里包含的 doInHibernate方法,在该方法体内即可获得Hibernate Session的引用,一旦获得了Hibernate Session的引用,就可以完全以Hibernate的方式进行数据库访问。
注意:doInHibernate方法内可以访问Session,该Session对象是绑定在该线程的Session实例。该方法内的持久层操作,与不使用Spring时的持久层操作完全相同。这保证了对于复杂的持久层访问,依然可以使用Hibernate的访问方式。
下面的代码对HibernateDaoSupport类进行扩展(虽然Spring 2.0的HibernateTemplate提供了一个分页方法setMaxResults,但仅此一个方法依然不能实现分页查询),这种扩展主要是为该类增加了3个分页查询的方法,分页查询时必须直接调用Hibernate的Session完成,因此,必须借助于HibernateCallBack的帮助。
public class YeekuHibernateDaoSupport extends HibernateDaoSupport
{
/**
* 使用hql 语句进行分页查询操作
* @param hql 需要查询的hql语句
* @param offset 第一条记录索引
* @param pageSize 每页需要显示的记录数
* @return 当前页的所有记录
*/
public List findByPage(final String hql,
final int offset, final int pageSize)
{
//HibernateDaoSupport已经包含了getHibernateTemplate()方法
List list = getHibernateTemplate().executeFind(new
HibernateCallback()
{
public Object doInHibernate(Session session)
throws HibernateException, SQLException
//该方法体内以Hibernate方法进行持久层访问
{
//注意setFirstResult是从0开始的,0就是第一页的数据
List result = session.createQuery(hql)
.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}
/**
* 使用hql 语句进行分页查询操作
* @param hql 需要查询的hql语句
* @param value 如果hql有一个参数需要传入,value就是传入的参数
* @param offset 第一条记录索引
* @param pageSize 每页需要显示的记录数
* @return 当前页的所有记录
*/
public List findByPage(final String hql , final Object value ,
final int offset, final int pageSize)
{
List list = getHibernateTemplate().executeFind(new
HibernateCallback()
{
public Object doInHibernate(Session session)
throws HibernateException, SQLException
{
//下面查询的是最简单的Hiberante HQL查询
List result = session.createQuery(hql)
.setParameter(0, value)
.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}
/**
* 使用hql 语句进行分页查询操作
* @param hql 需要查询的hql语句
* @param values 如果hql有多个参数需要传入,values就是传入的参数数组
* @param offset 第一条记录索引
* @param pageSize 每页需要显示的记录数
* @return 当前页的所有记录
*/
public List findByPage(final String hql, final Object[] values,
final int offset, final int pageSize)
{
List list = getHibernateTemplate().executeFind(new
HibernateCallback()
{
public Object doInHibernate(Session session)
throws HibernateException, SQLException
{
Query query = session.createQuery(hql);
for (int i = 0 ; i < values.length ; i++)
{
query.setParameter( i, values[i]);
}
List result = query.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}
}
在上面的代码实现中,直接使用了getHibernateTemplate()方法,这个方法由Hibernate- DaoSupport提供。而YeekuHibernateDaoSupport是HibernateDaoSupport的子类,因此,可以直接使用该方法。
当实现doInHibernate(Session session)方法时,完全以Hibernate的方式进行数据库访问,这样保证了Hibernate进行数据库访问的灵活性。
注意:Spring提供的XxxTemplate和XxxCallBack互为补充,二者体现了Spring框架设计的用心良苦:XxxTemplate对通用操作进行封装,而XxxCallBack解决了封装后灵活性不足的缺陷。
3Hibernate产生的自增主键
使用@GeneratedValue和@GenericGenerator
针对不同的数据库可以同时使用
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
针对mysql
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
针对oracle
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator="s_gen")
@SequenceGenerator(name="s_gen",sequenceName="s_seq")
说明:@GeneratedValue()的strategy属性支持5中id生成器:除上面3中外还有GenerationType.TABLE。
@GeneratedValue:主键的产生策略,通过strategy属性指定。
主键产生策略通过GenerationType来指定。GenerationType是一个枚举,它定义了主键产生策略的类型。
AUTO 自动选择一个最适合底层数据库的主键生成策略。如MySQL会自动对应auto increment。这个是默认选项,即如果只写@GeneratedValue,等价于@GeneratedValue(strategy=GenerationType.AUTO)。
IDENTITY 表自增长字段,Oracle不支持这种方式。
SEQUENCE 通过序列产生主键,MySQL不支持这种方式。
TABLE 通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。
不同的JPA实现商生成的表名是不同的,如 OpenJPA生成openjpa_sequence_table表,Hibernate生成一个hibernate_sequences表,而TopLink则生成sequence表。这些表都具有一个序列名和对应值两个字段,如SEQ_NAME和SEQ_COUNT。
在我们的应用中,一般选用@GeneratedValue(strategy=GenerationType.AUTO)这种方式,自动选择主键生成策略,以适应不同的数据库移植。
@GenericGenerator
自定义主键生成策略,由@GenericGenerator实现。
hibernate在JPA的基础上进行了扩展,可以用一下方式引入hibernate独有的主键生成策略,就是通过@GenericGenerator加入的。例如:
@Id
@Column(name="id",length=32)
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
private String roleID;
name属性指定生成器名称。
strategy属性指定具体生成器的类名。
parameters得到strategy指定的具体生成器所用到的参数。
对于这些hibernate主键生成策略和各自的具体生成器之间的关系,在org.hibernate.id.IdentifierGeneratorFactory中指定了
static {
GENERATORS.put("uuid", UUIDHexGenerator.class);
GENERATORS.put("hilo", TableHiLoGenerator.class);
GENERATORS.put("assigned", Assigned.class);
GENERATORS.put("identity", IdentityGenerator.class);
GENERATORS.put("select", SelectGenerator.class);
GENERATORS.put("sequence", SequenceGenerator.class);
GENERATORS.put("seqhilo", SequenceHiLoGenerator.class);
GENERATORS.put("increment", IncrementGenerator.class);
GENERATORS.put("foreign", ForeignGenerator.class);
GENERATORS.put("guid", GUIDGenerator.class);
GENERATORS.put("uuid.hex", UUIDHexGenerator.class); //uuid.hex is deprecated
GENERATORS.put("sequence-identity", SequenceIdentityGenerator.class);
}
native
根据地层数据库的能力选择identity,sequence或hilo中的一个。
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "native")
uuid
用一个128-bit的UUID算法生成字符串类型的标识符,这在一个网络中是唯一的。UUID被编码为一个32为16进制数字的字符串。
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
hilo
使用一个高/低位算法高效的生成long,short或int类型的标识符。给定一个表和字段(默认分别是hibernate_unique_key和next_hi)作为高位值的来源。高/低位算法生成的标识符只在一个特定的数据库中是唯一的。
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "hilo")
assigned
让应用升序在save()之前为对象分配一个标识符。这是元素没有指定时的默认生成策略。
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "assigned")
identity
对于DB2,MySQL,MS SQL Server,Sybase和HypersonicSQL的内置标识字段提供支持,返回的标示符是long,short或int类型的。整数递增。
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "identity")
select
通过数据库触发器选择一些唯一主键的行返回主键值分配一个主键。
@GeneratedValue(generator = "paymentableGenerator"
@GenericGenerator(name="select", strategy="select", parameters = { @Parameter(name = "key", value = "idstoerung") })
sequence
在DB2,PostgreSQL,Oracle,SAP DB,McKoi中使用序列(sequence),而在Interbase中使用生成器(generator)。返回的标示符是long,short或int类型的。
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "sequence", parameters = { @Parameter(name = "sequence", value = "seq_payablemoney") })
seqhilo
使用一个高/低位算法高效的生成long,short或int类型的标识符,给定一个数据库序列(sequence)的名字。
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "seqhilo", parameters = { @Parameter(name = "max_lo", value = "5") })
increment
用于为long,short或int类型生成唯一标识,只有在没有其他进程往同一张表中插入数据时才能使用,在集群下不要使用。
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "increment")
foreign
使用另一个相关联的对象的标识符。通常和联合起来使用。
@GeneratedValue(generator = "idGenerator")
@GenericGenerator(name = "idGenerator", strategy = "foreign",
parameters = { @Parameter(name = "property", value = "employee") })
例如:
@Entity
public class Employee {
@Id
@GeneratedValue(generator = "idGenerator")
@GenericGenerator(name = "idGenerator", strategy = "foreign",
parameters = { @Parameter(name = "property", value = "info") })
Integer id;
@OneToOne
EmployeeInfo info;
...
}
guid
在MS SQL Server和MySQL中使用数据库生成GUID字符串。
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "guid")
uuid.hex
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid.hex")
sequence-identity
一种特别的序列生成策略,使用数据库序列来生成实际值,但将它和jdbc3的getGeneratedKeys结合在一起,使的在插入语句执行的时候就返回生成的值,目前只面向JDK1.4的oracle10g开放这一策略。
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "sequence-identity",
parameters = { @Parameter(name = "sequence", value = "seq_payablemoney") })
在hbm.xml映射文件中,使用id生成策略
*******************
在hibernate的保存或更新完实体对象后,就可以通过实体对象得到其对应的id。
*********************
createSQLQuery(String str)
例如,Object obj=session.createSQLQuery("select o.name from organ o where o.id=1");
如果只查询一列并只有一个结果则返回Object,如果有多个结果则返回List。如果查询多列且有多个结果则返回List。
List listobj=session.createSQLQuery("select o.name,o.id from organ o");
******************
hql中+号的另一中作用:
createQuery("select new Vcolor(c.vcolorID,c.name) from Vconfig o,Vcolor c where o.vconfigID=:vconfigId and o.outterColor like '%'+c.vcolorID+'%' ");
表示从Vcolor中找出VcolorID在指定的Vconfig对象的outterColor属性中的vcolor对象。不能写成
like '%c.vcolorID%' 。这种写法其实和sql写法一样。
http://www.redsaga.com/hibernate-ref/3.x/zh-cn/html/queryhql.html
****************
case when:
1. select sum(case when otype='A' then price when otype='B' then -price end ) from Entity (sql中支持,但hql查询时,控制台查询语句缺少 ‘when otype='B' then -price ’,也就是只有otype='A' 的情况)
2.select sum(case when otype='A' then price else -price end ) from Entity (支持)
3. select sum(case when otype='A' then price else case when otype='B' then -price end end ) from Entity (支持)
*********************
inner join(内连接)
left outer join(左外连接)
right outer join(右外连接)
full join (全连接,并不常用)
HQL中的条件用with即:left join ... with...
SQL中的条件用on即:left join ... on...
语句inner join, left outer join 以及 right outer join 可以简写。
from Cat as cat join cat.mate as mate left join cat.kittens as kitten
通过HQL的with关键字,你可以提供额外的join条件。
from Cat as cat left join cat.kittens as kitten with kitten.bodyWeight > 10.0
还有,一个"fetch"连接允许仅仅使用一个选择语句就将相关联的对象或一组值的集合随着他们的父对象的初始化而被初始化,这种方法在使用到集合的情况下尤其有用,对于关联和集合来说,它有效的代替了映射文件中的外联接 与延迟声明(lazy declarations).
from Cat as cat inner join fetch cat.mate left join fetch cat.kittens
一个fetch连接通常不需要被指定别名, 因为相关联的对象不应当被用在 where 子句 (或其它任何子句)中。同时,相关联的对象 并不在查询的结果中直接返回,但可以通过他们的父对象来访问到他们。
from Cat as cat inner join fetch cat.mate left join fetch cat.kittens child left join fetch child.kittens
假若使用iterate()来调用查询,请注意fetch构造是不能使用的(scroll() 可以使用)。fetch也不应该与setMaxResults() 或setFirstResult()共用,这是因为这些操作是基于结果集的,而在预先抓取集合类时可能包含重复的数据,也就是说无法预先知道精确的行数。fetch还不能与独立的 with条件一起使用。通过在一次查询中fetch多个集合,可以制造出笛卡尔积,因此请多加注意。对bag映射来说,同时join fetch多个集合角色可能在某些情况下给出并非预期的结果,也请小心。最后注意,使用full join fetch 与 right join fetch是没有意义的。
如果你使用属性级别的延迟获取(lazy fetching)(这是通过重新编写字节码实现的),可以使用 fetch all properties 来强制Hibernate立即取得那些原本需要延迟加载的属性(在第一个查询中)。
from Document fetch all properties order by name
from Document doc fetch all properties where lower(doc.name) like '%cats%'
************************
query.setResultTransformer方法
我们如果查询出实体类部分属性,hibernate会自动帮你封装成为object对象[].可是,我们想直接用对象怎么办?难道还要一个一个的setter循环赋值给VO。
例如:
public SureOrder getSureOrderVO(Integer productId) {
String hql = "select pd.id as prodid,pd.cuxiaoPrice as cuxiaoPrice,pd.types as types,pd.price as price,pd.newprice as newprice,p.nodeId,p.imgurl as imgurl,p.types as types,p.factId as factId,p.qianYueId as qianyueId,p.guiGe as guiGe,p.name as name,p.pinPai as pinPai from Product pd,Prod p where p.id=pd.prodId and pd.id =?";
Query query = productDao.getProductDetail(productId,hql);
//主要起作用的就是下面的这个方法:SureOrder是我要封装的VO类.这样hibernate在执行hql查询的时候,会直接将结果封装为SureOrder对象.
List list = query.setResultTransformer(Transformers.aliasToBean(SureOrder.class)).list();
if(!list.isEmpty()){
return (SureOrder) list.get(0);
}
return null;
}
**************************
select中的new map前面也可以使用distinct :
select distinct new map(...)
你可能感兴趣的:(hibernate)
SpringDataJPA 开启批量插入及批量插入不生效解决
AK_GCC
spring hibernate java
开启配置#统计生成SQL执行情况spring.jpa.properties.hibernate.generate_statistics=true#开启批量插入spring.jpa.properties.hibernate.jdbc.batch_size=500spring.jpa.properties.hibernate.order_inserts=true代码示例org.springframew
hibernate二级缓存
Hibernate二级缓存深度解析与技术实践核心原理与工作流程Hibernate二级缓存通过SessionFactory层建立全局数据缓冲区,采用分层存储机制实现数据库访问优化。其工作流程分为4个阶段:1️⃣查询请求到达时优先检查缓存区域2️⃣命中缓存则直接返回持久化对象3️⃣未命中时执行数据库查询并更新缓存4️⃣数据变更时同步更新缓存状态️主流缓存方案对比(中国开发者常用)特性Ehcache3.
架构整合要点。
jc_dreaming2
OPEN Spring Struts Java Hibernate XML
整合spring2+struts1.2+hibernate3.2程序要使用spring2,需要spring插件jar包和spring的类库外。1.web.xml配置spring的监听。org.springframework.web.context.ContextLoaderListener通过contextConfigLocation上下文参数指定spring配置文件javax.servlet.j
spring介绍
莫得等待
spring spring java 后端
什么是SpringFrameworkSpring是一个开源应用框架,旨在降低应用程序开发的复杂度。它是轻量级、松散耦合的。它具有分层体系结构,允许用户选择组件,同时还为J2EE应用程序开发提供了一个有凝聚力的框架。它可以集成其他框架,如Structs、Hibernate、EJB等,所以又称为框架的框架列举SpringFramework的优点。由于SpringFrameworks的分层架构,用户可以
spring配合hibernate报错:sessionFactory or hibernate
Spring整合Hibernate报错"sessionFactoryorhibernateTemplateisrequired"全解指南通过分析国内技术社区(CSDN、开源中国、阿里云开发者社区)的典型案例,结合企业级项目实战经验,我们归纳出以下系统性解决方案。本文包含5大核心排查方向及对应的修复流程图。错误原理深度解析SessionFactory是Hibernate的核心接口,负责创建Sessi
MyBatis 从入门到进阶:Java开发者必备宝典
Kale又菜又爱玩
mybatis java 开发语言
MyBatis从入门到进阶:Java开发者必备宝典前言嗨,Java开发者们!有没有被复杂的数据库操作搞得焦头烂额?今天我们来聊聊MyBatis,一个能帮你摆脱繁琐SQL手写痛苦的神器!MyBatis,简称"小麦",是Java世界里处理数据库的老大哥。它不像Hibernate那样“全自动”,但它的“半自动”风格让人倍感舒适,既能享受SQL的自由,又能避免繁琐的JDBC操作。那么,话不多说,让我们开启
介绍一下 Hibernate 的二级缓存
晚夜微雨问海棠呀
hibernate spring spring boot
Hibernate的二级缓存Hibernate的二级缓存是位于SessionFactory级别的缓存,与一级缓存(Session级别)不同,二级缓存可以跨多个Session共享数据。二级缓存的主要目的是减少对数据库的访问次数,从而提高应用的性能。二级缓存的工作原理缓存策略:Hibernate提供了多种缓存策略,如read-only、read-write、nonstrict-read-write和t
简述 Hibernate 和 JDBC 的优缺点?如何书写一个 one to many 配置文件
晚夜微雨问海棠呀
hibernate java 后端
Hibernate和JDBC的优缺点Hibernate优点:对象关系映射(ORM):Hibernate提供了强大的ORM功能,可以将Java对象与数据库表进行映射,简化了数据访问操作。事务管理:Hibernate提供了事务管理功能,可以方便地进行事务控制。懒加载:支持懒加载机制,可以按需加载数据,提高性能。缓存机制:提供了二级缓存机制,可以显著提高应用的性能。查询语言:支持HQL(Hibernat
JAVAEE框架技术之14SSM综合案例 产品管理CRUD
teayear
毕业设计项目 java-ee java spring
SSM综合案例一、课程目标1.【掌握】SSM整合2.【√】学习Lombok使用3.【理解】Layui页面书写(备注:其他前端技术也可以)4.【理解】理解SSM综合案例表的结构5.【掌握】产品管理二、SSM整合Spring+SpringMVC+Mybatis–>SSMSpring+Struts2+Hibernate-->SSH2.1简单整合在学习springmvc时我们发现,springmvc也会像
Hibernate不是过时了么?SpringDataJpa又是什么?和Mybatis有什么区别?
芝士汉堡 ིྀིྀ
mybatis hibernate spring
一、前言ps:大三下学期,拿到了一份实习。进入公司后发现用到的技术栈有SpringDataJpa\Hibernate,但对于持久层框架我只接触了Mybatis\Mybatis-Plus,所以就来学习一下SpringDataJpa。1.回顾MyBatis来自官方文档的介绍:MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动
Hibernate和Spring Data JPA
打伞的木头人
什么是JavaPersistenceAPI?JavaPersistenceAPI提供了一个规范,用于将数据通过Java对象持久化、读取和管理到数据库中的关系表。JPA是JavaPersistenceAPI的简称,中文名Java持久层API,是JDK5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。Sun引入新的JPAORM规范出于两个原因:其一,简化现有JavaE
Hibernate、JPA、Spring DATA JPA、Hibernate 代理和架构
小蜗牛慢慢爬行
hibernate 架构 java
大家好,今天,我们将讨论Hibernate和JPA架构。在开始我们的文章之前,我想回答一个重要的问题:为什么我们需要使用Hibernate、EclipseLink、EFcore等ORM工具?事实上,这是一个非常好的问题。我们开发人员通常有几个月的时间来创建一个新项目,或者有两周的时间来为我们的业务逻辑添加新功能。当我们考虑这个时间表时,为我们的业务逻辑编写SQL代码需要花费时间;因此,ORM工具的
mikro-orm 和typeorm 对比
大耳朵乔乔
NodeJs # SQL # NestJs node.js 数据库
以下是Mikro-ORM和TypeORM的详细对比:设计理念与架构Mikro-ORM:基于数据映射器、工作单元和身份映射模式。这种设计使得它在管理内存中实体状态方面表现优异,能够自动处理事务,当调用em.flush()时,所有计算出的更改都会被包装在一个数据库事务中。TypeORM:支持活跃记录和数据映射器模式,深受Hibernate、Doctrine和Entity框架等传统ORM的影响。它提供了
Spring config location file not found exception
qq361301276
Maven Maven
1downvotefavorite1Inmywebappi'mtryingtousespringsecurity.Ihavethefollowingprojectstructure:Inmyweb.xmlisettheconfigLocationslikethis:AndinmyHibernateUtil,icreatetheClassPathXmlApplicationContextliketh
Hibernate快速入门:基于H2内存数据库的ORM实践
t0_54coder
数据库 hibernate oracle 个人开发
在当今的软件开发中,ORM(对象关系映射)框架已经成为简化数据库操作的重要工具之一。Hibernate作为Java领域中非常流行的ORM框架,能够帮助开发者将Java类映射到数据库表中,从而减少大量的数据库操作代码。本文将通过一个简单的示例,介绍如何使用Hibernate结合H2内存数据库,快速实现一个简单的ORM应用。一、项目依赖配置在开始之前,我们需要配置项目的依赖。这里我们使用Maven作为
JAVA动态代理
日落前的我
java 代理模式 开发语言
简介:Java动态代理是一种在运行时创建代理类的机制,动态代理可以在不修改源代码的情况下,在运行时为某个接口动态生成实现类,并且可以拦截接口中的方法调用,从而实现一些特殊的功能。动态代理在Java中有着广泛的应用,比如SpringAOP、Hibernate数据查询、测试框架的后端mock、RPC远程调用、Java注解对象获取、日志、用户鉴权、全局性异常处理、性能监控,甚至事务处理等。分类:java
SpringBoot实现各种参数校验,写得太好了,建议收藏!
白露与泡影
spring boot java 后端
之前也写过一篇关于SpringValidation使用的文章,不过自我感觉还是浮于表面,本次打算彻底搞懂SpringValidation。本文会详细介绍SpringValidation各种场景下的最佳实践及其实现原理,死磕到底!简单使用JavaAPI规范(JSR303)定义了Bean校验的标准validation-api,但没有提供实现。hibernatevalidation是对这个规范的实现,并
使用 @EmbeddedId 和 @ManyToOne 实现复合主键的 JPA 实践
t0_54manong
个人开发
在实际的软件开发中,我们常常需要处理复杂的实体关系,尤其是在数据库设计中,复合主键的使用场景非常常见。本文将通过一个具体的例子,展示如何在JavaPersistenceAPI(JPA)中使用@EmbeddedId和@ManyToOne注解来实现复合主键,并通过Hibernate进行数据持久化和查询。一、背景与需求假设我们有一个员工任务管理系统,其中员工(Employee)和任务(Task)是一对多
JPA 和 Hibernate(Springboot中使用HQL)
小白的一叶扁舟
Java开发 hibernate spring boot java 后端
前言:在项目开发过程中,使用Springboot集成HQL,在此用于记录,下方有原生方法及HQL注意事项和示例,有兴趣的可往下阅读。一、基本概念JPA:全称是JavaPersistenceAPI,即Java持久化API,是SUN公司推出的一套基于ORM的规范,由一系列接口和抽象类构成。它是EJB3规范中负责对象持久化的应用程序编程接口(ORM接口),定义了多种注释,这些注释可分为类级别、方法级别和
Hibernate与Spring Data JPA:深入解读两大持久化框架的优劣与选择
devme
hibernate spring java
亲爱的读者,你是否在处理Java应用程序的数据库交互时,曾对选择哪种持久化框架感到困惑?你是否曾对Hibernate和SpringDataJPA之间的关系感到好奇?今天,我将带你深入探索这两个流行的Java持久化框架,帮助你更好地理解它们的优缺点,以及在何种情况下应该选择哪一个。首先,让我们来了解一下Hibernate和SpringDataJPA的基本概念。HibernateHibernate是一
【2023最新Java大厂面试题】——MyBatis面试题,看完拿捏面试官
Java凤梨
Java金三银四面试题 mybatis java 面试
全套Java金三银四面试题持续更新可文末自取,建议关注收藏不然下次找不到哟~目录1、什么是Mybatis?2、Mybaits的优点:3、MyBatis框架的缺点:4、MyBatis框架适用场合:5、MyBatis与Hibernate有哪些不同?6、#{}和${}的区别是什么?7、当实体类中的属性名和表中的字段名不一样,怎么办?8、模糊查询like语句该怎么写?9、通常一个Xml映射文件,都会写一个
Hibernate中文版教程:快速入门与实践
焦虑中
本文还有配套的精品资源,点击获取简介:Hibernate是一个高效的JavaORM框架,它通过对象关系映射简化数据库操作,使得开发人员能以面向对象的方式处理数据。本教程旨在为初学者提供一份详尽的Hibernate指南,涵盖了实体管理、会话管理、查询语言HQL、缓存机制等核心功能。教程还介绍了配置文件、映射文件、CriteriaAPI、CascadeType和FetchType、事务处理、关联映射、
java软件工程师简历
极客11
面试与求职 java 开发语言
java软件工程师简历一姓名:陶**性别:男电话:136-3231****学历:本科邮箱:tll-wuhu@163.com地址:广州市天河区求职意向java软件工程师掌握技能1.熟练CoreJava编程,有编写注释的习惯;2.能熟练的整合Spring+Struts+Hibernate(SSH)三大开源框架;3.能熟练的应用各种常见的设计模式:工厂模式、单例模式、缺省适配器模式、不变模式、装饰模式、
基于 SSH 的任务调度系统
众拾达人
Java Web ssh 运维
文末附有完整项目代码在当今科技飞速发展的时代,任务调度系统的重要性日益凸显。本文将详细介绍一个基于SSH(Spring+Struts2+Hibernate)的任务调度系统的设计与实现。一、系统概述本系统旨在改变传统人工任务调度方式,通过计算机计算最佳人员分配和时间分配,绘制任务调度图,实现任务的科学调度与团队协作。它采用B/S体系结构,主要使用JAVA语言,后台数据库为MySQL。二、系统设计研究
Java中的延迟加载与即时加载:JPA与Hibernate的使用指南
微赚淘客系统@聚娃科技
java hibernate
Java中的延迟加载与即时加载:JPA与Hibernate的使用指南大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在开发企业级Java应用时,JPA(JavaPersistenceAPI)和Hibernate是常用的持久化框架。它们帮助我们轻松地管理数据库中的数据。然而,在处理复杂关系数据时,加载策略(即延迟加载和即时加载)会显著影响性能和内存使用。因此,理解并
spring整合hibernate最基础的方式
木木ainiks
hibernate spring java
1创建文件,可以创建web文件目录2导入jar包,需要导全,我就是jar没导全,后面怎么运行都不对3配置applicationContext.xml<beanid="sessionFactory"
Spring Data JPA
kjcoder
Spring Data JPA 后端
JPA概述JPA的全称是JavaPersistenceAPI,即Java持久化API,是SUN公司推出的一套基于ORM的规范,内部是由一系列的接口和抽象类构成。JPA规范不干活,真正干活的是依托与它的实现方式(例:hibernate)。搭建环境(需求:保存客户)1.创建maven工程导入坐标org.hibernatehibernate-entitymanager2.需要配置jpa的核心配置文件*位
搭建第一个SpringDataJPA工程
码来码去(未来可期)
JavaWeb java
第一步:创建maven工程,导入maven坐标使用SpringDataJPA,需要整合Spring与SpringDataJPA,并且需要提供JPA的服务提供者hibernate,所以需要导入spring相关坐标,hibernate坐标,数据库驱动坐标等4.2.4.RELEASE5.0.7.Final1.6.61.2.120.9.1.25.1.6junitjunit4.9testorg.aspect
讨论视频系统架构
Robin-LV
MVC JDBC
今天接到一个业务,领导让我搭建一个视频系统架构。架构采用MVC的模式这个大家都知道,技术采用Sping,hibernate3,数据层采用Sping提供的的jdbc模板。我知道要提供一些公共的的类和接口。还有一些封装好的方法。这个架构要考虑现在老系统的数据,等新系统完成要把数据导过去,还要考虑多平台融合的问题。由于我们公司有多套系统,领导想做底层统一以后好管理。现在晕晕的,请高手谈谈如何搭建一个好的
log4jdbc使用介绍
leechiwi
log4jdbc
0前言使用java进行数据库操作时最痛苦的莫过于拼接SQL语句。在实际运行时往往需要查看实际生成的SQL语句和实际传入的参数,或许还会有查看SQL执行时间等的需求。无论原生JDBC、dbutils、mybatis还是hibernate,使用log4j等日志框架可以看到生成的SQL,但是占位符和参数总是分开打印的。实在是不太友好。显示如下的效果:select*fromt_userwhereage>?
web报表工具FineReport常见的数据集报错错误代码和解释
老A不折腾
web报表 finereport 代码 可视化工具
在使用finereport制作报表,若预览发生错误,很多朋友便手忙脚乱不知所措了,其实没什么,只要看懂报错代码和含义,可以很快的排除错误,这里我就分享一下finereport的数据集报错错误代码和解释,如果有说的不准确的地方,也请各位小伙伴纠正一下。
NS-war-remote=错误代码\:1117 压缩部署不支持远程设计
NS_LayerReport_MultiDs=错误代码
Java的WeakReference与WeakHashMap
bylijinnan
java 弱引用
首先看看 WeakReference
wiki 上 Weak reference 的一个例子:
public class ReferenceTest {
public static void main(String[] args) throws InterruptedException {
WeakReference r = new Wea
Linux——(hostname)主机名与ip的映射
eksliang
linux hostname
一、 什么是主机名
无论在局域网还是INTERNET上,每台主机都有一个IP地址,是为了区分此台主机和彼台主机,也就是说IP地址就是主机的门牌号。但IP地址不方便记忆,所以又有了域名。域名只是在公网(INtERNET)中存在,每个域名都对应一个IP地址,但一个IP地址可有对应多个域名。域名类型 linuxsir.org 这样的;
主机名是用于什么的呢?
答:在一个局域网中,每台机器都有一个主
oracle 常用技巧
18289753290
oracle常用技巧 ①复制表结构和数据 create table temp_clientloginUser as select distinct userid from tbusrtloginlog ②仅复制数据 如果表结构一样 insert into mytable select * &nb
使用c3p0数据库连接池时出现com.mchange.v2.resourcepool.TimeoutException
酷的飞上天空
exception
有一个线上环境使用的是c3p0数据库,为外部提供接口服务。最近访问压力增大后台tomcat的日志里面频繁出现
com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResou
IT系统分析师如何学习大数据
蓝儿唯美
大数据
我是一名从事大数据项目的IT系统分析师。在深入这个项目前需要了解些什么呢?学习大数据的最佳方法就是先从了解信息系统是如何工作着手,尤其是数据库和基础设施。同样在开始前还需要了解大数据工具,如Cloudera、Hadoop、Spark、Hive、Pig、Flume、Sqoop与Mesos。系 统分析师需要明白如何组织、管理和保护数据。在市面上有几十款数据管理产品可以用于管理数据。你的大数据数据库可能
spring学习——简介
a-john
spring
Spring是一个开源框架,是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只能由EJB完成的事情。然而Spring的用途不仅限于服务器端的开发,从简单性,可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。其主要特征是依赖注入、AOP、持久化、事务、SpringMVC以及Acegi Security
为了降低Java开发的复杂性,
自定义颜色的xml文件
aijuans
xml
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="white">#FFFFFF</color> <color name="black">#000000</color> &
运营到底是做什么的?
aoyouzi
运营到底是做什么的?
文章来源:夏叔叔(微信号:woshixiashushu),欢迎大家关注!很久没有动笔写点东西,近些日子,由于爱狗团产品上线,不断面试,经常会被问道一个问题。问:爱狗团的运营主要做什么?答:带着用户一起嗨。为什么是带着用户玩起来呢?究竟什么是运营?运营到底是做什么的?那么,我们先来回答一个更简单的问题——互联网公司对运营考核什么?以爱狗团为例,绝大部分的移动互联网公司,对运营部门的考核分为三块——用
js面向对象类和对象
百合不是茶
js 面向对象 函数创建类和对象
接触js已经有几个月了,但是对js的面向对象的一些概念根本就是模糊的,js是一种面向对象的语言 但又不像java一样有class,js不是严格的面向对象语言 ,js在java web开发的地位和java不相上下 ,其中web的数据的反馈现在主流的使用json,json的语法和js的类和属性的创建相似
下面介绍一些js的类和对象的创建的技术
一:类和对
web.xml之资源管理对象配置 resource-env-ref
bijian1013
java web.xml servlet
resource-env-ref元素来指定对管理对象的servlet引用的声明,该对象与servlet环境中的资源相关联
<resource-env-ref>
<resource-env-ref-name>资源名</resource-env-ref-name>
<resource-env-ref-type>查找资源时返回的资源类
Create a composite component with a custom namespace
sunjing
https://weblogs.java.net/blog/mriem/archive/2013/11/22/jsf-tip-45-create-composite-component-custom-namespace
When you developed a composite component the namespace you would be seeing would
【MongoDB学习笔记十二】Mongo副本集服务器角色之Arbiter
bit1129
mongodb
一、复本集为什么要加入Arbiter这个角色 回答这个问题,要从复本集的存活条件和Aribter服务器的特性两方面来说。 什么是Artiber? An arbiter does
not have a copy of data set and
cannot become a primary. Replica sets may have arbiters to add a
Javascript开发笔记
白糖_
JavaScript
获取iframe内的元素
通常我们使用window.frames["frameId"].document.getElementById("divId").innerHTML这样的形式来获取iframe内的元素,这种写法在IE、safari、chrome下都是通过的,唯独在fireforx下不通过。其实jquery的contents方法提供了对if
Web浏览器Chrome打开一段时间后,运行alert无效
bozch
Web chorme alert 无效
今天在开发的时候,突然间发现alert在chrome浏览器就没法弹出了,很是怪异。
试了试其他浏览器,发现都是没有问题的。
开始想以为是chorme浏览器有啥机制导致的,就开始尝试各种代码让alert出来。尝试结果是仍然没有显示出来。
这样开发的结果,如果客户在使用的时候没有提示,那会带来致命的体验。哎,没啥办法了 就关闭浏览器重启。
结果就好了,这也太怪异了。难道是cho
编程之美-高效地安排会议 图着色问题 贪心算法
bylijinnan
编程之美
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class GraphColoringProblem {
/**编程之美 高效地安排会议 图着色问题 贪心算法
* 假设要用很多个教室对一组
机器学习相关概念和开发工具
chenbowen00
算法 matlab 机器学习
基本概念:
机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。
开发工具
M
[宇宙经济学]关于在太空建立永久定居点的可能性
comsci
经济
大家都知道,地球上的房地产都比较昂贵,而且土地证经常会因为新的政府的意志而变幻文本格式........
所以,在地球议会尚不具有在太空行使法律和权力的力量之前,我们外太阳系统的友好联盟可以考虑在地月系的某些引力平衡点上面,修建规模较大的定居点
oracle 11g database control 证书错误
daizj
oracle 证书错误 oracle 11G 安装
oracle 11g database control 证书错误
win7 安装完oracle11后打开 Database control 后,会打开em管理页面,提示证书错误,点“继续浏览此网站”,还是会继续停留在证书错误页面
解决办法:
是 KB2661254 这个更新补丁引起的,它限制了 RSA 密钥位长度少于 1024 位的证书的使用。具体可以看微软官方公告:
Java I/O之用FilenameFilter实现根据文件扩展名删除文件
游其是你
FilenameFilter
在Java中,你可以通过实现FilenameFilter类并重写accept(File dir, String name) 方法实现文件过滤功能。
在这个例子中,我们向你展示在“c:\\folder”路径下列出所有“.txt”格式的文件并删除。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
C语言数组的简单以及一维数组的简单排序算法示例,二维数组简单示例
dcj3sjt126com
c array
# include <stdio.h>
int main(void)
{
int a[5] = {1, 2, 3, 4, 5};
//a 是数组的名字 5是表示数组元素的个数,并且这五个元素分别用a[0], a[1]...a[4]
int i;
for (i=0; i<5; ++i)
printf("%d\n",
PRIMARY, INDEX, UNIQUE 这3种是一类 PRIMARY 主键。 就是 唯一 且 不能为空。 INDEX 索引,普通的 UNIQUE 唯一索引
dcj3sjt126com
primary
PRIMARY, INDEX, UNIQUE 这3种是一类PRIMARY 主键。 就是 唯一 且 不能为空。INDEX 索引,普通的UNIQUE 唯一索引。 不允许有重复。FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。举个例子来说,比如你在为某商场做一个会员卡的系统。这个系统有一个会员表有下列字段:会员编号 INT会员姓名
java集合辅助类 Collections、Arrays
shuizhaosi888
Collections Arrays HashCode
Arrays、Collections
1 )数组集合之间转换
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
a)Arrays.asL
Spring Security(10)——退出登录logout
234390216
logout Spring Security 退出登录 logout-url LogoutFilter
要实现退出登录的功能我们需要在http元素下定义logout元素,这样Spring Security将自动为我们添加用于处理退出登录的过滤器LogoutFilter到FilterChain。当我们指定了http元素的auto-config属性为true时logout定义是会自动配置的,此时我们默认退出登录的URL为“/j_spring_secu
透过源码学前端 之 Backbone 三 Model
逐行分析JS源代码
backbone 源码分析 js学习
Backbone 分析第三部分 Model
概述: Model 提供了数据存储,将数据以JSON的形式保存在 Model的 attributes里,
但重点功能在于其提供了一套功能强大,使用简单的存、取、删、改数据方法,并在不同的操作里加了相应的监听事件,
如每次修改添加里都会触发 change,这在据模型变动来修改视图时很常用,并且与collection建立了关联。
SpringMVC源码总结(七)mvc:annotation-driven中的HttpMessageConverter
乒乓狂魔
springMVC
这一篇文章主要介绍下HttpMessageConverter整个注册过程包含自定义的HttpMessageConverter,然后对一些HttpMessageConverter进行具体介绍。
HttpMessageConverter接口介绍:
public interface HttpMessageConverter<T> {
/**
* Indicate
分布式基础知识和算法理论
bluky999
算法 zookeeper 分布式 一致性哈希 paxos
分布式基础知识和算法理论
BY NODEXY@2014.8.12
本文永久链接:http://nodex.iteye.com/blog/2103218
在大数据的背景下,不管是做存储,做搜索,做数据分析,或者做产品或服务本身,面向互联网和移动互联网用户,已经不可避免地要面对分布式环境。笔者在此收录一些分布式相关的基础知识和算法理论介绍,在完善自我知识体系的同
Android Studio的.gitignore以及gitignore无效的解决
bell0901
android gitignore
github上.gitignore模板合集,里面有各种.gitignore : https://github.com/github/gitignore
自己用的Android Studio下项目的.gitignore文件,对github上的android.gitignore添加了
# OSX files //mac os下 .DS_Store
成为高级程序员的10个步骤
tomcat_oracle
编程
What
软件工程师的职业生涯要历经以下几个阶段:初级、中级,最后才是高级。这篇文章主要是讲如何通过 10 个步骤助你成为一名高级软件工程师。
Why
得到更多的报酬!因为你的薪水会随着你水平的提高而增加
提升你的职业生涯。成为了高级软件工程师之后,就可以朝着架构师、团队负责人、CTO 等职位前进
历经更大的挑战。随着你的成长,各种影响力也会提高。
mongdb在linux下的安装
xtuhcy
mongodb linux
一、查询linux版本号:
lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noa