mabitis中的一对一关系项目实战:

1.首先根据创建以mybatis为基础的web项目(1)中的流程将web项目部署好

  1. 打开IDE,建立web工程
  2. 在lib下面粘贴mybatis的jar,log4j的jar,mysql 连接的jar 最后最最重要的是要添加到构建路径中去,这样才能够被项目所使用
  3. 新建一个源文件夹config,用于存放xml文件
  4. 在src目录把下面新建四个包,分别是:
      • com.pojo:存放数据库表对应的实体类
      • com.imp:存放接口类
      • com.test:存放测试类
      • com.util:存放工具类(最好写成静态方法,可以用类点方法的方式调用方法)
      • 目录结构如下图所示:
        •   
  5. 在config下面新建一个com.imp包:存放接口类对应的xml文件(使用mapper代理接口方式: 使用接口和XML文件,在后台自动生成操作数据库的类)
  6. 在config下面新建一个main_config.xml文件用于配置数据库和一些相关的映射,环境,插件,别名,配置文件
    1.   main_config.xml
  7. 相应的再建立一个main_config.properties(这是一个键值对的文件,可用于存放jdbc的连接,便于修改)
    1.   main_config.properties
  8. 写一个工具类(MybatisConnection.java ),用于获取连接:
    1.   

       package com.util;
      
       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; public class MyBatisConnection { public static SqlSession getSqlSession() throws IOException{
      //获取主配置文件
      InputStream inputStream = Resources.getResourceAsStream("main_config.xml");
      //创建会话工厂
      SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      SqlSession sqlSession = sqlSessionFactory.openSession();
      return sqlSession; } }

      MyBatisConnection.java

  9. 写一个测试类(TestConnection):测试是否可以获取连接
    1.   

       package com.test;
      
       import java.io.IOException;
      
       import org.apache.ibatis.session.SqlSession;
      
       import com.util.MyBatisConnection;
      
       public class TestConnection {
      
           public static void main(String[] args) throws IOException {
      SqlSession sqlSession = MyBatisConnection.getSqlSession();
      System.out.println(sqlSession); }

      TestConnection.java  

      

2.建立一个人的表(t_person),每个人对应一个身份证(一一对应关系)所以建立一个(t_card)表

表结构如下图所示

3.建立对应的实体类(pojo)

注意在person.java中cid对应写的是card的对象

 package com.pojo;

 public class Card {
private int id;
private int cardid;
public Card() {
super();
// TODO 自动生成的构造函数存根
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getCardid() {
return cardid;
}
public void setCardid(int cardid) {
this.cardid = cardid;
}
@Override
public String toString() {
return "Card [id=" + id + ", cardid=" + cardid + "]";
} }

Card.java

 package com.pojo;

 public class Person {

     private int id;
private String name;
private Card card;
public Person() {
super();
// TODO 自动生成的构造函数存根
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Card getCard() {
return card;
}
public void setCard(Card card) {
this.card = card;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", card=" + card + "]";
} }

Person.java

4.写接口或者对应的xml文件(要注意三个规范:1.接口名和映射文件名相同,2.在同一目录下,3.使用mapper代理接口(接口和XML文件,在后台自动生成操作数据库的类))

建议先写接口,有了接口之后再考虑怎么实现

我先写了一个接口(IPerson.java)

 package com.imp;

 import java.util.List;

 import com.pojo.Person;

 public interface IPerson {
//查询所有
List<Person> sqlall(); }

IPerson.java

再写对应的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" >
<!-- namespace:命名空间, 用于隔离sql语句 -->
<mapper namespace="com.imp.IPerson">
<!-- id是sql语句的唯一标识符,名字要与 接口中的方法名相同 -->
<select id="sqlall" resultMap="test">
SELECT
t_person.id,
t_person.`name`,
t_person.cid,
t_card.id,
t_card.cardid
FROM
t_card
INNER JOIN t_person ON t_person.cid = t_card.id
</select>
<resultMap type="person" id="test">
<id column="id" property="id" />
<result column="name" property="name" />
<!-- association 是一对一映射关系使用的标签 -->
<association property=""></association>
<association property="card" javaType="card">
<id column="cid" property="id" />
<result column="cardid" property="cardid" />
</association>
</resultMap> </mapper>

IPerson.xml

在IPerson.xml中namepace的值为对应的接口的全限定名(com.imp.IPerson)

在IPerson.xml的查询中我们没有使用resultType而是使用了resultMap

这是因为数据库表中的字段和实体类的属性不一致,这时候我们使用resultMap

id表示主键, 

result 表示普通的字段

association:一对一关系

column表示:查询结果对应的字段

property:实体类对应的属性

查询语句可以直接通过工具直接生成(直接拖动到空白处即可生成查询语句)

5.接下来就应该是在主配置文件中写映射文件的路径了

大家发现没有,我在IPerson.xml文件中写的Type,javaType都是实体类名,没有加包名,(这里我们要注意,我在主配置

文件中写了别名,是通过包来加载的,所以只要写类名即可,首字母的大小写不作区分)

在主配置文件的mappers标签中我使用的也是package映射,这是为了使用更加方便,如果有很多的xml文件要映射,那不是要写很多,这里只写一句就够了。

         <!-- 取别名 -->
<typeAliases>
<package name="com.pojo"/>
</typeAliases>
<!-- 添加映射文件 -->
<mappers>
<package name="com.imp"/>
</mappers>

main_config.xml

注意标签的顺序,这个有严格的规定

Content Model : (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,
objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)

6.接下来我们就要写一个测试文件,看看我们是否写成功了

 package com.test;

 import java.io.IOException;
import java.util.List; import org.apache.ibatis.session.SqlSession; import com.imp.IPerson;
import com.pojo.Person;
import com.util.MyBatisConnection; public class TestSqlAll { public static void main(String[] args) throws IOException {
SqlSession sqlSession = MyBatisConnection.getSqlSession();
IPerson person = sqlSession.getMapper(IPerson.class);
List<Person> list = person.sqlall();
for (Person person2 : list) {
System.out.println(person2);
}
}
}

TestSqlAll.java

可能测试的时候会发生错误,我们要仔细看看报的什么错误,找到错误所在,改正即可

7.测试结果如下(如果为空,那是因为你的数据库是空的啊)

创建以mybatis为基础的web项目(2)mabitis中的一对一关系项目实战的更多相关文章

  1. 创建以mybatis为基础的web项目(1)

    1. 新建项目,生成web.xml(生成的目录结构如下所示) 目录结构如下图 2. 导入mybatis包,数据库驱动包,log4j包(复制到webroot目录下的lib文件夹下面,并添加到构建路径) ...

  2. 201871010203-陈鹏昱 实验二 个人项目—《D{0-1}KP问题》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 运用科学高效的方法学习软件工程的理论和知识 这个作业在哪些方面帮助我实现学习目标 掌握软件项目个人开发流程,掌握G ...

  3. MyBatis项目配置案例详解与Web下的增删改查实现[附项目源码]

    MyBatis项目案例 项目图示: 项目源码地址:https://github.com/JluTiger/mybatispro 1.项目功能 项目案例:后台管理系统用户数据维护平台 所有用户数据查询 ...

  4. IntelliJIDEA 14创建Maven管理的Java Web项目

    1.新建项目,选择Maven,点击Next继续. 接着输入项目名 接着直接点击Finish即可 下图就是创建完毕后的Maven项目,双击pom.xml查看POM文件内容,可以自行添加Maven的依赖. ...

  5. webstorm创建nodejs + express + jade 的web 项目

    webstorm创建nodejs + express + jade 的web 项目 前简单了解过nodejs,觉得用nodejs来做个网站也太麻烦了,要自己拼html的字符串返回,这能做网站嘛? 最近 ...

  6. 基于SpringBoot + Mybatis实现SpringMVC Web项目

    一.热身 一个现实的场景是:当我们开发一个Web工程时,架构师和开发工程师可能更关心项目技术结构上的设计.而几乎所有结构良好的软件(项目)都使用了分层设计.分层设计是将项目按技术职能分为几个内聚的部分 ...

  7. IntelliJ IDEA 12创建Maven管理的Java Web项目(图解)

    转:http://blog.csdn.net/zht666/article/details/8673609/ 本文主要使用图解介绍了使用IntelliJIDEA 12创建Maven管理的JavaWeb ...

  8. Spring+Maven+Dubbo+MyBatis+Linner+Handlebars—Web开发环境搭建

    本文主要分三部分,分别是:后台核心业务逻辑.桥梁辅助控制和前台显示页面. 本Web开发环境综合了多种工具,包括Maven包管理与编译工具.Dubbo分布式服务框架.MyBatis数据持久化工具.Lin ...

  9. Spring Boot 2.X(三):使用 Spring MVC + MyBatis + Thymeleaf 开发 web 应用

    前言 Spring MVC 是构建在 Servlet API 上的原生框架,并从一开始就包含在 Spring 框架中.本文主要通过简述 Spring MVC 的架构及分析,并用 Spring Boot ...

随机推荐

  1. sql数据库中日期函数---2017-04-12

    一.SQLServer时间日期函数详解 1.  当前系统日期.时间 select getdate() 2. dateadd      在向指定日期加上一段时间的基础上,返回新的 datetime 值 ...

  2. java ———基础总结

    计算机语言的分类:  机器语言: 是计算机唯一能接受和执行的语言,只有二进制数字表示. 汇编语言: 是用助记符表示指令功能的计算机语言. 高级语言: 与自然语言相近并为计算机所接受和执行的计算机语言. ...

  3. ABAP调试

    ABAP 开发系列(02): ABAP Development Workbench 介绍(下)- ABAP 调试器 8. Debugger – ABAP 调试器 开发程序,调试器是必不可少的工具,而A ...

  4. 优先级队列用法详解(priority_queue)

    由于优先级队列的内部数据结构为 堆,所以这里先介绍堆的一些操作. 堆的一些函数操作在algorithm头文件中 //在[first, last)范围内构造最大堆,first,last 可以是vecto ...

  5. PHP7变量的内部实现

    PHP7变量的内部实现 受篇幅限制,这篇文章将分为两个部分.本部分会讲解PHP5和PHP7在zval结构体的差异,同时也会讨论引用的实现.第二部分会深入探究一些数据类型如string和对象的实现. P ...

  6. [模拟赛] T1 无线通讯网

    Description 国防部计划用无线网络连接若干个边防哨所.2种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫星电话线路的 ...

  7. python读取三维点云球坐标数据并动态生成三维图像与着色

    关键步骤: 1.首先通过读取.txt文本数据并进行一系列字符串处理,提取显示所需要的相关数据矩阵 2.然后利用python的matplotlib库来进行动态三维显示 备注:matplotlib在显示2 ...

  8. 杭电OJ2004——成绩转换

    /*成绩转换Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  9. 冲刺总结随笔(Alpha)

    冲刺总结随笔 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.项目预期进展及现实进展 项目预期 ...

  10. 201621123057 《Java程序设计》第8周学习总结

    1. 本周学习总结 思维导图归纳总结集合相关内容. 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 ArrayList是允许重复的,但当用它来 ...