惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
T
Threatpost
阮一峰的网络日志
阮一峰的网络日志
美团技术团队
F
Fortinet All Blogs
The GitHub Blog
The GitHub Blog
月光博客
月光博客
V
Visual Studio Blog
T
Tailwind CSS Blog
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
Jina AI
Jina AI
J
Java Code Geeks
Martin Fowler
Martin Fowler
大猫的无限游戏
大猫的无限游戏
Recorded Future
Recorded Future
C
Check Point Blog
腾讯CDC
N
Netflix TechBlog - Medium
aimingoo的专栏
aimingoo的专栏
罗磊的独立博客
Hacker News: Ask HN
Hacker News: Ask HN
SecWiki News
SecWiki News
博客园 - Franky
Hacker News - Newest:
Hacker News - Newest: "LLM"
N
News | PayPal Newsroom
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Security @ Cisco Blogs
W
WeLiveSecurity
The Last Watchdog
The Last Watchdog
Cloudbric
Cloudbric
F
Full Disclosure
The Cloudflare Blog
Y
Y Combinator Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
S
Schneier on Security
Schneier on Security
Schneier on Security
Spread Privacy
Spread Privacy
L
LINUX DO - 热门话题
AI
AI
N
News and Events Feed by Topic
T
Tor Project blog
P
Palo Alto Networks Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More
G
Google Developers Blog

博客园 - Super Sky

2016年了 14年了,离上一篇2年了,做个记号 忙完这段时间后要做的事情 android比赛 计算机前沿技术造就亿万富翁 模板里面的时间(网上找的) javamail 转 异常 关于异常 xml生成和解析 转载 ibatis 转载 联合查询 in ibatis 我想出国读硕士了 迅雷在哪里,迅雷在这里 二维游戏开发的点滴 盟军敢死队 用c语言开发游戏 快乐的痛 笑着哭 所谓机遇 顽固文件删除
转ibatis多表操作
Super Sky · 2011-09-19 · via 博客园 - Super Sky

<sqlMap namespace="user"><--命名空间,好像2.0默认是开通的-->

<cacheModel type="LRU" id="oneDayCategory"><!--缓存配置,详细的资料请察看官方提供的用户手册,好像有中文版本的了 -->

<flushInterval hours="24" />

</cacheModel>

<typeAlias type="com.infodeliver.pigeon.bean.User" alias="userbean" /><!--定义本地变量,为了方便使用 -->

<typeAlias type="com.infodeliver.pigeon.util.Condition"

alias="condition" />

<typeAlias type="com.infodeliver.pigeon.bean.Role" alias="rolebean"/>

<resultMap id="get_group_result"

class="com.infodeliver.pigeon.bean.Group"><!-- 这就是不定义本地变量的结果-->

<result property="groupid" column="group_id" />

<result property="groupname" column="group_name" />

</resultMap>

<resultMap id="get_role_result"

class="rolebean">

<result property="role_id" column="role_id"/>

<result property="role_name" column="role_name"/>

</resultMap>

<resultMap id="get_user_result"

class="userbean">

<result property="user_id" column="user_id" />

<result property="username" column="username" />

<!--为user的group信息(属性groupid,groupname)配置 -->

<result property="group.groupid" column="group_id" />

<result property="group.groupname" column="group_name" />

<!—这里的property="group.groupid"的含义已经很对象化了,group指的User对象里的数据类型-Group的别名;这里的column=”group_id”为group表里的PK:group_id而非user表的FK:group_id,不要弄混淆了!-->

<!--为user的role信息(属性roleid,rolename)配置,这里同样是User中的子对象,采取的处理却是不同的,通过group来避免使用子查询带来的性能问题,大家可以看到

第一个配置的粒度比较细微,配置子对象的属性,而role只是到对象一级,group中没有使用select="XXX"这样的子查询,从而避免了因为数据量大而引起二次查询带来的性能问题,而采用了一个role作为一个反面教材,大家比较一下可以发现其中的不同!-->

<result property="role" column="role_id" select="get_role"/>

<!—这里采用了子查询(两次查询),注意这里的role_id是role表的PK:role_id,而非user表的FK:role_id,大家不要搞错了>

</resultMap>

<select id="get_role" parameterClass="int" resultMap="get_role_result"><!--这里的parameterClass="int"因为父查询传过来的role_id为int型的-->

select * from sew_role where role_id=#value#

</select>

<select id="get_user" parameterClass="userbean"

resultMap="get_user_result">

select * from sew_user u,sew_group g<!--因为这里的group没有子查询,所以要使用嵌套!这样在执行的效率上比子查询有优势哦,大家应该很熟悉吧!-->

where u.group_id=g.group_id

and u.user_id=#user_id#

</select>

<select id="checkuser" parameterClass="userbean"

resultMap="get_user_result">

select * from sew_user u,sew_group g

where u.group_id=g.group_id

and u.username=#username#

and u.password=#password#

</select>

<select id="get_group" resultMap="get_group_result"

parameterClass="int">

select * from sew_group where group_id=#value#

</select>

<insert id="insertuser" parameterClass="userbean">

insert into sew_user

values(sew_user_id_seq.nextval,<!—因为数据库里用了序列-->

#username#,#password#,#email#,#group.groupid#,#role.role_id#,#nationality#,

#tel#,#address#,#language#,#isEvectioner#,#realname#)

</insert>

<!—这里红色标注的:group.groupid同样的意思是User对象的数据成员:group,而groupid为子对象Group的数据成员(在UML里把带有setter和getter的数据成员称为属性。) -->

Public class UserService{

public User getUser(User user){

User user1=null;

try {

System.out.println(user.getUser_id());

user1 =(User)getSqlMapExecutor().queryForObject("getuser",user);

} catch (SQLException e) {

e.printStackTrace();

return null;

}

return user1;

}

}

UserService us=new UserService();

User ub=new User();

ub.setUser_id(2);

ub =(User)us.getUser_Group(ub);

System.out.println("ok"+"\n"+ub.getUsername()+"\n"+ub.getGroup().getGroupname()+"\n"+ub.getRole().getRole_name());

System.out.println(ub.getGroup().getGroupname());

User user=new User();

user.setUser_id(27);

user.setUsername("##梁静茹!!");

user.setPassword("1111");

user.setEmail("ljr@sohu.com");

user.setLanguage("CN");

user.setAddress("无锡.江苏");

user.setNationality("中国");

user.setTel("1390000000");

user.setRealname("欧阳静茹");

Group g=new Group();

g.setGroupid(1);

Role r =new Role();

r.setRole_id(1);

user.setGroup(g);

user.setRole(r);

user=us.saveUser(user);

if(user!=null)

System.out.println(user.getGroup().getGroupid());

<sqlMap namespace="group">

<cacheModel type="LRU" id="oneDayCategory">

<flushInterval hours="24" />

</cacheModel>

<typeAlias type="com.infodeliver.pigeon.bean.Group"

alias="groupbean" />

<typeAlias type="com.infodeliver.pigeon.bean.User" alias="userbean" />

<resultMap id="get_groups" class="groupbean">

<result property="groupid" column="group_id" />

<result property="groupname" column="group_name" />

<result property="users" column="group_id" select="get_User" />

<!—这里好像只能用子查询了。其他办法还没有想到

根据group_id,能查出所有关联的User,组成装有User的List对象

-->

</resultMap>

<resultMap id="get_users" class="userbean">

<result property="user_id" column="user_id" />

<result property="username" column="username" />

<!—根据需要得到用户的其他信息,比如说用户的电话,E-MAIL等-->

</resultMap>

<select id="get_User" parameterClass="int" resultMap="get_users">

select * from sew_user where group_id=#value#

</select>

<select id="getgroup" parameterClass="groupbean"

resultMap="get_groups">

select * from sew_group

<dynamic prepend="where">

<isNotEqual property="groupid" compareValue="0">

group_id=#groupid#

</isNotEqual>

<isNotNull property="groupname">group_name=#groupname#</isNotNull>

</dynamic>

</select>

</sqlMap>

public Group getGroup(Group g) {

Group g1=null;

try {

g1=(Group) getSqlMapExecutor().queryForObject("getgroup",g);

} catch (SQLException e) {

e.printStackTrace();

return null;

}

return g1;

}

GroupService gs =GroupService.getInstance();

Group g1=new Group();

g1.setGroupname("Sales");

g1.setGroupid(1);

Group g2=gs.getGroup(g1);

System.out.println(g2.getGroupname());

List list =g2.getUsers();

for(Iterator i=list.iterator();i.hasNext();) {

User u=(User)i.next();

System.out.println(u.getUsername());

}