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

查询语句???

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

方法不知???

在这里插入图片描述

介绍 Hibernate EntityManager

在这里插入图片描述

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
用于绑定方法和与数据库表有关的操作。
请添加图片描述

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

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

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

1

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

1

createQuery 与 createNativeQuery 区别

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

mysql模糊查询like

1

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

1

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

请添加图片描述
请添加图片描述
回答:

  • 就是查询要么有值等于的要么为空的
  • 单引号是因为外面有个双引号了,要是用双引号的话得转义
    个人总结:
  • 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

在这里插入图片描述

MySQL中CONCAT函数

1

含义

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

语法

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

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

1
在这里插入图片描述
实战举例:
在这里插入图片描述

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

1
在这里插入图片描述

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之后的是要转换的数据类型
    在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂野小白兔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值