Mybatis 接口方式對數據的增刪改查 一對一關聯查詢


數據庫中有兩個表 student 和studentInfo 

 

student表中的字段和數據

 

studentInfo表中的字段

 

ok數據庫說完了,開始建立一個項目,對數據庫中的數據進行操作吧

新建java項目,將mybatis的jar包和oracle數據庫的訪問包導入

 

建立幾個需要用的包 entities, dao,util , test建立映射文件(.xml)和db.properties文件

db.properties:

 

 

mybatis-config.xml:

<?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">
<!-- mybatis配置的根標簽 -->
<configuration>
    <properties resource="db.properties"></properties>
    <!--自動掃描實體類 -->
    <typeAliases>
        <package name="com.maya.entities" />
    </typeAliases>

    <!--default等於那個就執行那個 -->
    <environments default="test">
        <environment id="test">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}" />
                <property name="url" value="${jdbc}" />
                <property name="username" value="${user}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>

<!-- 映射 -->
    <mappers>
        <package name="com.maya.dao" />
    </mappers>
</configuration>

這樣,mybatis的配置文件配置完成,接下來寫util文件(SqlSessionFactory)

package com.maya.util;

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 SqlSessionUtil {

    private static SqlSessionFactory sessionFactory;
    private static SqlSession session;
    
    public static SqlSession getSqlSession(){
        InputStream input=null;
        try {
            input=Resources.getResourceAsStream("mybatis-config.xml");
            sessionFactory=new SqlSessionFactoryBuilder().build(input);
            session=sessionFactory.openSession();
            input.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return session;
    }
}

接下來寫實體類:需要注意的是,如果我們需要查student,需要把studentInfo表中的數據一起查出來的話,需要寫出對應的關系;(篇幅原因,get/set和構造函數就不貼進來了)

Student

package com.maya.entities;

public class Student {
    private StudentInfo studentInfo;    //studentInfo的實體類
    private String sname;
    private String ssex;
    private Integer sclass;
    private Integer mark;
}

StudentInfo

package com.maya.entities;

import java.sql.Date;

public class StudentInfo {
    
    private Integer id;
    private Integer sno;
    private String saddress;
    private Date sbirthday;
}

實體類建立完成,接下來寫接口,和xml文件

package com.maya.dao;

import java.util.List;

import com.maya.entities.StudentInfo;

public interface StudentInfoMapper {

    //查詢所有
    public List<StudentInfo> select();
    
    //根據sno查詢
    public StudentInfo selectbysno();
}
<?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.maya.dao.StudentInfoMapper">
  <!-- 查詢整個studentInfo表 -->
      <select id="select" resultType="studentInfo">
          select * from studentinfo
      </select>
  </mapper>

建立一個junit測試用例

package com.maya.test;

import static org.junit.Assert.*;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.maya.dao.StudentInfoMapper;
import com.maya.entities.StudentInfo;
import com.maya.util.SqlSessionUtil;

public class TestJunit {

    private SqlSession session;
    private StudentInfoMapper sim;
    @Before
    public void setUp() throws Exception {
        //獲取sqlsession 和StudentInfoMapper
        session=SqlSessionUtil.getSqlSession();
        sim=session.getMapper(StudentInfoMapper.class);
    }

    @After
    public void tearDown() throws Exception {
        session.commit();        //提交
        session.close();        //關閉
    }

    @Test
    public void test() {
        List<StudentInfo> list=sim.select();
        for(StudentInfo info:list){
            System.out.println(info);
        } 
    }
}

執行結果如下

說明我們前面配置的沒有問題

建立Student接口和配置文件

package com.maya.dao;

import java.util.List;
import java.util.Map;

import com.maya.entities.Student;

public interface StudentMapper {
    //查詢出所有
    public List<Student> select();
    //多條件查詢
    public List<Student> select(Map<String,Object> map);
    
}
<?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.maya.dao.StudentMapper">    <!--接口的限定名  -->
    
    <resultMap type="student" id="list">
        <association property="studentInfo" column="sno" select="com.maya.dao.StudentInfoMapper.selectbysno"/>
    </resultMap>
  
  <select id="select" resultMap="list">    <!--返回的值不是單一的表的值時用Map  -->
  select * from student s join studentinfo si on s.sno=si.sno
  </select>
  </mapper>

junit測試:

package com.maya.test;

import static org.junit.Assert.*;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.maya.dao.StudentInfoMapper;
import com.maya.dao.StudentMapper;
import com.maya.entities.Student;
import com.maya.entities.StudentInfo;
import com.maya.util.SqlSessionUtil;

public class TestJunit {

    private SqlSession session;
    private StudentInfoMapper sim;
    private StudentMapper sdm;
    @Before
    public void setUp() throws Exception {
        //獲取sqlsession 和StudentInfoMapper
        session=SqlSessionUtil.getSqlSession();
        sim=session.getMapper(StudentInfoMapper.class);
        sdm=session.getMapper(StudentMapper.class);
    }

    @After
    public void tearDown() throws Exception {
        session.commit();        //提交
        session.close();        //關閉
    }

    @Test
    public void test() {
        List<Student> list=sdm.select();
        for(Student stu:list){
            System.out.println(stu);
        }
    

//        List<StudentInfo> list=sim.select();
//        for(StudentInfo info:list){
//            System.out.println(info);
//        }
//        
        
    }

}

結果如下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM