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的一对一的更多相关文章

  1. java web(六):mybatis之一对一、一对多、多对多映射

    前言: 百度百科: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可 ...

  2. MyBatis:一对一关联查询

    MyBatis从入门到放弃三:一对一关联查询 前言 简单来说在mybatis.xml中实现关联查询实在是有些麻烦,正是因为起框架本质是实现orm的半自动化. 那么mybatis实现一对一的关联查询则是 ...

  3. Mybatis学习——一对一关联表查询

    1.SQL语句建表 CREATE TABLE teacher( t_id ) ); CREATE TABLE class( c_id ), teacher_id INT ); ALTER TABLE ...

  4. mybatis进阶--一对一查询

    所谓的一对一查询,就是说我们在查询一个表的数据的时候,需要关联查询其他表的数据. 需求 首先说一个使用一对一查询的小需求吧:假设我们在查询某一个订单的信息的时候,需要关联查询出创建这个订单对应的用户信 ...

  5. MyBatis 中一对一和一对多的映射关系

    1 一对一映射 比如每位学生有一个地址. public class Address { private Integer addrId; private String street; private S ...

  6. mybatis的一对一,一对多查询,延迟加载,缓存介绍

    一对一查询 需求 查询订单信息关联查询用户信息 sql语句 /*通过orders关联查询用户使用user_id一个外键,只能关联查询出一条用户记录就可以使用内连接*/ SELECT orders.*, ...

  7. mybatis之一对一关联

    MapperAsso.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper ...

  8. Java SSM框架之MyBatis3(四)MyBatis之一对一、一对多、多对多

    项目搭建Springboot 1.5  pom.xml <?xml version="1.0" encoding="UTF-8"?> <pro ...

  9. 2、SpringBoot+Mybatis整合------一对一

    开发工具:STS 代码下载链接:https://github.com/theIndoorTrain/SpringBoot_Mybatis01/tree/93398da60c647573645917b2 ...

  10. (五)mybatis之一对一关系

    一.需求分析 需求:查询订单信息关联查询用户信息 分析:一条订单只能由一个消费者来下单,也就是说从订单的角度来说与消费者是一对一的关系. 二.建数据库表和实体对象 其中订单表中的字段user_id对应 ...

随机推荐

  1. PAT 1105 Spiral Matrix[模拟][螺旋矩阵][难]

    1105 Spiral Matrix(25 分) This time your job is to fill a sequence of N positive integers into a spir ...

  2. java中string.trim()函数的作用

    trim  /[trɪm] / 英文意思:整理,修理,修剪,整齐的 trim()的作用:去掉字符串首尾的空格. public static void main(String arg[]){ Strin ...

  3. 5.5 Components -- Customizing A Compnent's Element

    一.概述 默认的,每一个组件都基于一个<div>元素.如果你在开发者工具中查看一个渲染的组件,你将会看到一个像这样的DOM表示: <div id="ember180&quo ...

  4. (13)如何使用Cocos2d-x 3.0制作基于tilemap的游戏:第一部分

    引言 程序截图: 本教程将会教大家如何使用Cocos2d-x来做一个基于tile地图的游戏,当然还有Tiled地图编辑器.(我们小时候玩的小霸王小学机里面的游戏,大部分都是基于tile地图的游戏,如坦 ...

  5. PHImageManager 获取图片模糊

    PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init]; options.synchronous = true; o ...

  6. java第七天

    p38~p41: 1.可以通过import 一个自定义类库(或者网上下的)在java中使用c风格的输入输出方式. 2.忘记优先顺序时应该用括号明确规定计算顺序. 3.java的操作符不同于c++,几乎 ...

  7. 搭建docker hadoop环境

    目录 搭建Docker-Hadoop基础环境 简介 步骤 搭建Docker image ..待续 注释 搭建Docker-Hadoop基础环境 简介 因为很难真正的有一个集群环境.在一般的条件下想要模 ...

  8. CSS3动画库——animate.css

    初见animate.css的时候,感觉很棒,基本上很多常用的CSS3动画效果都帮我们写好了,所以想要哪一种效果直接就可以拿过来用,甚是方便: 效果展示官网:http://daneden.github. ...

  9. labview之连接MySQL数据库

    Labview之连接MySQL数据库 由于项目需要,在Labview开发中,需要使用MySQL数据库.这里介绍两种连接MySQL数据库的方式. 分别为使用Labsql工具包和Database Conn ...

  10. Ubuntu16.04编译安装tensorflow,2018最新血泪踩坑之后的全面总结!绝对成功!【转】

    本文转载自:https://blog.csdn.net/pzh11001/article/details/79683133 大家好,我是 (深度学习硬件DIY总群)(719577294)群主:    ...