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. Servlet的监听器

    Listener是Servlet的监听器,它可以监听客户端的请求.服务端的操作等.通过监听器,可以自动激发一些操作,比如监听在线的用户的数量.当增加一个HttpSession时,就激发sessionC ...

  2. 11 个简单的 Java 性能调优技巧

    大多数开发人员理所当然地以为性能优化很复杂,需要大量的经验和知识.好吧,不能说这是完全错误的.优化应用程序以获得最佳性能不是一件容易的事情.但是,这并不意味着如果你不具备这些知识,就不能做任何事情.这 ...

  3. docker学习系列(五):使用docker创建集成服务--lnmp

    在掌握了docker的基本命令之后,我也是想着去用docker做一点实际的配套环境,就拿自己最常用的lnmp环境来做测试.配套环境运行的顺序依次是mysql->php->nginx,至于为 ...

  4. Java内存区域之程序计数器--《深入理解Java虚拟机》学习笔记及个人理解(一)

    Java虚拟机程序计数器 在书上的P39页 程序计数器干嘛的? 有了它,字节码解释器才可以知道下一条要执行的字节码指令是哪个. 无论是取下一条指令还是分支.循环.跳转.中断.线程恢复,都需要这个程序计 ...

  5. CAS 之 Apereo CAS 简介(一)

    CAS 之 Apereo CAS 简介(一) Background(背景) 随着公司业务的不断扩展,后台接入子系统不断增多,那么我们将针对不同的平台进行拆分为各自对应的子系统, 权限是不变的,那么我们 ...

  6. 常用linux日志查询命令

    1.查看实时日志: tail -f nohup.out 2.分页查看所有日志: cat nohup.out | more 4.分页查看前N行日志: tail -n 1000 nohup.out | m ...

  7. Jmeter 前置处理器 BeanShell_PreProcessor 适用思考

    首先摘抄一段官方文档的话: Before invoking the script, some variables are set up in the BeanShell interpreter: lo ...

  8. js和jquery实现显示隐藏

    (选择的重要性) 当点击同一个按钮的时候实现显示影藏 <a id="link" class="b-btn-four task-resolve add-sub-tas ...

  9. python全栈学习--day3

    一.基础数据类型 基础数据类型,有7种类型,存在即合理. 1.int 整数 主要是做运算的 .比如加减乘除,幂,取余  + - * / ** %...2.bool 布尔值 判断真假以及作为条件变量3. ...

  10. Struts2学习笔记四 OGNL

    OGNL,全称为Object-Graph Navigation Language(对象图表达语言),它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,调用java对象的方法,同时能够自动 ...