Mybatis中数据库表一对多关联

14 篇文章 0 订阅
1 篇文章 0 订阅
<sqlMap namespace="User">
<typeAlias alias="user" type="com.ibatis.sample.User"/>
<typeAlias alias="address" type="com.ibatis.sample.Address"/>
<resultMap id="get-user-result" class="user">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="addresses" column="id"
select="User.getAddressByUserId"/>
</resultMap>
<select id="getUsers"
parameterClass="java.lang.String"
resultMap="get-user-result">
<![CDATA[
select 
id, 
name, 
sex 
from t_user 
where id = #id# 
]]>
</select>
<select id="getAddressByUserId"
parameterClass="int"
resultClass="address">
<![CDATA[
select 
address, 
zipcode 
from t_address 
where user_id = #userid# 
]]>
</select>
</sqlMap>


String resource ="com/ibatis/sample/SqlMapConfig.xml"; 
Reader reader; 
reader = Resources.getResourceAsReader(resource); 
XmlSqlMapClientBuilder  xmlBuilder  =  new  XmlSqlMapClientBuilder(); 
sqlMap = xmlBuilder.buildSqlMap(reader); 
//sqlMap系统初始化完毕
List userList = sqlMap.queryForList("User.getUsers", ""); 
for(inti = 0; i < userList.size(); i++) { 
User user = (User)userList.get(i);
System.out.println("==>"+ user.getName()); 
for(intk = 0; k < user.getAddresses().size(); k++) { 
Address addr = (Address) user.getAddresses().get(k); 
System.out.println(addr.getAddress()); 
} 
} 


对OSCache的配置

<cacheModel id="userCache" type="OSCACHE">
	<flushInterval hours="24"/>
	<flushOnExecute statement="updateUser"/>
	<property name="size" value="1000" />
</cacheModel>



项目中oscache的配置

#是否使用内存作为缓存空间
cache.memory=true 

#缓存管理事件监听器,通过这个监听器可以获知当前 Cache 的运行情况
cache.event.listeners=com.opensymphony.oscache.pl ugins.clustersupport.JMSBroa
dcastingListener 

#如果使用磁盘缓存(cache.memory=false),则需要指定磁盘存储接口实现
#cache.persistence.class=com.opensymphony.oscache.plugins.diskpersi stence.Di sk
PersistenceListener 

#  磁盘缓存所使用的文件存储路径
# cache.path=c:\\myapp\\cache 

#  缓存调度算法,可选的有 LRU,FIFO 和无限缓存(UnlimitedCache) 
# cache.al gorithm=com.opensymphony.oscache.base.algorithm.FIFOCache 
# cache.al gorithm=com.opensymphony.oscache.base.algorithm.UnlimitedCache 
cache.al gorithm=com.opensymphony.oscache.base.al gorithm.LRUCache 

#内存缓存的最大容量
cache.capacity=1000 

#  是否限制磁盘缓存的容量
# cache.unlimited.disk=false 

#  基于 JMS 的集群缓存同步配置
#cache.cluster.jms.topic.factory=java:comp/env/jms/TopicConnectionFactory 
#cache.cluster.jms.topic.name=java:comp/env/jms/OSCacheTopi c 
#cache.cluster.jms.node.name=node1 

#  基于 JAVAGROUP 的集群缓存同步配置
#cache.cluster.properties=UDP(mcast_addr=231.12.21.132;mcast_port=45566;ip_
ttl=32;mcast_send_buf_size=150000;mcast_recv_buf_size=80000):PING(timeout
=2000;num_initial_members=3):MERGE2(min_interval=5000;max_interval=10000
):FD_SOCK:VERIFY_SUSPECT(timeout=1500):pbcast.NAKACK(gc_lag=50;retransm
it_timeout=300,600,1200,2400,4800):pbcast.STABLE(desired_avg_gossip=20000):
UNICAST(timeout=5000):FRAG(frag_size=8096;down_thread=fal se;up_thread=fal
se):pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=fal se;print_loc
al_addr=true) 
#cache.cluster.multicast.ip=231.12.21.132 




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一种Java持久化框架,它提供了一种简单而灵活的方式来访问数据库。在MyBatis,通过配置XML文件和Java注解,可以实现数据库之间关联查询,包括一对多关系。 在MyBatis实现一对多关系的连查询,可以通过两种方式来实现:嵌套查询和嵌套结果映射。 1. 嵌套查询: 在嵌套查询,首先查询主数据,然后根据主的某个字段值作为条件,再次查询关联数据。这样可以通过两次查询来获取一对多关系数据。 示例代码如下: ```xml <select id="getOrderWithItems" resultMap="orderResultMap"> SELECT * FROM orders </select> <resultMap id="orderResultMap" type="Order"> <id property="id" column="order_id"/> <result property="orderNo" column="order_no"/> <collection property="items" ofType="Item"> <id property="id" column="item_id"/> <result property="name" column="item_name"/> </collection> </resultMap> ``` 2. 嵌套结果映射: 在嵌套结果映射,可以通过一次查询将主关联数据一起查询出来,并通过结果映射将其组装成一对多数据结构。 示例代码如下: ```xml <select id="getOrderWithItems" resultMap="orderResultMap"> SELECT o.order_id, o.order_no, i.item_id, i.item_name FROM orders o LEFT JOIN items i ON o.order_id = i.order_id </select> <resultMap id="orderResultMap" type="Order"> <id property="id" column="order_id"/> <result property="orderNo" column="order_no"/> <collection property="items" ofType="Item"> <id property="id" column="item_id"/> <result property="name" column="item_name"/> </collection> </resultMap> ``` 以上是使用MyBatis实现一对多关系的连查询的两种方式。通过配置合适的SQL语句和结果映射,可以轻松地获取一对多关系数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值