-
myBatis要不要用实体类5
新手学myBatis,
请问用myBatis一定要写实体类吗?比如一些多表查询关联报表查询都是临时性的或者说都是多变,能不能不写实体类以jdbc结果集的型式展现呢?
问题补充:xueliang880107 写道每张表都要对应一个实体 这样才能映射嘛 多表联合查询的结果可以返回一个hashmap处理 时情况而定
能具体举个例子吗?谢谢
问题补充:w6513017 写道如果你是多表联合查询,然后你又觉得返回方式用map很麻烦的话,你可以自己建立个实体类,这个实力类中包含有你所要查询的多表中的字段,然后在mybatis中用typeAlias指定一下,到时候,就能像用一般的实体类那样使用就好。
我就是不想这样呀,如果这个sql语句是动态的,字段名不确定,那如何建实体类?
所以能不能不建实体类,取出来就是一个结果集呢?
问题补充:zhaoruiqing 写道本身取出来就是结果集。<select id="select_adatt" parameterType="HashMap" resultMap="AD_Att_result"> select ID, AD_ID, AD_URL, AD_PATH from ad_attachment <where> 1=1 <if test="ad_id!=null"> and AD_ID=#{ad_id} </if> <if test="ID!=null"> and ID=#{id} </if> </where> </select>
定义一个resultMap接就可以了
但这个定义这个结果集resultMap="AD_Att_result"时能不能不定义实体类(如下):
<resultMap id="AD_Att_result" type="com.myEntity.AD_Att_result">
<id property="id" column="ID" />
<result property="ad_url" column="AD_URL"/>
...
...
...
</resultMap>
问题补充:zhaoruiqing 写道本身取出来就是结果集。<select id="select_adatt" parameterType="HashMap" resultMap="AD_Att_result"> select ID, AD_ID, AD_URL, AD_PATH from ad_attachment <where> 1=1 <if test="ad_id!=null"> and AD_ID=#{ad_id} </if> <if test="ID!=null"> and ID=#{id} </if> </where> </select>
定义一个resultMap接就可以了
zhaoruiqing: 能说说这个resultMap="AD_Att_result" 是如何定义吗?我的理解是这个resultMap最终还是要挂靠一个实体类吧?
问题补充:zhaoruiqing 写道我没像你那样做过,resultMap你可以指定他的类型为实体类,但是既然这样你为何要用reslutmap而不是直接就用实体类呢。搞这个你可以直接返回一个reslutMap,他的类型直接是一个hashmap就可以。
基本的过程是这样:首先查询得到返回结果集,这时为Map,如果有reslutType则将key_value通过get_set方式建立一个对象,如果直接用reslutMap 则省去转换的一步,当然,你又指定resultMap的type的话,他也一样会转换成一个实体类来处理。不知道明白了没
如果类型指定为hashMap只是针对返回一条记录的情况吧,如果返回多条记录类型就不能指定为hashMap了.
问题补充:zhaoruiqing 写道多个结果集他会给你放入一个List,你在javacode中用selectList这样的代码返回的是list,当然这个list中可能是实体类也可能是hashmap
这点还是没理解,能用代码举例说明一下吗?在javacode中如何selectList?谢谢.
问题补充:zhaoruiqing 写道多个结果集他会给你放入一个List,你在javacode中用selectList这样的代码返回的是list,当然这个list中可能是实体类也可能是hashmap
谢谢zhaoruiqing,经过反复测试明白了,在定义接口的时候如果定义成List,myBatis自动转了,就可以把自已自定义的map入进去,;
public interface UserMapper { public List get_sp_Goods(Map returnMap); } @Test public void callProcedure(){ SqlSession session=sqlSessionFactory.openSession(); UserMapper userMapper=session.getMapper(UserMapper.class); Map retuParam = new HashMap(); List list= userMapper.get_sp_Goods(retuParam); System.out.println(list.size()); for (Object object : list) { Map map=(Map) object; System.out.println(map); } } <!-- 调用存储过程 --> <select id="get_sp_Goods" statementType="CALLABLE" parameterMap="ParaMap_test" resultMap="mpGoods" > {#{result} = call sp_getGoods()} </select> <resultMap type="hashmap" id="mpGoods"> <result property="price" column="price" javaType="java.lang.String" jdbcType="VARCHAR"/> <result property="name" column="name" javaType="java.lang.String" jdbcType="VARCHAR"/> <result property="manufacture" column="manufacture" javaType="java.lang.String" jdbcType="VARCHAR"/> </resultMap> <parameterMap type="hashmap" id="ParaMap_test"> <parameter property="result" mode="OUT" javaType="java.sql.ResultSet" jdbcType="OTHER" resultMap="mpGoods" /> </parameterMap>
我以上这个例子,又如何能得到这个输出参数呢?是我在java Code中的方法调用传参有问题吗?thks.
问题补充:zhaoruiqing 写道<!-- 调用存储过程 --> <select id="get_sp_Goods" statementType="CALLABLE" parameterMap="ParaMap_test" resultMap="mpGoods" > {#{result} = call sp_getGoods()} </select>
这个里面的 parameterMap="ParaMap_test" 不要,还有你的传入参数是一个空的map?你的代码应该没问题,如果list有值的话,直接map.get("key")就可以了
<resultMap type="hashmap" id="mpGoods"> <result property="price" column="price" javaType="java.lang.String" jdbcType="VARCHAR"/> <result property="name" column="name" javaType="java.lang.String" jdbcType="VARCHAR"/> <result property="manufacture" column="manufacture" javaType="java.lang.String" jdbcType="VARCHAR"/> </resultMap>
就是这里定义的这些
这个list有值的,我的测试数据显示如下:
{id=1, price=98.00, manufacture=机械工程出版社, name=java编程思想, specification=本书赢得全球程序员的广泛赞誉., ID=1, SPECIFICATION=本书赢得全球程序员的广泛赞誉.}
{id=2, price=108.00, manufacture=机械工程出版社, name=java核心技术, specification=针对Java SE6平台进行全面更新,涵盖Java语言核心内容., ID=2, SPECIFICATION=针对Java SE6平台进行全面更新,涵盖Java语言核心内容.}
{id=3, price=108.00, manufacture=中国电力出版社, name=java经典实例, specification=本书针对Java开发人员而言是理想的'第二本书'讲述API比一般书籍要详细,非常适合扩大Java应用的知识面., ID=3, SPECIFICATION=本书针对Java开发人员而言是理想的'第二本书'讲述API比一般书籍要详细,非常适合扩大Java应用的知识面.}
{id=4, price=58.00, manufacture=中国电力出版社, name=Asp.Net经典实例, specification=本书针对.Net开发人员., ID=4, SPECIFICATION=本书针对.Net开发人员.}
{id=5, price=58.00, manufacture=中国电力出版社, name=C#经典实例, specification=本书针对.Net开发人员., ID=5, SPECIFICATION=本书针对.Net开发人员.}
但我看网上的另一方法是把要输出的结果集放入了参数变量中(如上),然后从这个参数hashMap中取得这个"result",再转成list输出,传参应该是传一个空hashMap呀,为什么没有返回值呢?
问题补充:zhaoruiqing 写道上面的数据已经有了。。。单个转换成map什么的都可以。
你说的:
但我看网上的另一方法是把要输出的结果集放入了参数变量中(如上),然后从这个参数hashMap中取得这个"result",再转成list输出,传参应该是传一个空hashMap呀,为什么没有返回值呢?
不太明白,不是已经有了返回值了么??这个返回结果的过程很好理解,你如果熟悉jdbc操作,应该对resultSet不陌生
请看此处:
http://database.51cto.com/art/201108/287703.htm
我是说这个返回结果放入了参数hashMap中的一个key中,然后再在调用处得到这个key.我就是做不到它这里的这个效果,参数输入为Null.
问题补充:zhaoruiqing 写道你得有in....至少你的指定一下in吧,既然你要传入一些参数来执行这个存储,那就指定in吧,你给的链接就是个好例子,码上去试试
我这个存储过程不需要传入参数呀,所以只用到了:
<parameterMap type="hashmap" id="ParaMap_test">
<parameter property="result"
mode="OUT"
javaType="java.sql.ResultSet"
jdbcType="OTHER"/>
</parameterMap>
而这个property="result" mode="OUT" 是不需要传参的呀.
问题补充:zhaoruiqing 写道既然不需要传参数。。。自然输入为null....你觉得结果应该如何??存储有out才行。。不知道你的有没有,他这样的就是存储有in有out....
CREATE PROCEDURE [dbo].[ProcedureName] @para1 VARchar(8)='HNZZC001', @para2 VarChar(30)='2010-07-08 02:00:00', @para3 VarChar(30)='2010-07-09 12:00:00' AS BEGIN --查询临时表中的数据 SELECT * FROM #tempTable END
他这个存储过程只有in参数,也是没用out参数呀,out是在这里定义的:
<parameterMap type="hashmap" id="ParaMap_test">
<parameter property="result"
mode="OUT"
javaType="java.sql.ResultSet"
jdbcType="OTHER"/>
</parameterMap>
<!-- 调用存储过程 -->
<select id="get_sp_Goods"
statementType="CALLABLE"
parameterMap="ParaMap_test"
resultMap="mpGoods"
>
<!--这里#{result}就是向输出参数赋值了呀 -->
{#{result} = call sp_getGoods()}
</select>
问题补充:zhaoruiqing 写道好吧。。。那是我没看到。。。那你认为他是直接out出去了?那指定resultMap做什么。。。。模仿他的做一下。。莫非你出不来?
zhaoruiqing,非常感谢你的耐心解答,还真出来,不知道以下传参哪里有问题?
SqlSession session=sqlSessionFactory.openSession();
UserMapper userMapper=session.getMapper(UserMapper.class);
Map retuParam = new HashMap();
ResultSet rs=null ;
// retuParam.put("result", rs);
System.out.println("====================");
List list= userMapper.get_sp_Goods(retuParam);
System.out.println(retuParam.get("result"));2012年5月22日 14:15
13个答案 按时间排序 按投票排序
-
采纳的答案
多个结果集他会给你放入一个List,你在javacode中用selectList这样的代码返回的是list,当然这个list中可能是实体类也可能是hashmap
2012年5月23日 14:38
-
好吧。。。那是我没看到。。。那你认为他是直接out出去了?那指定resultMap做什么。。。。模仿他的做一下。。莫非你出不来?
2012年5月23日 16:56
-
既然不需要传参数。。。自然输入为null....你觉得结果应该如何??存储有out才行。。不知道你的有没有,他这样的就是存储有in有out....
2012年5月23日 16:32
-
你得有in....至少你的指定一下in吧,既然你要传入一些参数来执行这个存储,那就指定in吧,你给的链接就是个好例子,码上去试试
2012年5月23日 16:05
-
上面的数据已经有了。。。单个转换成map什么的都可以。
你说的:
但我看网上的另一方法是把要输出的结果集放入了参数变量中(如上),然后从这个参数hashMap中取得这个"result",再转成list输出,传参应该是传一个空hashMap呀,为什么没有返回值呢?
不太明白,不是已经有了返回值了么??这个返回结果的过程很好理解,你如果熟悉jdbc操作,应该对resultSet不陌生2012年5月23日 15:39
-
<!-- 调用存储过程 --> <select id="get_sp_Goods" statementType="CALLABLE" parameterMap="ParaMap_test" resultMap="mpGoods" > {#{result} = call sp_getGoods()} </select>
这个里面的 parameterMap="ParaMap_test" 不要,还有你的传入参数是一个空的map?你的代码应该没问题,如果list有值的话,直接map.get("key")就可以了
<resultMap type="hashmap" id="mpGoods"> <result property="price" column="price" javaType="java.lang.String" jdbcType="VARCHAR"/> <result property="name" column="name" javaType="java.lang.String" jdbcType="VARCHAR"/> <result property="manufacture" column="manufacture" javaType="java.lang.String" jdbcType="VARCHAR"/> </resultMap>
就是这里定义的这些
2012年5月23日 15:20
-
public List select_adatt(HashMap paramMap) { if(paramMap!=null){ if(paramMap.containsKey("offset")&¶mMap.containsKey("limit")){ return this.getSqlSessionTemplate().selectList("com.cepri.spicss.systemad.dao.ADDao.select_adatt", paramMap,new RowBounds(Integer.parseInt((String)paramMap.get("offset")), Integer.parseInt((String)paramMap.get("limit")))); }else{ return this.getSqlSessionTemplate().selectList("com.cepri.spicss.systemad.dao.ADDao.select_adatt", paramMap); } } else{ return this.getSqlSessionTemplate().selectList("com.cepri.spicss.systemad.dao.ADDao.select_adatt", paramMap); } }
<select id="select_adatt" parameterType="HashMap" resultMap="AD_Att_result"> select ID, AD_ID, AD_URL, AD_PATH from ad_attachment <where> 11=1 <if test="ad_id!=null"> and AD_ID=#{ad_id} </if> <if test="ID!=null"> and ID=#{id} </if> </where> </select>
2012年5月23日 15:05
-
我没像你那样做过,resultMap你可以指定他的类型为实体类,但是既然这样你为何要用reslutmap而不是直接就用实体类呢。搞这个你可以直接返回一个reslutMap,他的类型直接是一个hashmap就可以。
基本的过程是这样:首先查询得到返回结果集,这时为Map,如果有reslutType则将key_value通过get_set方式建立一个对象,如果直接用reslutMap 则省去转换的一步,当然,你又指定resultMap的type的话,他也一样会转换成一个实体类来处理。不知道明白了没2012年5月23日 11:37
-
本身取出来就是结果集。
<select id="select_adatt" parameterType="HashMap" resultMap="AD_Att_result"> select ID, AD_ID, AD_URL, AD_PATH from ad_attachment <where> 1=1 <if test="ad_id!=null"> and AD_ID=#{ad_id} </if> <if test="ID!=null"> and ID=#{id} </if> </where> </select>
定义一个resultMap接就可以了2012年5月23日 10:08
-
如果你是多表联合查询,然后你又觉得返回方式用map很麻烦的话,你可以自己建立个实体类,这个实力类中包含有你所要查询的多表中的字段,然后在mybatis中用typeAlias指定一下,到时候,就能像用一般的实体类那样使用就好。
2012年5月22日 18:09
相关推荐
Mybatis自动生成实体类,XML文件
mybatis 生成对应实体类执行工作,不在使用安装的插件
mybatis自动生成实体类映射,建立好数据库后,修改好映射关系,既可以自动生成实体类和xml文件
根据oracle表结构使用mybatis generator 生成java实体类,最主要的是生成的属性中带有中文注释。亲测可用。oracle 11g。有问题可联系我:874544323@qq.com
mybatis对数据库进行逆向生成实体类和mapper
mybatis实体类以及mapper映射xml文件及接口的自动生成类工具
自动生成Mybatis 实体类、DaoMapper、XML可视化界面工具自动生成Mybatis 实体类、DaoMapper、XML可视化界面工具
mybatis自动生成实体类及实体类映射文件,mybatis自动生成实体类及实体类映射文件
mybatis逆向工程兼容oracle实体生产注释。
修改 mybatis-generate 源码实现实体类加上字段注释后的 mybatis-generator-core 包。 今天用到了mybatis的逆向工程,生成实体类和mapper文件,无奈数据库字段太多,逆向工程生成的字段都没有注释,每次需要了解字段...
mybatis逆向生成实体类,生成实体类的jar包+配置文件+cmd执行语句, 配置文件包含注释,更具自己的需要修改即可。
这是mybatis实体类自动生成工具,非常好用,与大家共享!欢迎下载!
里面包含log4j-1.2.17.jar、mybatis-3.3.0.jar、mybatis-generator-core-1.3.7.jar、mysql-connector-java-5.1.10.jar四个jar包以及一个命令文档,方便大家一次下载全部齐全,不需要到处去找jar包
mybatis反向生成dao,mapping,entity的工具,并附上操作步骤
generator工具包,Mybatis快速生成实体类和mapper文件,这个工具可以更快的实现。操作简单!详细注释!自动bat文件一键式操作! ps:由于第一次没有写使用说明,现在补上,各位就不要下载那个啦。csdn貌似不能删除...
generator-mybatis接口类、实体类、xml文件生成工具
mybatis自动生成实体映射类demo,jar包支持!
mybatis generator 自动生成实体类工具【自己封装】 运行项目中的CreateEveryModel\src\com\create\CreateModelMain 入口 将其中的数据库连接修改为要连接的数据库信息 配置//要生成文件的根目录 配置// 主包名 配置...
mybatis 自动生成实体类dao