查询语句???

​String hql = "SELECT T1 FROM SysDepts T1 WHERE T1.guid = ?0" + " ORDER BY T1.orderNo DESC";​

  • WHERE T1.guid = ?0

最详细的Spring-data-jpa入门

​​1​​

Hibernate占位符?和:及JPA

​​1​​2

实战项目:数据访问层时所遇问题_后端

  • hibernate 4.1之后对于HQL中查询参数的占位符做了改进,如果仍然用老式的占位符会有类似如下的告警信息:建议用命名参数或者JPA占位符两中种方法来代替老的占位符查询方法
  • ?0 代表第一个参数,?1 代表第二个参数
  • 比如老的占位符查询代码片段:
String hql = "select t from Blog t where t.site=? ";
Query query = getSession().createQuery(hql);
query.setParameter(0, "micmiu.com");
  • 方法二:改成JPA占位符的方式:注意这里的0加引号了,与传统?方法不一样哟(后面两种查询方法就不会有告警信息产生了。)
String hql3 = "select t from Blog t where t.site=?0 ";
Query query3 = getSession().createQuery(hql3);
query2.setParameter("0", "micmiu.com");

常用的Hql语句

​​1​​

Hql和Sql区别

​​1​​

方法不知???

实战项目:数据访问层时所遇问题_字符串_02

介绍 Hibernate EntityManager

实战项目:数据访问层时所遇问题_字符串_03

entitymanager.createquery

​​1​​

5)HPQL query —— createQuery()

除了使用find()或getReference()方法来获得Entity Bean之外,你还可以通过JPQL得到实体Bean。

要执行JPQL语句,你必须通过EntityManager的createQuery()或createNamedQuery()方法创建一个Query 对象

Query query = em.createQuery(“select p from Person p where p. name=’黎明’”);
List result = query.getResultList();
Iterator iterator = result.iterator();
while( iterator.hasNext() ){
//处理Person
}

// 执行更新语句
Query query = em.createQuery(“update Person as p set p.name =?1 where p. personid=?2”);
query.setParameter(1, “黎明”);
query.setParameter(2, new Integer(1) );
int result = query.executeUpdate(); //影响的记录数

// 执行更新语句
Query query = em.createQuery(“delete from Person”);
int result = query.executeUpdate(); //影响的记录数

mysql中IN的用法

​​1​​

user_id = : userId 使用

​​1​​ 用于绑定方法和与数据库表有关的操作。

实战项目:数据访问层时所遇问题_后端_04

  • 应该是 :userId 等同于 #{userId}
  • 它就是个动态参数的标识而已
  • 就是类似于 mybatis 里面的 #{}

mysql中“=”和“:=”的区别

“:=”表示的是赋值操作。

​​1​​

mysql中#{}和${}的区别

​​1​​

createQuery 与 createNativeQuery 区别

createQuery( String qlString)使用的是HQL语句
createNativeQuery (String sqlString)使用的是SQL语句

mysql模糊查询like

​​1​​

mysql中双引号和单引号有什么区别

​​1​​

这个后面为什么要补充一个 ‘’ = ?3 呢【现在是个单引号能换成双引号吗】

实战项目:数据访问层时所遇问题_java_05


实战项目:数据访问层时所遇问题_子查询_06


回答:

  • 就是查询要么有值等于的要么为空的
  • 单引号是因为外面有个双引号了,要是用双引号的话得转义
    个人总结:
  • mysql不区分单双引号,如果外面用了双引号,里面就用单引号

sql使用小技巧之SELECT DISTINCT的用法

​​1​​

MySQL中LOCATE()函数的详解

​​1​​2

​LOCATE(subStr,string)​

  • 返回字符串1在字符串2中第一次出现的位置,只要字符串2中包含字符串1,那么返回值必然大于0

​LOCATE(subStr,string) > 0​

  • 实际需求:判断字符串(string)中是否包含另一个字符串(subStr)

​LOCATE(subStr,string) = 0​

  • 实际需求:判断字符串(string)中是否不包含另一个字符串(subStr)

MySQL中的EXISTS用法

​​1​​

实战项目:数据访问层时所遇问题_字符串_07

MySQL中CONCAT函数

​​1​​

含义

将多个字符串连接成一个字符串。

语法

concat(str1, str2,...) 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。

from后面跟select语句原来是这个意思

​​1​

实战项目:数据访问层时所遇问题_hibernate_08


实战举例:

实战项目:数据访问层时所遇问题_子查询_09

MySql:SELECT XX(语句) CONCAT() 函数用法

​​1​

实战项目:数据访问层时所遇问题_字符串_10

Mysql 中 exists 和 in 的区别

​​1​​ 下面将主查询的表称为外表;子查询的表称为内表。exists 与 in 的区别如下:

  • 子查询使用 exists,会先进行主查询,将查询到的每行数据循环带入子查询校验是否存在,过滤出整体的返回数据;子查询使用 in,会先进行子查询获取结果集,然后主查询匹配子查询的结果集,返回数据
  • 外表内表相对大小情况不一样时,查询效率不一样:两表大小相当,in 和 exists 差别不大;内表大,用 exists 效率较高;内表小,用 in 效率较高。
  • 不管外表与内表的大小,not exists 的效率一般要高于 not in,跟子查询的索引访问类型有关。

​​2​​ MySQL中 in 和 exists区别
MySQL中的in 语句是把外表和内表作hash 连接,而 exists语句是对外表作 loop循环,每次 loop 循环再对内表进行查询。一直大家都认为 exists 比 in 语句的效率要高,这种说法其实是不准确的。这个是要区分环境的。

1、 ​​如果查询的两个表大小相当,那么用 in 和 exists 差别不大。​

2、 如果两个表中一个较小一个是大表,则​​子查询表大的用 exists​​​,子查询表
小的用 in。

3、 not in 和 not exists:如果查询语句使用了 not in,那么内外表都进行全表扫描,没有用到索引;而 not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists 都比 not in要快。

[Mysql] CAST函数

​​1​​

CAST函数用于将值从一种数据类型转换为表达式中指定的另一种数据类型
语法
​​​CAST(value AS datatype)​

  • AS关键字用于分隔两个参数,在AS之前的是要处理的数据,在AS之后的是要转换的数据类型