创建以mybatis为基础的web项目(2)mabitis中的一对一关系项目实战
1.首先根據創建以mybatis為基礎的web項目(1)中的流程將web項目部署好
-
- com.pojo:存放數據庫表對應的實體類
- com.imp:存放接口類
- com.test:存放測試類
- com.util:存放工具類(最好寫成靜態方法,可以用類點方法的方式調用方法)
- 目錄結構如下圖所示:
-
?
-
?
?
?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 @Override 23 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 @Override 31 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<Person> sqlall(); 10 11 } IPerson.java?
?再寫對應的xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > 3 <!-- namespace:命名空間, 用于隔離sql語句 --> 4 <mapper namespace="com.imp.IPerson"> 5 <!-- id是sql語句的唯一標識符,名字要與 接口中的方法名相同 --> 6 <select id="sqlall" resultMap="test"> 7 SELECT 8 t_person.id, 9 t_person.`name`, 10 t_person.cid, 11 t_card.id, 12 t_card.cardid 13 FROM 14 t_card 15 INNER JOIN t_person ON t_person.cid = t_card.id 16 </select> 17 <resultMap type="person" id="test"> 18 <id column="id" property="id" /> 19 <result column="name" property="name" /> 20 <!-- association 是一對一映射關系使用的標簽 --> 21 <association property=""></association> 22 <association property="card" javaType="card"> 23 <id column="cid" property="id" /> 24 <result column="cardid" property="cardid" /> 25 </association> 26 </resultMap> 27 28 </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文件要映射,那不是要寫很多,這里只寫一句就夠了。
1 <!-- 取別名 --> 2 <typeAliases> 3 <package name="com.pojo"/> 4 </typeAliases> 5 <!-- 添加映射文件 --> 6 <mappers> 7 <package name="com.imp"/> 8 </mappers> 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<Person> 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
總結
以上是生活随笔為你收集整理的创建以mybatis为基础的web项目(2)mabitis中的一对一关系项目实战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ThinkPHP5下自己写日志
- 下一篇: 深度揭秘:大数据时代企业卖技术还是卖数据