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. java:判断二进制数据中第n位是否为1

    可以使用位运算来判断. &是位的与运算符,是指二进制数按位“与”的操作, 逻辑与就是两者都为真的时候才为真,其他真假,假真,假假的运算结果都是假.二进制写法如下 1 & 1 = 1 , ...

  2. mutex锁住共用线程函数 造成了死锁 ,为什么?

    锁住共用的线程函数,为什么出现了死锁的现象,是真的死锁了吗?为什么勒[清晰早点] [逍遥游]# 一般都是用 EnterCriticalSection 和 LeaveCriticalSection 锁住 ...

  3. TabControl delphi

    1.TTabControl 组件的典型用法TTabControl 组件使用起来,根本不会使程序简单化,所以不提倡使用此组件,可以用TPageControl组件代替.与多页组件不同的是,虽然Tab 组件 ...

  4. uwsgi手动安装时报错ValueError: invalid literal for int() with base 10: '32_1'

    安装uwsgi,安装步骤如下 wget https://projects.unbit.it/downloads/uwsgi-latest.tar.gz tar zxvf uwsgi-latest.ta ...

  5. Horizon代码的层次结构

    Horizon中包含多个dashboard,每个dashboard又包含多个panel,每个panel有可以包含多个Tab.

  6. 吴恩达深度学习笔记(deeplearning.ai)之循环神经网络(RNN)(三)

    1. 导读 本节内容介绍普通RNN的弊端,从而引入各种变体RNN,主要讲述GRU与LSTM的工作原理. 事先声明,本人采用ng在课堂上所使用的符号系统,与某些学术文献上的命名有所不同,不过核心思想都是 ...

  7. Python3.x:os.chdir(改变当前路径方法)介绍

    Python3.x:os.chdir(改变当前路径方法)介绍 1,os.chdir() import os os.chdir(r'C:\python36\test_chdir') 说明:chdir() ...

  8. 实验五分析system_call中断处理过程

    一.实验要求: 1.使用gdb跟踪分析一个系统调用内核函数 2.根据本周所学知识分析系统调用的过程,从system_call开始到iret结束之间的整个过程,并画出简要准确的流程图 二.实验步骤: 1 ...

  9. Migrating from Spring 3 to Spring 4 - org.springframework.scheduling.quartz.CronTriggerBean

    I'm trying to migrate from spring 3.0.5 to spring 4.1.X . Spring 3 has Class named as "org.spri ...

  10. CF #505 B Weakened Common Divisor(数论)题解

    题意:给你n组,每组两个数字,要你给出一个数,要求这个是每一组其中一个数的因数(非1),给出任意满足的一个数,不存在则输出-1. 思路1:刚开始乱七八糟暴力了一下果断超时,然后想到了把每组两个数相乘, ...