当前位置:首页 » 编程语言 » mybatis排序sql
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

mybatis排序sql

发布时间: 2022-05-25 13:56:28

㈠ mybatis动态sql怎么排序

具体点啊order by 。最多就是加判断去拼接

㈡ mybatis中怎么写sql语句

<select id="queryUsers" parameterType="map" resultType="xx.xx.xx.bean.UserBean">
<![CDATA[
select
ID,
LOGIN_NAME AS loginName,
PASSWORD,
REAL_NAME AS realName,
POSITION,
(SELECT D.POSITION_NAME FROM UNIT_POSITION D WHERE D.POSITION_CODE=T.POSITION) POSITIONNAME,
USER_TYPE AS userType,
SEX,
PID,
TO_CHAR(T.BIRTHDAY,'YYYY-MM-DD') BIRTHDAY,
EMAIL,
CONTACT_TEL AS contactTel,
CONTACT_MOBILE AS contactMobile,
CONTACT_FAX AS contactFax,
CONTACT_ZIP AS contactZip,
CONTACT_ADDR AS contactAddr,
STATUS,
EDUCATION,
(SELECT D.EDUCATION_NAME FROM UNIT_EDUCATION D WHERE D.EDUCATION_CODE=T.EDUCATION AND D.STATUS=0) EDUCATIONNAME,
NATION,
POLITICAL,
REMARK,
TO_CHAR(T.CREATE_DATE,'YYYY-MM-DD HH24:MI:SS') createDate,
(SELECT D.REAL_NAME FROM UNIT_USER D WHERE D.ID= T.CREATE_USER_ID) createUserId,
TO_CHAR(T.UPDATE_DATE,'YYYY-MM-DD HH24:MI:SS') updateDate,
(SELECT D.REAL_NAME FROM UNIT_USER D WHERE D.ID= T.UPDATE_USER_ID) updateUserId
from UNIT_USER T
]]>
<where>
T.STATUS='1'
<if test="realName !=null and realName !=''">
and T.REAL_NAME like '%${realName}%'
</if>
<if test="nexusDpartment !=null">
AND T.ID IN (SELECT DISTINCT D.USER_ID FROM UNIT_USER_DEPT D WHERE D.DEPT_CODE IN (${nexusDpartment}))
</if>
<if test="deptCode !=null and deptCode !=''">
AND T.ID IN (SELECT DISTINCT D.USER_ID FROM UNIT_USER_DEPT D WHERE D.DEPT_CODE = #{deptCode})
</if>
</where>
<if test="sort != null and sort != ''">
order by ${sort}
<if test="direction != null and direction != ''">
${direction}
</if>
</if>
</select>

㈢ mybatis中的sql语句中#和$的区别

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".

2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.

3. #方式能够很大程度防止sql注入。

4.$方式无法防止Sql注入。
5.$方式一般用于传入数据库对象,例如传入表名.

6.一般能用#的就别用$.
MyBatis排序时使用order by 动态参数时需要注意,用$而不是#
字符串替换
默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用:
ORDER BY ${columnName}
这里MyBatis不会修改或转义字符串。

重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。

㈣ mybatis中特殊SQL的几种配置方法

1.in条件for循环
<select id="getBooList" resultMap="java.util.Map" parameterType="java.util.List" >
select booking_no, max(booking_general_seq) max_seq from interface_booking_t where booking_no in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
group by booking_no
</select>
2.insert并且返回主键
<insert id="insertAndGetId" parameterType="com.phy.mlisp.management.domain.Document">
<selectKey resultType="long" order="BEFORE" keyProperty="id">
SELECT MLISP_DOCUMENT_SEQ.NEXTVAL as ID from DUAL
</selectKey>
insert into MLISP_DOCUMENT_T (ID, NAME, ALIAS,
FILE_SIZE,CONTENT,STATUS,CREATE_BY,CREATE_DATE,LAST_UPDATE_BY,
LAST_UPDATE_DATE)
values (#{id},#{name,jdbcType=VARCHAR}, #{alias,jdbcType=VARCHAR},#{fileSize,jdbcType=INTEGER},
#{content,jdbcType=BLOB},
#{status,jdbcType=INTEGER},#{createBy,jdbcType=VARCHAR},SYSDATE,
#{lastUpdateBy,jdbcType=VARCHAR},SYSDATE)
</insert>

3.批量insert
<insert id="batchInsert" parameterType="java.util.List">
insert into INTERFACE_BOOKING_CONTA_T (ID, BOOKING_ID, BOOKING_CONTAINER_SEQ,
CONTA_TYPE, CONTA_SIZE, CONTA_QUANTITY,
CONTA_SIZE_TYPE_ISO)
select interface_booking_conta_seq.NEXTVAL,A.* from(
<foreach collection="list" item="item" index="index" separator="UNION ALL" >
(select #{item.bookingId,jdbcType=DECIMAL}, #{item.bookingContainerSeq,jdbcType=DECIMAL},
#{item.contaType,jdbcType=VARCHAR}, #{item.contaSize,jdbcType=VARCHAR}, #{item.contaQuantity,jdbcType=DECIMAL},
#{item.contaSizeTypeIso,jdbcType=VARCHAR} from al)
</foreach>) A
</insert>

4.批量更新
<update id="batchUpdate" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">
UPDATE WCP_DISPATCH_CONTA_T
<set>
<if test="item.dispatchId != null">
DISPATCH_ID = #{item.dispatchId,jdbcType=DECIMAL},
</if>
</set>
WHERE DISPATCH_ID = #{item.dispatchId,jdbcType=DECIMAL}
</foreach>
</update>

㈤ 用mybatis开发sql怎么写

用Spring框架,在applicationContext.xml文件里配置以下内容:
<!-- 读取db.properties文件的内容 -->
<util:properties id = "jdbc" location = "classpath:db.properties"/>
<!-- 配置DataSource -->
<bean id = "ds" class = "org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value = "#{jdbc.driver}"/>
<property name="url" value = "#{jdbc.url}"/>
<property name="username" value = "#{jdbc.user}"/>
<property name="password" value = "#{jdbc.pwd}"/>
</bean>

<!-- 配置SqlSessionFactoryBean -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入DataSource -->
<property name="dataSource" ref="ds"/>
<!-- 注入映射文件的位置信息 -->
<property name="mapperLocations" value="classpath:com/tarena/oss/entity/*.xml"/>
</bean>

<!--
配置MapperSourceConfigurer:
扫描制定包下面所有的类,
创建符合Mapp接口要求的对象,
并且会将创建好的对象放到spring容器里面
-->
<bean class = "org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 注入要扫描的包名 -->
<property name="basePackage" value = "com.tarena.oss."/>

</bean>
其中,要导入的包有:
mybatis-3.2.5.jar
mybatis-spring-1.2.2.jar
写好实体类之后,在创建一个mapper.xml文件。
注:实体类的属性名一定要和表的字段名一致。在mapper.xml映射文件里写sql语句。格式为:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="的路径名">

<!--
查询。
parameterType:如果返回值是一个整数,标准用法是java.lang.Integer,
可以简写为"int"。
-->
<select id = "和里面的方法名一致" parameterType="参数类型"
resultType="com.tarena.oss.entity.Admin">
查询的sql语句
</select>
<!--
使用resultMap来解决实体类的属性名,与表的字段名不一致的情况。
type属性: 实体类的名字。
property属性: 实体类的属性名。
column属性: 表的字段名。
注:如果属性名与字段名一样,就不用写了。
-->
</mapper>
其他语句在<mapper></mapper>里写,方法和select一样。

希望可以帮到你!

㈥ mybatis怎么执行sql语句值

例如在一个 XXMapper.xml 中:
?

1
2
3

<select id="executeSql" resultType="map">
${_parameter}
</select>

你可以如下调用:
?

1

sqlSession.selectList("executeSql", "select * from sysuser where enabled = 1");

或者你可以在 XXMapper.java 接口中定义如下方法:
?

1

List<Map> executeSql(String sql);

然后使用接口调用方法:
?

1

xxMapper.executeSql("select * from sysuser where enabled = 1");

上面这些内容可能都会,下面在此基础上再复杂一点。
假如像上面SQL中的enabled = 1我想使用参数方式传值,也就是写成 enabled = #{enabled},如果你没有遇到过类似这种需求,可能不明白为什么要这么写,举个例子,要实现一种动态查询,可以在前台通过配置 SQL,提供一些查询条件就能实现一个查询的功能(为了安全,这些配置肯定是开发或者实施做的,不可能让用户直接操作数据库)。
针对这个功能,使用 MyBatis 实现起来相当容易。配置 SQL 肯定要执行,用上面讲的这种方式肯定可以执行 SQL,如何提供参数呢?参数就是enabled = #{enabled}中的#{enabled}部分。如果再多一些条件,一个配置好的 SQL 如下:
?

1
2
3

select * from sysuser
where enabled = #{enabled}
and userName like concat('%',#{userName},'%')

这种情况下,该怎么用 MyBatis 实现呢?
首先 XML 中修改如下:
?

1
2
3

<select id="executeSql" resultType="map">
${sql}
</select>

接口中的方法修改为:
?

1

List<Map> executeSql(Map map);

然后调用方法:
?

1
2
3
4
5
6
7
8
9
10
11
12
13

Map map = new HashMap();
//这里的 sql 对应 XML 中的 ${sql}
map.put("sql", "select * from sysuser "
+ " where enabled = #{enabled} "
+ " and userName like concat('%',#{userName},'%')");
//#{enabled}
map.put("enabled", 1);
//#{userName}
map.put("userName", "admin");
//接口方式调用
List<Map> list = xxMapper.executeSql(map);
//sqlSession方式调用

㈦ spring mvc mybatis sql倒序查询怎么写

后面直接加上select
*
from tchc_details
where tchc_update_id = #{tchcUpdateId,jdbcType=INTEGER} order by tchc_update_id desc 试试

㈧ mybatis 怎么写sql语句

mybatis的sql和你在数据库客户端执行的sql是一样的,但是在mybatis中调用的sql一般都是动态的,所以用到了参数传递。这个mybatis有对应的标签以及相应的变量来实现。你可以搜索下mybatis标签。同时给你一个参考的你看看,这个是一个查询用户的
<select
id="queryUsers"
parameterType="map"
resultType="xx.xx.xx.bean.UserBean">
<![CDATA[
select
ID,
LOGIN_NAME
AS
loginName,
PASSWORD,
REAL_NAME
AS
realName,
POSITION,
(SELECT
D.POSITION_NAME
FROM
UNIT_POSITION
D
WHERE
D.POSITION_CODE=T.POSITION)
POSITIONNAME,
USER_TYPE
AS
userType,
SEX,
PID,
TO_CHAR(T.BIRTHDAY,'YYYY-MM-DD')
BIRTHDAY,
EMAIL,
CONTACT_TEL
AS
contactTel,
CONTACT_MOBILE
AS
contactMobile,
CONTACT_FAX
AS
contactFax,
CONTACT_ZIP
AS
contactZip,
CONTACT_ADDR
AS
contactAddr,
STATUS,
EDUCATION,
(SELECT
D.EDUCATION_NAME
FROM
UNIT_EDUCATION
D
WHERE
D.EDUCATION_CODE=T.EDUCATION
AND
D.STATUS=0)
EDUCATIONNAME,
NATION,
POLITICAL,
REMARK,
TO_CHAR(T.CREATE_DATE,'YYYY-MM-DD
HH24:MI:SS')
createDate,
(SELECT
D.REAL_NAME
FROM
UNIT_USER
D
WHERE
D.ID=
T.CREATE_USER_ID)
createUserId,
TO_CHAR(T.UPDATE_DATE,'YYYY-MM-DD
HH24:MI:SS')
updateDate,
(SELECT
D.REAL_NAME
FROM
UNIT_USER
D
WHERE
D.ID=
T.UPDATE_USER_ID)
updateUserId
from
UNIT_USER
T
]]>
<where>
T.STATUS='1'
<if
test="realName
!=null
and
realName
!=''">
and
T.REAL_NAME
like
'%${realName}%'
</if>
<if
test="nexusDpartment
!=null">
AND
T.ID
IN
(SELECT
DISTINCT
D.USER_ID
FROM
UNIT_USER_DEPT
D
WHERE
D.DEPT_CODE
IN
(${nexusDpartment}))
</if>
<if
test="deptCode
!=null
and
deptCode
!=''">
AND
T.ID
IN
(SELECT
DISTINCT
D.USER_ID
FROM
UNIT_USER_DEPT
D
WHERE
D.DEPT_CODE
=
#{deptCode})
</if>
</where>
<if
test="sort
!=
null
and
sort
!=
''">
order
by
${sort}
<if
test="direction
!=
null
and
direction
!=
''">
${direction}
</if>
</if>
</select>

㈨ mybatis orderbyclause怎么用

字符串替换。

默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用:

ORDER BY ${columnName}

这里MyBatis不会修改或转义字符串。

重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。

MyBatis排序:

MyBatis排序时,ORDER BY 后的参数应该形如:ORDER BY ${sname} ${sord}

sname : 排序字段

sord : 排序顺序 (ASC,DESC)

MyBatis排序时,ORDER BY 后的参数如果形如:ORDER BY #{sname} #{sord}

sname : 排序字段

sord : 排序顺序 (ASC,DESC)

则不能返回想当然正确的结果。

(9)mybatis排序sql扩展阅读:

各类编程语言:

C语言即中文版的C语言。

O语言O语言是一款中文计算机语言(或称套装:O汇编语言、O中间语言、O高级语言)。

AAuto是专用于桌面软件快速开发的新型混合型编程语言。

APL、A+和J。

Ada是一种表现能力很强的通用程序设计语言。

ActionScriptActionScript是Flash的脚本语言,与JavaScript相似,ActionScript是一种面向对象编程语言。

AWKAWK是一种优良的文本处理工具。

Basic是一种设计给初学者使用的程序设计语言。

Brainfuck是一种极小化的计算机语言。

C++、C#: C语言是一种面向过程的计算机程序设计语言; C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。

它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。C#是微软公司发布的一种面向对象的、运行于 .NET Framework 之上的高级程序设计语言。

网络—编程