文章目录
1. 简单使用Mybatsi注解
myBatisConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://www.mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--可进行外部加载数据库的信息 -->
<!-- <properties resource=""></properties>-->
<settings>
<!-- 缓存开启 -->
<setting name="cacheEnabled" value="true"/>
<!-- 懒加载开关 启动 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 按需加载 - 关联的sql懒运行 -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<typeAliases>
<package name="top.linruchang.domain"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/graduation_design?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 重要:class时 -->
<mappers>
<!-- class扫描某个具体的接口 -->
<mapper class="top.linruchang.dao.UserDao"/>
<!--扫描某个包下的所有dao接口 -->
<!-- <package name="top.linruchang.dao"/> -->
</mappers>
</configuration>
User.java
public class User {
Integer id;
Integer role_id;
String loginName;
String password;
String nickname;
String headImg;
}
userDao.java
// 如果有spring,直接这里添加注解@Mapper
public interface UserDao {
@Select("select * from ums_user where id = #{id}")
public User findById(Integer id);
}
2. @Results、@Result 等价于 resultMap标签 – @ResultMap 等价于 resultMap属性
userDao.java
public interface UserDao {
// 自定义映射类型映射
@Select("select * from ums_user where id = #{id}")
@Results(
id = "userMap",
value = {
@Result(property = "user_id", column = "id"),
@Result(property = "role_id", column = "role_id"),
@Result(property = "loginName", column = "loginName"),
@Result(property = "password", column = "password"),
@Result(property = "nickname", column = "nickname"),
@Result(property = "headImg", column = "headImg"),
}
)
public User findById(Integer id);
// 引用上面的@Results自定义映射
@Select("select * from ums_user")
@ResultMap("userMap")
public List<User> findAll();
}
3. 一对一的关系映射 @one
我的表设计为一个用户仅有一个角色
UmsRole.java
public class UmsRole {
Integer id;
String name;
String describe;
}
Ums.java
public class User {
Integer user_id;
Integer role_id;
String loginName;
String password;
String nickname;
String headImg;
UmsRole role;
}
RoleDao.java
public interface RoleDao {
@Select("select * from ums_user_role where id = #{user_id}")
public UmsRole findById(Integer role_Id);
}
UserDao.java
public interface UserDao {
//FetchType.EAGER表示立即加载
@Select("select * from ums_user where id = #{id}")
@Results(
id = "userMap",
value = {
@Result(property = "user_id", column = "id"),
@Result(property = "role_id", column = "role_id"),
@Result(property = "loginName", column = "loginName"),
@Result(property = "password", column = "password"),
@Result(property = "nickname", column = "nickname"),
@Result(property = "headImg", column = "headImg"),
@Result(property = "role", column = "role_id", javaType = UmsRole.class, one = @One(select="top.linruchang.dao.RoleDao.findById", fetchType = FetchType.EAGER)),
}
)
public User findById(Integer id);
@Select("select * from ums_user")
@ResultMap("userMap")
public List<User> findAll();
}
4. 一对多的关系映射 @many
User.java
public class User {
Integer user_id;
Integer role_id;
String loginName;
String password;
String nickname;
String headImg;
UmsRole role;
List<OmsOrder> orders;
}
OmsOrder.java
public class OmsOrder {
Integer id;
Integer user_id;
Integer transactionId;
short order_status;
short pay_status;
Integer total_money;
Date create_time;
User user;
}
OrderDao.java
public interface OrderDao {
@Select("select * from oms_order_master where user_id = #{user_id}")
public List<OmsOrder> findByUserId(Integer user_idJ);
}
UserDao.java
public interface UserDao {
//FetchType.LAZY: 懒加载 FetchType.EAGER:立即加载
@Select("select * from ums_user where id = #{id}")
@Results(
id = "userMap",
value = {
@Result(property = "user_id", column = "id"),
@Result(property = "role_id", column = "role_id"),
@Result(property = "loginName", column = "loginName"),
@Result(property = "password", column = "password"),
@Result(property = "nickname", column = "nickname"),
@Result(property = "headImg", column = "headImg"),
@Result(property = "role", column = "role_id", javaType = UmsRole.class, one = @One(select="top.linruchang.dao.RoleDao.findById", fetchType = FetchType.EAGER)),
@Result(property = "orders", column = "id", javaType = List.class, many = @Many(select = "top.linruchang.dao.OrderDao.findByUserId", fetchType = FetchType.LAZY)),
}
)
public User findById(Integer id);
}