84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
人生最曼妙的风景,竟是内心的淡定与从容!
有两种常见的方法:
定义一个专门传递参数的Bean,并提供Setter/Getter方法,这种方法显然太繁琐。不过可以简化一下,将多个参数放入map,将map传入即可。
map
可以在mapper接口定义的方法入参里,使用注解org.apache.ibatis.annotations.Param标记参数名。比如:
mapper接口
org.apache.ibatis.annotations.Param
public interface UserMapper{ User login(@Param("name")String name,@Param("password")String password); }
之后,在xml里使用对应的名字映射即可:
<select id="login" resultMap="UserResultMap"> select col1,col2,col3 from tal_name where user_name=#{name} and pwd=#{password} </select>
要使用方法二的话,你目前的方式是不行的。因为你是使用sqlSession.selectOne(queryId)或sqlSession.selectOne(queryId,paramObj)的方来调用的。sqlSession.selectOne(queryId)或sqlSession.selectOne(queryId,paramObj)的方来调用的。要使用方法二,你得先用sqlSession.getMapper(UserMapper.class)拿到定义的接口(DAO),拿到接口后,传递参数就相对自由了,因为接口里的方法定义就是常规的java方法定义。在定义的接口方法里就可以使用@Param要使用方法二,你得先用sqlSession.getMapper(UserMapper.class)拿到定义的接口(DAO),拿到接口后,传递参数就相对自由了,因为接口里的方法定义就是常规的java方法定义。在定义的接口方法里就可以使用@Param注解来标记参数了。大致例子如下:
sqlSession.selectOne(queryId)
sqlSession.selectOne(queryId,paramObj)
sqlSession.getMapper(UserMapper.class)
DAO
@Param
package cn.xxx.dao; public interface UserMapper{ User login(@Param("name")String name,@Param("password")String password); }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.xxx.dao.UserMapper"> <select id="login" resultMap="UserResultMap"> select col1,col2,col3 from tal_name where user_name=#{name} and pwd=#{password} </select> </mapper>
此处应该注意:
自定义DAO接口的全类名cn.xxx.dao.UserMapper应该和<mapper namespace="cn.xxx.dao.UserMapper">中的namespace属性相对应。DAO接口的全类名cn.xxx.dao.UserMapper应该和<mapper namespace="cn.xxx.dao.UserMapper">中的namespace属性相对应。同时,namespace的值(cn.xxx.dao.UserMapper)和select的id属性值(login)连起来其实就是你使用的sqlSession.selectOne(queryId)中用来标记查询的queryId同时,namespace的值(cn.xxx.dao.UserMapper)和select的id属性值(login)连起来其实就是你使用的sqlSession.selectOne(queryId)中用来标记查询的queryId了。
DAO接口
cn.xxx.dao.UserMapper
<mapper namespace="cn.xxx.dao.UserMapper">
namespace
select
id
queryId
如果是maven工程,你应该将xxxMapper.xml置于资源路径(src/main/resources)下而不是源代码路径(src/main/java),否则在运行时源代码路径下的xml文件是找不到的。
maven
xxxMapper.xml
src/main/resources
src/main/java
xml文件
另外有点建议就是:目测你用Spring来管理Bean的,鉴于此,还有另一种管理SqlSessionFactory的方式,可以不用直接在DAO里显示地注入SqlSessionFactory。此处是我以前从别人那里fock过来的一个SSM整合的示例:https://github.com/hylexus/be...
Spring
Bean
SqlSessionFactory
fock
SSM
有两种常见的方法:
方法一
定义一个专门传递参数的Bean,并提供Setter/Getter方法,这种方法显然太繁琐。
不过可以简化一下,将多个参数放入
map
,将map
传入即可。方法二
可以在
mapper接口
定义的方法入参里,使用注解org.apache.ibatis.annotations.Param
标记参数名。比如:之后,在xml里使用对应的名字映射即可:
注
要使用方法二的话,你目前的方式是不行的。
因为你是使用
sqlSession.selectOne(queryId)
或sqlSession.selectOne(queryId,paramObj)
的方来调用的。sqlSession.selectOne(queryId)
或sqlSession.selectOne(queryId,paramObj)
的方来调用的。要使用方法二,你得先用
sqlSession.getMapper(UserMapper.class)
拿到定义的接口(DAO
),拿到接口后,传递参数就相对自由了,因为接口里的方法定义就是常规的java方法定义。在定义的接口方法里就可以使用@Param
要使用方法二,你得先用sqlSession.getMapper(UserMapper.class)
拿到定义的接口(DAO
),拿到接口后,传递参数就相对自由了,因为接口里的方法定义就是常规的java方法定义。在定义的接口方法里就可以使用@Param
注解来标记参数了。大致例子如下:此处应该注意:
自定义
DAO接口
的全类名cn.xxx.dao.UserMapper
应该和<mapper namespace="cn.xxx.dao.UserMapper">
中的namespace
属性相对应。DAO接口
的全类名cn.xxx.dao.UserMapper
应该和<mapper namespace="cn.xxx.dao.UserMapper">
中的namespace
属性相对应。同时,
namespace
的值(cn.xxx.dao.UserMapper)和select
的id
属性值(login)连起来其实就是你使用的sqlSession.selectOne(queryId)
中用来标记查询的queryId
同时,namespace
的值(cn.xxx.dao.UserMapper)和select
的id
属性值(login)连起来其实就是你使用的sqlSession.selectOne(queryId)
中用来标记查询的queryId
了。如果是
maven
工程,你应该将xxxMapper.xml
置于资源路径(src/main/resources
)下而不是源代码路径(src/main/java
),否则在运行时源代码路径下的xml文件
是找不到的。另外有点建议就是:目测你用
Spring
来管理Bean
的,鉴于此,还有另一种管理SqlSessionFactory
的方式,可以不用直接在DAO
里显示地注入SqlSessionFactory
。此处是我以前从别人那里fock
过来的一个SSM
整合的示例:https://github.com/hylexus/be...