mybatis一对一级联

商品和商品类别一对一级联,注:此处只是做一对一关联的一个例子,请勿在乎表的设计缺陷。

1.pojo类如下 

/**
*商品表
*/
public class Commodity {
	//主键
	private Long id;
	//商品名称
	private String commodity_name;
	//商品价格
	private Double price;
	//商品类别
	private CommodityType commodityType = null;
	//商品排序
	private Long sort;
    
    /**setter   and   getter**/
}

 

/**
*类别表
*/
public class CommodityType {
    //类别id
	private Long id;
    //类别名称
	private String commodity_type_name;
    /** setter   and   gette **/
}

2.接口dao

package xuexi.mybatis.dao.mapper;

import xuexi.mybatis.pojo.CommodityType;
/**
*商品类别接口
*/
public interface CommodityTypeMapper {
    //根据类别ID获取类别信息
	public CommodityType getCommodityType(Long id);
}
package xuexi.mybatis.dao.mapper;

import java.util.List;

import xuexi.mybatis.pojo.Commodity;
/**
*商品接口
*/

public interface CommodityMapper {
    //获取商品列表
	
	public List<Commodity> getCommodityList();
}

 3.mybatis主配置文件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">
<configuration>
	<typeAliases><!-- 别名 -->
		<!-- <typeAlias alias="user" type = "xuexi.mybatis.pojo.User"/> -->
		<!-- 扫描此包下别名 -->
		<package name="xuexi.mybatis.pojo"/>
	</typeAliases>
	<!-- 数据库环境 -->
	<environments default = "development">
		<!-- 描述数据库 -->
		<environment id="development">
			<!-- 配置事务管理 -->
			<transactionManager type="JDBC"  />
			<!--配置数据库  type="POOLED" 代表采用mybatis内部提供的连接池方式  -->
			<dataSource type="POOLED">
				<property name = "driver"  value="com.mysql.jdbc.Driver"  />
				<property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
				<property name="username" value="root"/>
				<property name="password" value="123456"/>
			</dataSource>
		</environment>
	</environments>
	<!--引入  映射器xml创建文件  -->
	<mappers>
		<package name="xuexi.mybatis.dao.mapper"/>
	</mappers>
</configuration>

 4.mybatis映射器配置文件

商品类别CommodityTypeMapper.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对应的是接口全限定名称   于是mybatis上下文就通过它找到对应的接口-->
<mapper namespace="xuexi.mybatis.dao.mapper.CommodityTypeMapper">
	<!-- getCommodityType和接口名称必须一样, resultType结果集返回的类型,参数类型parameterType-->
	<select id="getCommodityType" resultType="commodityType"   parameterType="long" >
		select id,commodity_type_name from commodity_type where   id = #{commodity_type_id}
	</select>
</mapper>

商品CommodityMapper.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对应的是接口全限定名称   于是mybatis上下文就通过它找到对应的接口-->
<mapper namespace="xuexi.mybatis.dao.mapper.CommodityMapper">
	<!-- id代表resultMap标识,type要映射的pojo -->
	<resultMap id="commodityTypeMap" type="commodity">
		<!-- 主键,property映射到pojo类的实体或者属性,column对应数据库表SQL的列 -->
		<id property="id" column="id"  ></id>
		<result property="commodity_name" column="commodity_name"/>
		<result property="price" column="price"/>
		<result property="sort" column="sort"/>
		<!-- association一对一级联 -->
		<!-- property属性代表映射到POJO属性上。select配置是命名空间+SQL id的形式,这样便可以指向
		对应Mapper的SQL,Mybatis就会通过对应的SQL将数据查询回来。column代表SQL的列,用作参数传递给
		select属性制定的SQL,如果是多个参数,则需要用逗号隔开。-->
		<association property="commodityType"  column="commodity_type_id" 
		select="xuexi.mybatis.dao.mapper.CommodityTypeMapper.getCommodityType"/>
	</resultMap>
	<select id = "getCommodityList" resultType="commodity" resultMap="commodityTypeMap">
		select id,commodity_name,price,sort,commodity_type_id from commodity 
	</select>
</mapper>
	

 5.工具类

package utils;

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 SqlSessionFactoryUtils {
	private final static Class<SqlSessionFactoryUtils> LOCK = SqlSessionFactoryUtils.class;
	private static SqlSessionFactory sqlSesssionFactory = null;
	//构造方法加入了private 关键字,使得其他代码不能通过new的方式来创建它
	private SqlSessionFactoryUtils(){}
	public static SqlSessionFactory getSqlSessionFactory(){
		//synchronized关键字防止多线程中多次实例化SqlSessionFactory对象,从而保证SqlSessionFactory的唯一性
		synchronized ( LOCK ){
			if( sqlSesssionFactory != null){
				return sqlSesssionFactory;
			}
		}
		String resouce = "mybatis-config.xml";
		InputStream inputStream;
		try {
			inputStream = Resources.getResourceAsStream(resouce);
			sqlSesssionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
		return null;
	}
	/**
	 * 创建SqlSession
	 * @return
	 */
	public static SqlSession openSqlSession(){
		if(sqlSesssionFactory == null){
			getSqlSessionFactory();
		}
		return sqlSesssionFactory.openSession();
	}
}

6.测试

public class Test{
	public static void main(String[] args) {
		test1();
	}

	public static void test1(){
		SqlSession sqlSession = null;
		try {
			sqlSession = SqlSessionFactoryUtils.openSqlSession();
			CommodityMapper commodityMapper = sqlSession.getMapper(CommodityMapper.class);
			List<Commodity> li = commodityMapper.getCommodityList();
			for (Commodity commodity : li) {
				System.out.println(commodity);
			}
		}finally {
			if(sqlSession != null){
				sqlSession.close();
			}
		}
	}
}

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值