<setting name="cacheEnabled" value="true"/>
mapper中的类要序列化
package pojo;
import java.io.Serializable;
import java.util.List;
/**
* 这个类用来封装user_info表的数据
*/
public class UserInfo implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private int id;
//用户名
private String userName;
//住址
private String userAddr;;
//年龄
private int userAge;
//声明与用户有一对一关系的UserExtra
private UserExtra userExtra;
//绑定与用户有一对多关系的orders
private List<Orders> orders;
//getters and setters
public List<Orders> getOrders() {
return orders;
}
public void setOrders(List<Orders> orders) {
this.orders = orders;
}
public UserExtra getUserExtra() {
return userExtra;
}
public void setUserExtra(UserExtra userExtra) {
this.userExtra = userExtra;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserAddr() {
return userAddr;
}
public void setUserAddr(String userAddr) {
this.userAddr = userAddr;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
@Override
public String toString() {
return "UserInfo [id=" + id + ", userName=" + userName + ", userAddr=" + userAddr + ", userAge=" + userAge
+ ", userExtra=" + userExtra + ", orders=" + orders + "]";
}
}
package pojo;
import java.io.Serializable;
/**
*这是用户的扩展表
*这个类用来封装user_extra表的数据
*/
public class UserExtra implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
//id
private int id;
//工作
private String work;
//薪水
private double salary;
//用户id
private int userId;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getWork() {
return work;
}
public void setWork(String work) {
this.work = work;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
@Override
public String toString() {
return "UserExtra [id=" + id + ", work=" + work + ", salary=" + salary + ", userId=" + userId + "]";
}
}
package pojo;
import java.io.Serializable;
/**
*订单对象
*这个类用来封装orders表
*/
public class Orders implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
//id
private int id;
//用户id
private int userId;
//订单号
private int orderNo;
//订单描述
private String orderDesc;
//订单金额
private Double price;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public int getOrderNo() {
return orderNo;
}
public void setOrderNo(int orderNo) {
this.orderNo = orderNo;
}
public String getOrderDesc() {
return orderDesc;
}
public void setOrderDesc(String orderDesc) {
this.orderDesc = orderDesc;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
@Override
public String toString() {
return "Orders [id=" + id + ", userId=" + userId + ", orderNo=" + orderNo + ", orderDesc=" + orderDesc
+ ", price=" + price + "]";
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!--xml约束信息 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--引入数据源的配置文件 resource指定文件的位置 -->
<properties resource="db.properties"></properties>
<settings>
<!--开启驼峰命名规则-->
<setting name="mapUnderscoreToCamelCase" value="true" />
<!--开启二级缓存-->
<setting name="cacheEnabled" value="true"/>
</settings>
<!-- 设置别名 -->
<typeAliases>
<typeAlias type="pojo.UserInfo" alias="UserInfo" />
</typeAliases>
<!-- 配置开发环境 ,default用来设置默认的开发环境 -->
<environments default="test">
<!--测试环境 -->
<environment id="test">
<!--事务管理器:mybatis的事务交个jdbc处理 -->
<transactionManager type="jdbc"></transactionManager>
<!--连接池:配置数据源,连接池 -->
<dataSource type="pooled">
<!--数据库驱动的名字 -->
<property name="driver" value="${driver}" />
<!-- 数据库的url地址 -->
<property name="url" value="${url}" />
<!-- 数据库的用户名 -->
<property name="username" value="${username}" />
<!-- 数据库的密码 -->
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!--引入映射文件 -->
<mappers>
<!--引入UserMapper文件 resource指定文件的位置 -->
<mapper resource="mapper/UserInfoMapper.xml" />
</mappers>
</configuration>
SqlSessionFactory ssf = null;
// 创建sqlsessionFactory工厂
@Before
public void init() {
try {
InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
ssf = new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
e.printStackTrace();
}
}
// 测试一对一的关系
@Test
public void associtation() {
// 创建sqlsession,执行SQL
SqlSession session = ssf.openSession();
//利用接口开发
UserInfoDao dao = session.getMapper(UserInfoDao.class);
//调用接口里的方法
UserInfo info=dao.findExtraByUser(1);
//调用接口里的方法,把数据放入缓存中,从一级缓存中取
UserInfo info2=dao.findExtraByUser(1);
// 处理结果
System.out.println("1========"+info);
System.out.println("2========"+info2);
// 释放资源
session.close();
//测试二级缓存
session=ssf.openSession();
UserInfoDao dao2=session.getMapper(UserInfoDao.class);
UserInfo info3=dao2.findExtraByUser(1);
System.out.println("3========"+info3);
session.close();
}
sql只查询了一次
DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - Cache Hit Ratio [dao.UserInfoDao]: 0.0
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 990398217.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@3b084709]
DEBUG [main] - ==> Preparing: SELECT * FROM user_info t1,user_extra t2 WHERE t1.id=t2.user_id AND t1.id=?
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <== Total: 1
DEBUG [main] - Cache Hit Ratio [dao.UserInfoDao]: 0.0
1========UserInfo [id=1, userName=韩梅梅, userAddr=上海, userAge=20, userExtra=UserExtra [id=1, work=程序员, salary=100000.0, userId=1], orders=null]
2========UserInfo [id=1, userName=韩梅梅, userAddr=上海, userAge=20, userExtra=UserExtra [id=1, work=程序员, salary=100000.0, userId=1], orders=null]
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@3b084709]
DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@3b084709]
DEBUG [main] - Returned connection 990398217 to pool.
DEBUG [main] - Cache Hit Ratio [dao.UserInfoDao]: 0.3333333333333333
3========UserInfo [id=1, userName=韩梅梅, userAddr=上海, userAge=20, userExtra=UserExtra [id=1, work=程序员, salary=100000.0, userId=1], orders=null]