方法如下:
*要获取附加表内容,必须符合两个条件 1、指定 channelid属性(注意:channelid不是栏目id,而是自定义模型的id!) 2、指定要获得的从表字段:addfields=’字段1,字段’
*arclist标签取的是“dede_archives”表里的字段
*addfields就是附加表里你所要取的字段,多个字段用‘,’隔开。
*而从`yy_channeltype`表里的addtable字段可以知道不同频道对应的附加表
方法如下:
*要获取附加表内容,必须符合两个条件 1、指定 channelid属性(注意:channelid不是栏目id,而是自定义模型的id!) 2、指定要获得的从表字段:addfields=’字段1,字段’*arclist标签取的是“dede_archives”表里的字段*addfields就是附加表里你所要取的字段,多个字段用‘,’隔开。
*而从`yy_channeltype`表里的addtable字段可以知道不同频道对应的附加表
转载于:https://www.cnblogs.com/leon-2016/p/7911454.html
{dede:arclist}{/dede:arclist}标签默认取出来的是主表x_archives中的数据,如果要取出附表中的数据,需要满足两个条件:
指定channelid属性(注意:channelid不是栏目id,而是自定义模型的id!) 指定要获得的从表字段:addfields=’字段1,字段’例子:
{dede:arclist channelid="1" flag='f' addfields='expire_time,slide_position' where="expire_time > unix_timestamp(now()) AND slide_position = 'M1' " sort='senddtate' orderway='asc' LIMIT='1'} <li><a target="_blank" href="[field:arcurl/]" title="[field:title/]"><img src="[field:litpic/]" alt="[field:title/]" /> </a></li> {/dede:arclist}
转载于:https://www.cnblogs.com/pawn-i/p/10953789.html
一、ResultClass 和 ResultMap 的区别
resultMap和resultClass指的是在 select查询中的返回数据类型。
resultMap: 可以预先定义 resultMap 元素,可以控制数据如何从结果集中取出,以及哪个属性匹配哪个字段。首先requltmap的值是指定的映射字段配置的id值,其次必须是数据表中的字段和实体类的属性像对应,如果缺少或者不对应的话就会包缺少字段的错误,即查询的语句查询出来的字段必须和映射的字段相互对应,俗话就是select中查询出来多少字段那么映射配置中(result 属性中)就要有多少数据。便于将此数据封装到对象中,便于运输,例如像jsp文件中遍历数据等操作的时候比较好用。
例如:<typeAlias alias="wp" type="com.shared.Wp"/> <resultMap id="wpResult" class="wp"> <result property="id" column="id"/> <result property="name" column="name"/> <result property="wp" column="wp"/> <result property="flag" column="flag"/> </resultMap> <select id="chakan" resultMap="wpResult"> select user.id,user.name,wpb.wp,wpb.flag from user,wpb where user.id=wpb.id </select>
resultClass: 可以把结果自动映射到相应的 JAVA 类中,但无法指定输出字段的类型,会对性能产生轻微的影响。 首先requestClass指定的值为你映射类的别名,在查询的时候不考虑是否一一对应,只要在你定义的bean类中能找到这个属性就行。这样不能直接读出具体的数据,不便于运输。
例如: resultClass取值
1.resultClass=”int”
2.resultClass=”com.sfbest.product.bean.ProductPicture”
3.resultClass=”string”
4.resultClass=”long”
5.resultClass=”java.util.HashMap”<select id="ms" resultClass="java.lang.Integer"> select COUNT(*) from table </select>
返回值参数也同样有两种类型,一种是对象类型resultClass=”Account”,一种是resultMap=”AccountResult”。这两种类型的选择常常会令人迷惑不解,一言明其理:
当结果集列名和类属性名完全对应的时候,则应该使用resultClass来指定查询结果类型。当然有些列明不对应,可以在sql中使用as重命名达到一致的效果。
当查询结果列名和类属性名对应不上的时候,应该选择 resultMap指定查询结果集类型。否则,则查询出来填充的对象属性为空(数字的为0,对象的为null)。
但是实际上 resultMap是对一个Java Bean的映射,需要先定义xml的映射后,才可以引用,例如:<resultMap id="AccountResult" class="Account"> <result property="id" column="ACC_ID"/> <result property="firstName" column="ACC_FIRST_NAME"/> <result property="emailAddress" column="ACC_EMAIL"/> </resultMap>
resultMap映射的结果的目的就是要将查询的结果集绑定到映射对象的属性上。
不管使用哪种返回值参数类型,其最终目的就是要把每条记录映射到一个类的对象或者对象集合上,如果有某个类属性映射不上,则在得到的这个对象或对象集合中这个属性为空。映射的属性可以是表与实体中的一部分。不要同时使用两种返回值参数类型,这样只会令人迷惑。二、parameterClass和parameterMap区别
parameterClass 属性值是 JAVA 类的全限定名,目的是限制输入参数的类型为指定的 JAVA 类,如果不指定,任何带有合适属性( get/set 方法)的 JAVA BEAN 都可以作为输入参数
parameterMap: 预先定义 parameterMap 的属性值,用于有次序的参数匹配。属性parameterMap
属性parameterMap的值等于一个预先定义的元素的名称。parameterMap属性很少使用,更多的是使用的parameterClass。但是使用parameterMap可以提高数据库的访问效率。<parameterMap id=”parameterMapName” [class=”com.domain.Product”]> <parameter property =”propertyName” [jdbcType=”VARCHAR”] [javaType=”string”] [nullValue=”NUMERIC”] [null=”-9999999”] /> <parameter…… /> <parameter …… /> </parameterMap> Class属性是可选的,Class属性必须是JavaBean或Map实列,Class属性虽是可选的,但推荐自己指定,Class属性可以用来验证传入的参数的合法性及优化查询
元素:
1.property
属性property是传给statement的参数对象的Java Bean属性名称。该名称根据需要,可以在statement中多次出现(即在SQL语句SET子句中被更新的属性,也可以作为条件出现在WHERE子句中)。
2.jdbcType
属性jdbcType用于显式地指定给本属性(property)赋值的数据库字段的数据类型。
注意! 大多数JDBC Driver只有在字段可以为NULL时需要指定jdbcType属性。因此,对于这些Driver,只是在字段可以为NULL时才需要指定type属性。
注意! 当使用Oracle Driver时,如果没有给可以为NULL的字段指定jdbcType属性,当试图给这些字段赋值NULL时,会出现“Invalid column type”错误。
3.javaType
属性javaType用于显式地指定被赋值参数Java属性的类名。
4.nullValue (要特别关注)
属性nullValue的值可以是对于property类型来说任意的合法值,用于指定NULL的替换值。就是说,当Java Bean的属性值等于指定值时,相应的字段将赋值NULL。这个特性允许在应用中给不支持null的数据类型(即int,double,float等)赋值null。当这些数据类型的属性值匹配null值(即匹配-9999)时,NULL将代替null值写入数据库。元素
最后总结列出几点ParameterMap需要特别注意的几个细节:1.在配置ParameterMap的时候,如果传入的参数对像是元数据类型(int,string etc),那么在配置Parameter元素的时候,property的属性名使用value。通过这种情况主要使用在为存储指定参数的情况下。
2.如果ParameterMap中配置的parameter元素不包含在传入参数对象中(属性或IDictionary对象的一个key,value项),将会产生异常,而不管在statement中有没有用到。
3.在使用parameterMap的extends属性时,它将会继承extends值对应的parameterMap配置,并且会继承它的所有的参数映射,并且顺序是从继承的那配置为基准开始计算。这个在需要用到extends属性的时候要特别注意。
4.在为存储过程传参过程要特别注意,参数映射与存储过程的参数之间的顺序对应要正确。而且必须为提供与存储过程足够的参数(parameter配置足够多),即使存储过程的部分参数已经有默认值了。否则将抛出System.ArgumentOutOfRangeException异常。
5.正常情况下,应该尽量使用内联参数。
SQL入参parameterClass
parameterClass指的是select save update delete SQL语句的where执行条件
插入语句入参:parameterClass=”类别名” 来设定。
查询语句入参:可以设定类别名,也可以设定为map,也可以设定为iBatis支持的原生类型(比如string、int、long等),当只有一个原生类型入参时,则在SQL中用value关键字来引用。比如:
select * from customer where id = #value#
map是最强大的入参方式,任何入参方式都可以转换为这种入参方式,因为iBatis仅接受一个入参,当几个参数分布在不同对象中的时候,将这些对象的属性(或者对象本身put)到map中,然后一次传递给sql语句是非常有效。可以自己写一个将对象或者对象集合转换为map的工具。
parameterClass可以的取值
1、parameterClass=”int”
2、parameterClass=”map”
3、parameterClass=”com.sfbest.bean.AccountMerchantDistribution”
SQL中引用parameterClass的参数有三种方式:
iBatis内置支持的类型,比如int、string,使用#value#来引用,这个value是关键字,不可变。
map类型的参数,使用#keyName#来引用,keyName为键名。
复杂对象的参数,使用#propertyName#来引用,propertyName类属性的名字。可以在ibatis的源码:com.ibatis.sqlmap.engine.type.TypeHandlerFactory
中看到支持的别名类型
putTypeAlias(“string”,String.class.getName());
putTypeAlias(“byte”, Byte.class.getName());
putTypeAlias(“long”, Long.class.getName());
putTypeAlias(“short”, Short.class.getName());
putTypeAlias(“int”, Integer.class.getName());
putTypeAlias(“integer”, Integer.class.getName());
putTypeAlias(“double”, Double.class.getName());
putTypeAlias(“float”, Float.class.getName());
putTypeAlias(“boolean”, Boolean.class.getName());
putTypeAlias(“date”, Date.class.getName());
putTypeAlias(“decimal”,BigDecimal.class.getName());
putTypeAlias(“object”, Object.class.getName());
putTypeAlias(“map”, Map.class.getName());
putTypeAlias(“hashmap”, HashMap.class.getName());
putTypeAlias(“list”, List.class.getName());
putTypeAlias(“arraylist”,ArrayList.class.getName());
putTypeAlias(“collection”, Collection.class.getName());
putTypeAlias(“iterator”, Iterator.class.getName());
putTypeAlias(“cursor”, java.sql.ResultSet.class.getName());在根据缩写查找Class name的时候会全部转换为小写再进行查找
即:resultClass=” string”,resultClass=”String”都是可以的
(1) 如果写的是全路径,则全路径必须大小写正确,例如:java.lang.string就不能识别,转换时会报ClassCast错误,必须是java.lang.String
(2) resultClass中必须必须输可以实例化的具体类,而不能输接口,如:hashmap是可以的,而输map就不行,因为处理结果的时候需要先实例化resultClass,然后进行赋值
(3) parameterClass可以输接口类,如list,map都是可以的,因为子类可以转换为父类。
1) 在 parameterMap 和 resultMap 中,字段数据类型是 java.sql.Types 类定义的常量名
称。常用的数据类型包括 BLOB,CHAR,CLOB,DATE,LONGVARBINARY,
INTEGER,NULL,NUMERIC,TIME,TIMESTAMP 和 VARCHAR 等。
2) 对于数据表中 NULLABLE 的字段,必须在 parameterMap 和 resultMap 中指定字段
的数据类型。
3) 对于数据类型是 DATE,CLOB 或 BLOB 的字段,最好在 parameterMap 和 resultMap中指定数据类型。
一.数据库四个属性CAID
C:Consistency(一致性)事务执行前和执行后必须处于一致性状态,例:用户A和用户B的前加起来一共是5000; 无论AB用户之间是如何相互转换的,事务结束后两个用户的钱加起来还是5000,这就是事务的一致性;
A:Atomicity(原子性)事务包含的所有操作要么全部成功,要么全部失败回滚;成功必须要完全应用到数据库,失败则不能对数据库产生影响;
I:Isolation(隔离性) 当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不被其他事务的操作所干扰,多个并发事务之间要相互隔离;
D:Durability(持久性)持久性是指事务的操作,一旦提交,对于数据库中数据的改变是永久性的,即使数据库发生故障也不能丢失已提交事务所完成的改变。二.集合运算
(1)Union并,Intersection交,Difference差
差:A-B是由属于A但是不属于B的元组组成的集合。(2)Product笛卡尔积 x
当两个表格含有相同属性,比如R和S都有B属性,应该在结果中用R.B和S.B进行区分。三.自然选择运算
(1)投影 R[]
从表中选出指定的属性值组成一个新表
CN:=CUSTOMER[cname]
取出CUSTOMER表中的cname列形成新表。
(2)选择 where
S where C
C 可以是 >, <, =, >=,<=
当满足的条件是多个时:
S where C and C1,S where C or C1,S where not C
(3)连接 join ∞
如果S和R没有任何相同属性,那么连接就和笛卡尔积一样效果。如果有相同属性,连接和交一样。
连接和交的区别在于,只有两个表属性完全相同才算交,一部分相同就是连接。
- inner join
通过两个表的字段中的相同值,显示数据记录
- left outer join
左外连接:就是把左边表的数据全部取出来,而右边表的数据有相等的,显示出来,如果没有,显示NULL
- right outer join
右外连接:就是把右边表的数据全部取出来,而左边表的数据有相等的,显示出来,如果没有,显示NULL
(4)除法÷
(5)例题
1.先找出c006买的商品:
pc6 := (ORDERS where cid = ‘c006’)[pid]
2.投影出人们的cid和买的商品pid
CP := ORDERS[cid,pid]
3.除法得到买了所有c006买的商品的顾客
CP ÷ pc6查询所有没有通过代理商a03订购商品的顾客id
1.(ORDERS where aid = ‘a03’)
2.ORDERS[cid] - (ORDERS where aid = ‘a03’)四.基本语句
1.Create Table
Create Table S
(
sno CHAR(5) NOT NULL UNIQUE,
sname CHAR(10) UNIQUE,
age INT,
PRIMARY KEY(sno)
);
2.Alter Table
Alter Table S Drop Column age
Alter Table S Add Address varchar(30)
新增加的属性不能为NOT NULL,因为原来的元组在这一列的值默认置为NULL。
3.Drop Table
Drop Table S4.约束
列约束:
NOT NULL
CONSTRAINT
UNIQUE
PRIMARY KEY (=NOT NULL + UNIQUE)
CHECK
REFERENCES表约束:
UNIQUE
PRIMARY KEY
CHECK
FOREIGN KEY REFERENCES例:
qty属性 int类型 非空 限制名qtyck :检查qty值一定大于0
qty integer not null constraint qtyck check (qty >= 0),dollars属性 float类型 默认值0.0 限制名dollarsck:检查dollars值一定大于0.0
dollars float default 0.0 constraint dollarsck check (dollars>=0.0),限制名cidref:设置cid为外键连接customers
constraint cidref foreign key (cid) references customers5.SELECT
选择两条属性:select aid, pid from orders;
选择唯一属性:select distinct pid from orders; (distinct保证返回值是unique的。distinct放在要寻找的属性:pid前面)
选择TOPn属性:select TOP 4 from student order by age (默认为升序)
6.WHERE
等于:select * from student where dept = ‘computer’
如果找NULL或NOT NULL要用IS
select * from student where dept IS NULL
在两个值之间:where age between 22 and 30在两个选项之间:where dept IN (‘computer’,‘foreign’)
7.函数 count(), AVG(), max(),
Group by pid, 相同pid的元组会排在一起
例1:Query the total number of students
select count(*) from Student例2: Select total number of students who select courses.
select count (distinct sno) from SC例3: Compute the average grade of students who select ‘C3’ course
select avg(grade) from SC where cid = ‘C3’8.Exist
exist不返回任何数据,只返回TRUE或者FALSE9.除法Division
ORDERS[cid,aid] DIVIDEBY (AGENTS where city = ‘New York’)[aid]写全:
select c.cid from customers c
where not exists(select * from agents a
where a.city = ‘New York’ and
not exists (select * from orders x
where x.cid = c.cid and x.aid = a.aid
));10 INSERT, UPDATE, DELETE
添加INSERT
INSERT INTO student
VALUES (‘95020’,‘chendong’,‘male’,‘IT’,‘18’);更改UPDATE
UPDATE SC
Set grade = grade*1.1
Where sno = ‘S4’ and cno = ‘C3’删除DELETE
Delete from SC
Where cno = ‘C4’五 索引INDEX
1.原理
INDEX通过B+树实现,时间复杂度logn,比按条遍历要快2.语句
Create cluster index stuname on s(sname)
在s表的sname列建立聚簇索引,这个索引名字叫做stuname3.聚簇索引和非聚簇索引
聚簇索引:将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据
非聚簇索引:将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置非聚簇索引都是辅助索引,像复合索引、前缀索引、唯一索引。辅助索引叶子节点存储的不再是行的物理位置,而是主键值,辅助索引访问数据总是需要二次查找。
聚簇索引具有唯一性,由于聚簇索引是将数据跟索引结构放到一块,因此一个表仅有一个聚簇索引。
主键就是聚簇索引。