mybatis怎么根据id显示两个表的内容连接的小例子都有哪些?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis怎么根据id显示两个表的内容连接的小例子都有哪些?相关的知识,希望对你有一定的参考价值。
可以通过关系映射查询出来 请看下面在mybatis中,没有级联的概念,但是可以利用集合来实现类似的功能。
mybatis3.0添加了association和collection标签专门用于对多个相关实体类数据进行级联查询,但仍不支持多个相关实体类数据的级联保存和级联删除操作。因此在进行实体类多对多映射表设计时,需要专门建立一个关联对象类对相关实体类的关联关系进行描述。
插入关联表:
<insert id="insertWife" useGeneratedKeys="true" keyProperty="wid" parameterType="com.cssl.pojo.Wife">
insert into wife (name,h_id) values (#name,#husband.hid)
</insert>
关联映射:嵌入式、继承式 引入式等
先在数据库建立好主外键关系
在xml里面写一个resultMap作为返回类型,如果是多对一 用association 一对多用collection
例子
<!-- 多对一 -->
<resultMap id="wifeandhusband" type="wife">
<id property="wid" column="wid"></id>
<result property="wname" column="wname"></result>
<association property="husband" column="w_hid" javaType="com.cssl.pojo.Husband">
<id property="hid" column="hid"></id>
<result property="name" column="name"></result>
</association>
</resultMap>
<!-- 一对多 -->
<resultMap id="husbandandwife" type="com.cssl.pojo.Husband">
<id property="hid" column="hid"></id>
<result property="name" column="name"></result>
<collection property="wifes" ofType="wife"> --ofType集合中的类型
<id property="wid" column="wid"></id>
<result property="wname" column="wname"></result>
</collection>
</resultMap>
<select id="selectWife" resultMap="wifeandhusband">
select w.*,h.* from wife w left join husband h on w.h_id=h.hid
</select>
注意:
1、关联查询一定要带有关联对象的id(主外键),否则集合只会有一条记录存在(认为你查询的是一个对象)
如:
select h.name,h.age,w.wname from wife w left join husband h on h.hid=w.h_id
2、表连接中不同表有同名字段的时候:a和b都有name字段
<resultMap type="b" id="b">
<id property="bid" column="id"/>
<result property="name" column="name"/>
<association property="a" javaType="a">
<id property="aid" column="aid"/>
<result property="name" column="aname"/>
</association>
</resultMap>
<select id="select" resultMap="b">
select a.id aid,a.name aname,b.id,b.name from a,b where a.id=b.id
</select> 参考技术A
mybits是支持普通sql查询、存储过程和高级映射的持久层框架
几乎消除了所有的jdbc代码和参数设置以及对结果集检索封装
可用xml或注解二种方式配置
jdbc->dbUtil(自动封装结果集)->mybatis->hibernate(面向对象的操作)
一个简单的mybatis例子(根据id查数据)
1.添加mybatis和mysql的jar包,在数据库中建立一个表如:user表
2.编写mybaits的config.xml
可从文档中copy
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="123" />
</dataSource>
</environment>
</environments>
</configuration>
3.建立表相应的实体类,如:user
4.建立user的映射文件userMapper.xml
<?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="com.mybits_01.test1.userMapper">
<select id="getUser" parameterType="int"
resultType="com.mybits_01.test1.User">
select * from users where id=#id
</select>
</mapper>
5.在config.xml中注册userMapper.xml文件
<mappers>
<mapper resource="com/mybits_01/test1/userMapper.xml"/>
</mappers>
6.插曲:如果没有标签提示,可能没有导入dtd文件,在Eclipse中的window下打开preferences搜索xml在xml下的xml catalog里点击add出现如图:
指定一个public id 如
中的-//mybatis.org//DTD Config 3.0//EN
而location则是dtd文件所在位置就可以了
7.测试
public static void main(String[] args) throws IOException
String resource = "conf.xml";
InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
String statement = "com.mybits_01.test1.userMapper.getUser";
User user = session.selectOne(statement,1);
System.out.println(user);
参考技术B 可以通过关系映射查询出来 请看下面在mybatis中,没有级联的概念,但是可以利用集合来实现类似的功能。
mybatis3.0添加了association和collection标签专门用于对多个相关实体类数据进行级联查询,但仍不支持多个相关实体类数据的级联保存和级联删除操作。因此在进行实体类多对多映射表设计时,需要专门建立一个关联对象类对相关实体类的关联关系进行描述。
插入关联表:
<insert id="insertWife" useGeneratedKeys="true" keyProperty="wid" parameterType="com.cssl.pojo.Wife">
insert into wife (name,h_id) values (#name,#husband.hid)
</insert>
关联映射:嵌入式、继承式 引入式等
先在数据库建立好主外键关系
在xml里面写一个resultMap作为返回类型,如果是多对一 用association 一对多用collection
例子
<!-- 多对一 -->
<resultMap id="wifeandhusband" type="wife">
<id property="wid" column="wid"></id>
<result property="wname" column="wname"></result>
<association property="husband" column="w_hid" javaType="com.cssl.pojo.Husband">
<id property="hid" column="hid"></id>
<result property="name" column="name"></result>
</association>
</resultMap>
<!-- 一对多 -->
<resultMap id="husbandandwife" type="com.cssl.pojo.Husband">
<id property="hid" column="hid"></id>
<result property="name" column="name"></result>
<collection property="wifes" ofType="wife"> --ofType集合中的类型
<id property="wid" column="wid"></id>
<result property="wname" column="wname"></result>
</collection>
</resultMap>
<select id="selectWife" resultMap="wifeandhusband">
select w.*,h.* from wife w left join husband h on w.h_id=h.hid
</select>
注意:
1、关联查询一定要带有关联对象的id(主外键),否则集合只会有一条记录存在(认为你查询的是一个对象)
如:
select h.name,h.age,w.wname from wife w left join husband h on h.hid=w.h_id
2、表连接中不同表有同名字段的时候:a和b都有name字段
<resultMap type="b" id="b">
<id property="bid" column="id"/>
<result property="name" column="name"/>
<association property="a" javaType="a">
<id property="aid" column="aid"/>
<result property="name" column="aname"/>
</association>
</resultMap>
<select id="select" resultMap="b">
select a.id aid,a.name aname,b.id,b.name from a,b where a.id=b.id
</select>
两个表,一个表中的两列关联另一个表的id,如何将这个表中的两列显示为另一个表id对应的内容
表A name user owner
machine1 1 2
machine2 3 4
表B userid username
1 aaa
2 bbb
3 ccc
4 ddd
以上两个表,表A 设备的用户id和所有者id,表B是用户id对应的名称如何用sql语句显示为下面的表
显示为 name user ower
machine1 aaa bbb
machine2 ccc ddd
创建表
create table a(name varchar(10),
[user] int,
owner int)
create table b
(userid int,
username varchar(10))
insert into a values (\'machine1\',1,2)
insert into a values (\'machine2\',3,4)
insert into b values (1,\'aaaa\')
insert into b values (2,\'bbbb\')
insert into b values (3,\'cccc\')
insert into b values (4,\'dddd\')
执行
select t1.name,t2.username [user],t3.username ownerfrom a t1,b t2,b t3 where t1.[user]=t2.userid and t1.owner=t3.userid
结果
由于user是sqlserver中关键字,所以用中括号括了起来
参考技术A 这个简单啊,SELECT name, user=(SELECT username FROM B WHERE B.userid = A.user), owner=(SELECT username FROM B WHERE B.userid = A.owner), FROM A以上是关于mybatis怎么根据id显示两个表的内容连接的小例子都有哪些?的主要内容,如果未能解决你的问题,请参考以下文章
两个表,一个表中的两列关联另一个表的id,如何将这个表中的两列显示为另一个表id对应的内容