Mybatis通过接口实现一对一及一对多的查询

  实现一对一是采用association方法:

<resultMap type="testId" id="users">
		<association property="major" column="major" select="com.dao.MajorMapper.selectbyid"></association>
	</resultMap>

  实现一对多是采用collection方法:

<resultMap type="major" id="major">
		<id property="id" column="id"/>
		<collection property="testids" column="id" select="com.dao.UserMapper.selectid"></collection>
	</resultMap>

  下面进行实例:

 

  定义三个表及数据:

 

  可以看到testinfo表里定义一个id列对应test表里的id主键,是一对一的关系。并且这里为了测试,只给81和141的id设置testinfo信息。major表里是专业名称,是个一对多的关系。

  1.定义mybatis配置文件

  

<?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">
  
  <configuration>
  	<properties resource="db.properties"></properties>
  	<typeAliases>
  		<package name="com.model"/>
  	</typeAliases>
  	
  	<environments default="development">
  		<environment id="development">
  			<transactionManager type="JDBC" />
  			<dataSource type="POOLED">
  				<property name="username" value="${jdbc.username}"/>
  				<property name="password" value="${jdbc.password}"/>
  				<property name="url" value="${jdbc.url}"/>
  				<property name="driver" value="${jdbc.driverClass}"/>
  			</dataSource>
  			
  		</environment>
  	</environments>
  	
  	<mappers>
  		<!-- <mapper resource="com/dao/UserMapper.xml"/> -->
  		<package name="com.dao"/>
  	</mappers>
  </configuration>

  

jdbc.username=root
jdbc.password=123
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.driverClass=oracle.jdbc.OracleDriver

  

  2.定义实体类:

package com.model;
// Generated 2017-4-19 10:19:42 by Hibernate Tools 5.2.0.CR1

import java.math.BigDecimal;

import org.apache.ibatis.type.Alias;

/**
 * TestId generated by hbm2java
 */
public class TestId {

	private BigDecimal id;
	private String username;
	private String password;
	private Major major;

	
	public Major getMajor() {
		return major;
	}

	public void setMajor(Major major) {
		this.major = major;
	}

	public TestId() {
	}

	

	public BigDecimal getId() {
		return this.id;
	}

	public void setId(BigDecimal id) {
		this.id = id;
	}

	public String getUsername() {
		return this.username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return this.password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public boolean equals(Object other) {
		if ((this == other))
			return true;
		if ((other == null))
			return false;
		if (!(other instanceof TestId))
			return false;
		TestId castOther = (TestId) other;

		return ((this.getId() == castOther.getId())
				|| (this.getId() != null && castOther.getId() != null && this.getId().equals(castOther.getId())))
				&& ((this.getUsername() == castOther.getUsername()) || (this.getUsername() != null
						&& castOther.getUsername() != null && this.getUsername().equals(castOther.getUsername())))
				&& ((this.getPassword() == castOther.getPassword()) || (this.getPassword() != null
						&& castOther.getPassword() != null && this.getPassword().equals(castOther.getPassword())));
	}

	public int hashCode() {
		int result = 17;

		result = 37 * result + (getId() == null ? 0 : this.getId().hashCode());
		result = 37 * result + (getUsername() == null ? 0 : this.getUsername().hashCode());
		result = 37 * result + (getPassword() == null ? 0 : this.getPassword().hashCode());
		return result;
	}

	@Override
	public String toString() {
		return "TestId [id=" + id + ", username=" + username + ", password=" + password + ", major=" + major + "]";
	}

	public TestId(BigDecimal id, String username, String password, Major major) {
		super();
		this.id = id;
		this.username = username;
		this.password = password;
		this.major = major;
	}

	
	

}

  

package com.model;

import java.util.Date;

public class TestInfo {
	private Integer ids;
	private TestId testId;
	private String address;
	private Date birthday;
	public Integer getIds() {
		return ids;
	}
	public void setIds(Integer ids) {
		this.ids = ids;
	}
	public TestId getTestId() {
		return testId;
	}
	public void setTestId(TestId testId) {
		this.testId = testId;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public TestInfo(Integer ids, TestId testId, String address, Date birthday) {
		super();
		this.ids = ids;
		this.testId = testId;
		this.address = address;
		this.birthday = birthday;
	}
	public TestInfo() {
		super();
	}
	@Override
	public String toString() {
		return "TestInfo [ids=" + ids + ", testId=" + testId + ", address=" + address + ", birthday=" + birthday + "]";
	}
	
}

  

package com.model;

import java.util.List;

public class Major {
	private Integer id;
	private String code;
	private String name;
	private List<TestId> testids;
	
	public List<TestId> getTestids() {
		return testids;
	}
	public void setTestids(List<TestId> testids) {
		this.testids = testids;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Major(Integer id, String code, String name, List<TestId> testids) {
		super();
		this.id = id;
		this.code = code;
		this.name = name;
		this.testids = testids;
	}
	public Major() {
		super();
	}
	@Override
	public String toString() {
		return "Major [id=" + id + ", code=" + code + ", name=" + name + ", testids=" + testids.size() + "]";
	}
	
	
}

  3.定义一个mybatis的工具类,获取mybatis核心sqlsessionfactory

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;

/**
 * mybatis工具类
 * @author Administrator
 *
 */
public class MybatisUtil {
	private static SqlSessionFactory ssf;
	private static SqlSession ss;
	
	/**
	 * 获取mybatis核心sqlsessionfactory
	 * @return
	 */
	private static SqlSessionFactory getSqlSessionFctory(){
		InputStream it = null;
		
		try {
			it = Resources.getResourceAsStream("mybatis-config.xml");
			ssf= new SqlSessionFactoryBuilder().build(it);
			ss=ssf.openSession();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return ssf;
	}
	/**
	 * 获取sqlsession
	 * @return
	 */
	public static SqlSession getSqlSession(){
		ss= getSqlSessionFctory().openSession();
		return ss;
		
	}
	public static void main(String[] args){
		System.out.println(getSqlSession());
	}
}

  4.定义接口

package com.dao;

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

import com.model.Major;
import com.model.TestId;

public interface UserMapper {
	/*public Integer add(TestId ti);
	
	public Integer delete(Integer id);
	
	public Integer update(TestId ti);
	*/
	public TestId select(Integer id);
	
	public List<TestId> selectlist(Map<String, Object> map);
	
	public List<TestId> selectid(Integer major);
}

  

package com.dao;

import java.util.List;

import com.model.TestInfo;

public interface UserInfoMapper {
	public List<TestInfo> select();
}

  

package com.dao;

import java.util.List;

import com.model.Major;

/**
 * 专业表操作
 * @author Administrator
 *
 */
public interface MajorMapper {
	public List<Major> selectAll();
	
	public Major selectbyid(Integer id);
}

  5.定义每个实体类的映射方法

<?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.dao.UserMapper">

	<resultMap type="testId" id="users">
		<association property="major" column="major" select="com.dao.MajorMapper.selectbyid"></association>
	</resultMap>
	
	

	<!-- <insert id="add" parameterType="testId">
		insert into test values(sq_mybatis.nextval,#{username},#{password})
	</insert>
	
	<delete id="delete" parameterType="Integer">
		delete test t where t.id=#{id}
	</delete>
	
	<update id="update" parameterType="testId">
		update test t set t.username=#{username},t.password=#{password} where t.id=#{id}
	</update> -->
	
	<select id="select" parameterType="Integer" resultMap="users">
		select * from test t where t.id=#{id}
	</select>
	
	<select id="selectlist" parameterType="Map" resultMap="users">
		select * from test t where t.username like #{username} and t.password like #{password}
	</select>
	
	<select id="selectid" parameterType="Integer" resultMap="users">
		select * from test t where t.major=#{major}
	</select>
	
	
</mapper>

  

<?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.dao.UserInfoMapper">
  <!-- 一对一级连查询方法1 -->
  	<resultMap type="testInfo" id="userslist">
  		<id property="ids" column="ids"/>
  		
  		<result property="testId.id" column="id"/>
  		<result property="testId.username" column="username"/>
  		<result property="testId.password" column="password"/>
  		
  		<result property="address" column="address"/>
  		<result property="birthday" column="birthday"/>
  	</resultMap>
  	<!-- 一对一级连查询方法2 -->
  	<resultMap type="testInfo" id="userlist">
  		<association property="testId" column="id" select="com.dao.UserMapper.select"></association>
  	</resultMap>
  	
  	<select id="select" resultMap="userslist">
  		select * from testinfo ti left join test t on ti.id=t.id
  	</select>
  </mapper>

  

<?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.dao.MajorMapper">
	<!-- 一对多的查询方法 -->
	<resultMap type="major" id="major">
		<id property="id" column="id"/>
		<collection property="testids" column="id" select="com.dao.UserMapper.selectid"></collection>
	</resultMap>
	<select id="selectAll" resultMap="major">
		select * from major
	</select>
	
	<select id="selectbyid" parameterType="Integer" resultMap="major" >
		select * from major m where m.id=#{id} 
	</select>
</mapper>

  6.定义junit测试文件来进行测试

package com.util;

import static org.junit.Assert.*;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.dao.UserMapper;
import com.model.TestId;

public class Junit {

	private SqlSession ss;
	private UserMapper um;
	
	@Before
	public void setUp() throws Exception {
		ss=MybatisUtil.getSqlSession();
		um=ss.getMapper(UserMapper.class);
	}

	@After
	public void tearDown() throws Exception {
		ss.commit();
		ss.close();
	}

	
	/*public void test() {
		TestId ti = new TestId();
		ti.setUsername("张张柳");
		ti.setPassword("443221");
		//int i =ss.insert("com.dao.UserMapper.add",ti);
		int i=um.add(ti);
		System.out.println(i);
	}
	
	public void test1(){
		int i = um.delete(401);
		System.out.println(i);
	}
	
	public void test2(){
		TestId ti = new TestId();
		ti.setId(new BigDecimal(441));
		ti.setUsername("张张柳2");
		ti.setPassword("443221");
		
		um.update(ti);
	}*/
	
	/**
	 * 查询id为441的所有信息
	 */
	@Test
	public void test3(){
		TestId ti =um.select(441);
		System.out.println(ti);
	}
	
	public void tes4(){
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("username", "张%");
		map.put("password", "%2%");
		List<TestId> list =um.selectlist(map);
		for(TestId ti:list){
			System.out.println(ti);
		}
		
	}
	/**
	 * 查询major为2的所有数据
	 */
	public void test5(){
		List<TestId> list = um.selectid(2);
		for(TestId ti:list){
			System.out.println(ti);
		}
	}

}

  

package com.util;

import static org.junit.Assert.*;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.dao.UserInfoMapper;
import com.dao.UserMapper;
import com.model.TestId;
import com.model.TestInfo;

public class Junit2 {

	private SqlSession ss;
	private UserInfoMapper um;
	
	@Before
	public void setUp() throws Exception {
		ss=MybatisUtil.getSqlSession();
		um=ss.getMapper(UserInfoMapper.class);
	}

	@After
	public void tearDown() throws Exception {
		ss.commit();
		ss.close();
	}

	@Test
	public void test() {
		List<TestInfo> list = um.select();
		for(TestInfo ti :list){
			System.out.println(ti);
		}
	}
	
	

}

  

package com.util;

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.dao.MajorMapper;
import com.model.Major;
import com.model.TestInfo;

public class Junit3 {
	private SqlSession ss;
	private MajorMapper mm;
	
	@Before
	public void setUp() throws Exception {
		ss=MybatisUtil.getSqlSession();
		mm=ss.getMapper(MajorMapper.class);
	}

	@After
	public void tearDown() throws Exception {
		ss.commit();
		ss.close();
	}

	@Test
	public void test2(){
		Major m = mm.selectbyid(2);
		System.out.println(m);
	}
	public void test() {
		List<Major> list = mm.selectAll();
		for(Major ti :list){
			System.out.println(ti);
		}
	}
	

}

  

 

posted @ 2017-04-22 14:33  Claricre  阅读(998)  评论(0编辑  收藏  举报