博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
创建以mybatis为基础的web项目(2)mabitis中的一对一关系项目实战
阅读量:6190 次
发布时间:2019-06-21

本文共 5666 字,大约阅读时间需要 18 分钟。

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.   
      1 package com.util; 2  3 import java.io.IOException; 4 import java.io.InputStream; 5  6 import org.apache.ibatis.io.Resources; 7 import org.apache.ibatis.session.SqlSession; 8 import org.apache.ibatis.session.SqlSessionFactory; 9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;10 11 public class MyBatisConnection {12     13     public static SqlSession getSqlSession() throws IOException{14         //获取主配置文件15         InputStream inputStream = Resources.getResourceAsStream("main_config.xml");16         //创建会话工厂17         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);18         SqlSession sqlSession = sqlSessionFactory.openSession();19         return sqlSession;20         21         22     }23 24 }
      MyBatisConnection.java

       

  9. 写一个测试类(TestConnection):测试是否可以获取连接
    1.   
      1 package com.test; 2  3 import java.io.IOException; 4  5 import org.apache.ibatis.session.SqlSession; 6  7 import com.util.MyBatisConnection; 8  9 public class TestConnection {10     11     public static void main(String[] args) throws IOException {12         SqlSession sqlSession = MyBatisConnection.getSqlSession();13         System.out.println(sqlSession);14         15     }16
      TestConnection.java    

      

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

表结构如下图所示

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

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

1 package com.pojo; 2  3 public class Card { 4     private int id; 5     private int cardid; 6     public Card() { 7         super(); 8         // TODO 自动生成的构造函数存根 9     }10     public int getId() {11         return id;12     }13     public void setId(int id) {14         this.id = id;15     }16     public int getCardid() {17         return cardid;18     }19     public void setCardid(int cardid) {20         this.cardid = cardid;21     }22     @Override23     public String toString() {24         return "Card [id=" + id + ", cardid=" + cardid + "]";25     }26 27 }
Card.java
1 package com.pojo; 2  3 public class Person { 4      5     private int id; 6     private String name; 7     private Card card; 8     public Person() { 9         super();10         // TODO 自动生成的构造函数存根11     }12     public int getId() {13         return id;14     }15     public void setId(int id) {16         this.id = id;17     }18     public String getName() {19         return name;20     }21     public void setName(String name) {22         this.name = name;23     }24     public Card getCard() {25         return card;26     }27     public void setCard(Card card) {28         this.card = card;29     }30     @Override31     public String toString() {32         return "Person [id=" + id + ", name=" + name + ", card=" + card + "]";33     }34 35 }
Person.java

 

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

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

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

1 package com.imp; 2  3 import java.util.List; 4  5 import com.pojo.Person; 6  7 public interface IPerson { 8     //查询所有 9     List
sqlall();10 11 }
IPerson.java

 

 再写对应的xml文件

1 
2 3
4
5
6
17
18
19
20
21
22
23
24
25
26
27 28
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文件要映射,那不是要写很多,这里只写一句就够了。

1         
2
3
4
5
6
7
8
main_config.xml

 

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

Content Model : (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,

objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)

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

1 package com.test; 2  3 import java.io.IOException; 4 import java.util.List; 5  6 import org.apache.ibatis.session.SqlSession; 7  8 import com.imp.IPerson; 9 import com.pojo.Person;10 import com.util.MyBatisConnection;11 12 public class TestSqlAll {13 14     public static void main(String[] args) throws IOException {15         SqlSession sqlSession = MyBatisConnection.getSqlSession();16         IPerson person = sqlSession.getMapper(IPerson.class);17         List
list = person.sqlall();18 for (Person person2 : list) {19 System.out.println(person2);20 }21 }22 }
TestSqlAll.java

 

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

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

 

 

转载于:https://www.cnblogs.com/xyblogs/p/8780870.html

你可能感兴趣的文章
Haproxy的安装和配置示例
查看>>
android视图切换动画:ViewAnimator类及其子类
查看>>
国内公共DNS
查看>>
一颗可靠的时间胶囊:苹果AirPort Time Capsule测评
查看>>
Windows平台分布式网站系统应用(转)
查看>>
转: CentOS 6 使用 yum 安装MongoDB及服务器端配置
查看>>
Linux C 字符函数 getchar()、putchar() 与 EOF 详解
查看>>
【python】判断字符串日期是否有效
查看>>
使用systemtap调试Linux内核
查看>>
(转)Android分布式编译学习(一)distcc实现分布式编译 —— Ubuntu12.04上部署distcc分布式编译...
查看>>
clock divider
查看>>
朴素贝叶斯分类器(离散型)算法实现(一)
查看>>
你的眼睛背叛你的心:解决 .NET Core 中 GetHostAddressesAsync 引起的 EnyimMemcached 死锁问题...
查看>>
【云计算】监控 告警 怎么做
查看>>
【Linux】为啥查某个进程的线程,查出来的所有线程的pid不一样啊
查看>>
【转载】程序员大牛
查看>>
淘宝首页性能优化实践
查看>>
Linux添加新硬盘自动挂载硬盘
查看>>
WinDbg使用介绍
查看>>
把表单转成json,并且name为key,value为值
查看>>