mybatis怎么执行sql语句值

mybatis怎么执行sql语句值,第1张

例如在一个 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方式调用

你们点踩的,上面的回答已经很好了。

首先User类里需要2个字段id和myid

id对应自增的序列号,myid对应手动写入的主键

替换下上面的selectKey部分

<selectKey resultType="java.lang.Long" order="BEFORE" keyProperty="id">

    SELECT SEQ_USER_ID.nextval as id from dual

</selectKey>

注意添加了一个 order="BEFORE"

意思是在执行insert 语句前查询序列号并保存到User的id字段中

此时User的id字段就有值了,再执行插入语句。

执行成功后要取出自增的id号直接user.getId()

mybaits是对jdbc的封装,一样可以执行sql语句,而truncate也算sql语句,所以直接写sql语句配置在mapper.xml中,再用你惯用额方式调用即可。

1:在Mybatis配置文件中加上以下配置:

<!-- 选择log4j为Mybatis的记录日志文件-->

<settings>

<setting name="logImpl" value="LOG4J"/>

</settings>

这个配置是告诉Mybatis使用log4j作为日志输出的工具。

2:在log4j配置文件中加一行代码:

log4j.logger.包名=debug(错误)

这里有一个小错误,应该是mapper文件的空间命名:

列如:log4j.logger.映射文件命名空间名=debug

保证mapper包下面有你项目的映射文件就好了,如果想更具体,只输出哪一个mapper文件的SQL,log4j.logger.org.jypj.xbkc.mapper.CourseOutlineMapper=debug

SQL,参数,总行数都有,是不是很好用。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11727876.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存