MyBatis的一对一
1. 建立好工程后,在pom.xml中配置myBatis的依赖。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.whl</groupId>
<artifactId>MyBatis02</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>MyBatis02 Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
</dependencies>
<build>
<finalName>MyBatis02</finalName>
</build>
</project>
主要就是加一个MyBatis的依赖,以及修改一下Junit的版本,以适应自己的环境。
2 新建一个Card类和一个Person类,每一个Person只有一个Card。故在Person类中
会有一个Card类的属性,在建立数据库时,cid作为外键,存在于Person表中。代码如下:
数据库在dos框中自己建立(cid int unique , foreign key (cid) references card (cid))(外键设置)
Card类代码如下
package com.whl.one2one; public class Card {
private int cid;
private String cnumber;
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getCnumber() {
return cnumber;
}
public void setCnumber(String cnumber) {
this.cnumber = cnumber;
}
public Card(int cid, String cnumber) {
super();
this.cid = cid;
this.cnumber = cnumber;
}
public Card() {
super();
}
@Override
public String toString() {
return "Card [cid=" + cid + ", cnumber=" + cnumber + "]";
} }
Person类代码如下:
package com.whl.one2one; public class Person {
private int pid;
private String pname;
private String page;
private String psex;
private Card card;
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getPage() {
return page;
}
public void setPage(String page) {
this.page = page;
}
public String getPsex() {
return psex;
}
public void setPsex(String psex) {
this.psex = psex;
}
public Card getCard() {
return card;
}
public void setCard(Card card) {
this.card = card;
}
@Override
public String toString() {
return "Person [pid=" + pid + ", pname=" + pname + ", page=" + page + ", psex=" + psex + ", card=" + card + "]";
}
public Person(int pid, String pname, String page, String psex, Card card) {
super();
this.pid = pid;
this.pname = pname;
this.page = page;
this.psex = psex;
this.card = card;
}
public Person() {
super();
} }
3.在建立好上述的Jopo类后,在同样的包下新建CardMapper.xml和PersonMapper.xml来映射SQL语句。
CardMapper.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.whl.one2one">
<select id="selectCardByID" parameterType="int" resultType="com.whl.one2one.Card">
select * from card where cid = #{id}
</select>
</mapper>
PersonMapper.xml代码如下:在Person类中,存在主外键关系,所以select中不在是单一表的查询,将原本的resultType改为
resultMap,其中的值,就是后续Resultmap的ID。且在resultMap中会存在一个对CardMapper.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.whl.one2one"> <select id="selectPersonById" parameterType="int" resultMap="resultPersonMap">
select * from tb_person where pid=#{id}
</select> <resultMap id="resultPersonMap" type="com.whl.one2one.Person">
<id property="pid" column="pid" />
<result property="pname" column="name" />
<result property="psex" column="psex" />
<result property="page" column="page" />
<association property="card" column="cid"
select="com.whl.one2one.selectCardByID"
javaType="com.whl.one2one.Card"/>
</resultMap > </mapper>
4. 在myBatis-config.xml 中实现与数据库的连接。当然在连接之前需要数据库的Jar包,网速好时可在pom中添加依赖自动下载
网速不好使要手动加载。在代码中可以看到连接数据库的driver、url、user、pass等都是通过<properties resource="jdbc.properties"/>来加载资源从而获得的。jdbc.properties文件后面会展示。同时在此XML文件中还需要完成对CardMapper.xml以及PersonMapper.xml的映射。如<Mapper>节点所示。
<?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>
<!--加载资源 -->
<properties resource="jdbc.properties"/> <environments default="mybatis">
<environment id="mybatis">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.pass}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/whl/one2one/CardMapper.xml"></mapper>
<mapper resource="com/whl/one2one/PersonMapper.xml"></mapper>
</mappers>
</configuration>
5 测试:测试代码如下所示:利用Junit的before和After来实现前期session的准备和后期session的关闭。
package com.whl.testone2one; import java.io.IOException;
import java.io.InputStream; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import com.whl.one2one.Card;
import com.whl.one2one.Person; public class TestOne2One {
private SqlSession s;
@Before
public void beforeTest(){
String res = "mybatis-config.xml"; try {
InputStream is = Resources.getResourceAsStream(res); SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is); s = ssf.openSession();
} catch (IOException e) {
e.printStackTrace();
}
} @Test
public void testPersonById(){
Person p = s.selectOne("com.whl.one2one.selectPersonById",1);
System.out.println(p);
}
@Test
public void testCardById(){
Card c = s.selectOne("com.whl.one2one.selectCardByID",1);
System.out.println(c);
} @After
public void afterTest(){ s.commit();
if(s != null){
s.close();
s = null;
} }
}
MyBatis的一对一的更多相关文章
- java web(六):mybatis之一对一、一对多、多对多映射
前言: 百度百科: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可 ...
- MyBatis:一对一关联查询
MyBatis从入门到放弃三:一对一关联查询 前言 简单来说在mybatis.xml中实现关联查询实在是有些麻烦,正是因为起框架本质是实现orm的半自动化. 那么mybatis实现一对一的关联查询则是 ...
- Mybatis学习——一对一关联表查询
1.SQL语句建表 CREATE TABLE teacher( t_id ) ); CREATE TABLE class( c_id ), teacher_id INT ); ALTER TABLE ...
- mybatis进阶--一对一查询
所谓的一对一查询,就是说我们在查询一个表的数据的时候,需要关联查询其他表的数据. 需求 首先说一个使用一对一查询的小需求吧:假设我们在查询某一个订单的信息的时候,需要关联查询出创建这个订单对应的用户信 ...
- MyBatis 中一对一和一对多的映射关系
1 一对一映射 比如每位学生有一个地址. public class Address { private Integer addrId; private String street; private S ...
- mybatis的一对一,一对多查询,延迟加载,缓存介绍
一对一查询 需求 查询订单信息关联查询用户信息 sql语句 /*通过orders关联查询用户使用user_id一个外键,只能关联查询出一条用户记录就可以使用内连接*/ SELECT orders.*, ...
- mybatis之一对一关联
MapperAsso.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper ...
- Java SSM框架之MyBatis3(四)MyBatis之一对一、一对多、多对多
项目搭建Springboot 1.5 pom.xml <?xml version="1.0" encoding="UTF-8"?> <pro ...
- 2、SpringBoot+Mybatis整合------一对一
开发工具:STS 代码下载链接:https://github.com/theIndoorTrain/SpringBoot_Mybatis01/tree/93398da60c647573645917b2 ...
- (五)mybatis之一对一关系
一.需求分析 需求:查询订单信息关联查询用户信息 分析:一条订单只能由一个消费者来下单,也就是说从订单的角度来说与消费者是一对一的关系. 二.建数据库表和实体对象 其中订单表中的字段user_id对应 ...
随机推荐
- PAT 1105 Spiral Matrix[模拟][螺旋矩阵][难]
1105 Spiral Matrix(25 分) This time your job is to fill a sequence of N positive integers into a spir ...
- java中string.trim()函数的作用
trim /[trɪm] / 英文意思:整理,修理,修剪,整齐的 trim()的作用:去掉字符串首尾的空格. public static void main(String arg[]){ Strin ...
- 5.5 Components -- Customizing A Compnent's Element
一.概述 默认的,每一个组件都基于一个<div>元素.如果你在开发者工具中查看一个渲染的组件,你将会看到一个像这样的DOM表示: <div id="ember180&quo ...
- (13)如何使用Cocos2d-x 3.0制作基于tilemap的游戏:第一部分
引言 程序截图: 本教程将会教大家如何使用Cocos2d-x来做一个基于tile地图的游戏,当然还有Tiled地图编辑器.(我们小时候玩的小霸王小学机里面的游戏,大部分都是基于tile地图的游戏,如坦 ...
- PHImageManager 获取图片模糊
PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init]; options.synchronous = true; o ...
- java第七天
p38~p41: 1.可以通过import 一个自定义类库(或者网上下的)在java中使用c风格的输入输出方式. 2.忘记优先顺序时应该用括号明确规定计算顺序. 3.java的操作符不同于c++,几乎 ...
- 搭建docker hadoop环境
目录 搭建Docker-Hadoop基础环境 简介 步骤 搭建Docker image ..待续 注释 搭建Docker-Hadoop基础环境 简介 因为很难真正的有一个集群环境.在一般的条件下想要模 ...
- CSS3动画库——animate.css
初见animate.css的时候,感觉很棒,基本上很多常用的CSS3动画效果都帮我们写好了,所以想要哪一种效果直接就可以拿过来用,甚是方便: 效果展示官网:http://daneden.github. ...
- labview之连接MySQL数据库
Labview之连接MySQL数据库 由于项目需要,在Labview开发中,需要使用MySQL数据库.这里介绍两种连接MySQL数据库的方式. 分别为使用Labsql工具包和Database Conn ...
- Ubuntu16.04编译安装tensorflow,2018最新血泪踩坑之后的全面总结!绝对成功!【转】
本文转载自:https://blog.csdn.net/pzh11001/article/details/79683133 大家好,我是 (深度学习硬件DIY总群)(719577294)群主: ...