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 owner
from 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对应的内容

mybatis如何查询返回部分字段?

Mybatis框架学习笔记

MyBaties异常之 ORA-00918: 未明确定义列

sql server 2005 中的内连接和外连接 怎么理解?

mybatis 先插入主表数据,获得自增主键。然后作为从表的外键插入从表数据怎么做