pom.xml
- <dependencies>
- <!--mybatis坐标-->
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis</artifactId>
- <version>3.5.4</version>
- </dependency>
- <!--mysql驱动坐标-->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.1.6</version>
- <scope>runtime</scope>
- </dependency>
- <!--单元测试坐标-->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- <!-- <scope>test</scope>-->
- </dependency>
-
-
- </dependencies>
User.java
- //编写实体类 对应映射User表
- public class User implements Serializable {
- private Integer id;
- private String username;
- private Date birthday;
- private String sex;
- private String address;
- private List<Order> orderList;
- // 保存用户角色列表
- private List<Role> roleList;
-
- public User() {
- }
-
- public User(String username, Date birthday, String sex, String address) {
- this.username = username;
- this.birthday = birthday;
- this.sex = sex;
- this.address = address;
- }
-
- public User(Integer id, String username, Date birthday, String sex, String address, List<Order> orderList) {
- this.id = id;
- this.username = username;
- this.birthday = birthday;
- this.sex = sex;
- this.address = address;
- this.orderList = orderList ;
- }
-
- @Override
- public String toString() {
- return "User{" +
- "id=" + id +
- ", username='" + username + '\'' +
- ", birthday=" + birthday +
- ", sex='" + sex + '\'' +
- ", address='" + address + '\'' +
- ", orderList=" + orderList +
- ", roleList=" + roleList +
- '}';
- }
-
- public List<Role> getRoleList() {
- return roleList;
- }
-
- public void setRoleList(List<Role> roleList) {
- this.roleList = roleList;
- }
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getUsername() {
- return username;
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
- public Date getBirthday() {
- return birthday;
- }
-
- public void setBirthday(Date birthday) {
- this.birthday = birthday;
- }
-
- public String getSex() {
- return sex;
- }
-
- public void setSex(String sex) {
- this.sex = sex;
- }
-
- public String getAddress() {
- return address;
- }
-
- public void setAddress(String address) {
- this.address = address;
- }
-
- public List<Order> getOrderList() {
- return orderList;
- }
-
- public void setOrderList(List<Order> orderList) {
- this.orderList = orderList;
- }
- }
Role.java
- package com.qiku.popo;
-
- public class Role {
- private Integer id;
- private String roleNmae;
- private String roleDesc;
-
-
- public Role() {
- }
-
- @Override
- public String toString() {
- return "Role{" +
- "id=" + id +
- ", roleNmae='" + roleNmae + '\'' +
- ", roleDesc='" + roleDesc + '\'' +
- '}';
- }
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getRoleNmae() {
- return roleNmae;
- }
-
- public void setRoleNmae(String roleNmae) {
- this.roleNmae = roleNmae;
- }
-
- public String getRoleDesc() {
- return roleDesc;
- }
-
- public void setRoleDesc(String roleDesc) {
- this.roleDesc = roleDesc;
- }
- }
Order.java
- package com.qiku.popo;
-
- import java.io.Serializable;
- import java.util.Date;
-
- public class Order implements Serializable {
- private Integer id;
- private Date orderTime;
- private double money;
-
- // 表示当前订单属于哪个用户
- private User user;
-
-
- public Order() {
- }
-
- public Order(Integer id, Date orderTime, double money, User user) {
- this.id = id;
- this.orderTime = orderTime;
- this.money = money;
- this.user = user;
- }
-
-
- @Override
- public String toString() {
- return "Order{" +
- "id=" + id +
- ", orderTime=" + orderTime +
- ", money=" + money +
- ", user=" + user +
- '}';
- }
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public Date getOrderTime() {
- return orderTime;
- }
-
- public void setOrderTime(Date orderTime) {
- this.orderTime = orderTime;
- }
-
- public double getMoney() {
- return money;
- }
-
- public void setMoney(double money) {
- this.money = money;
- }
-
- public User getUser() {
- return user;
- }
-
- public void setUser(User user) {
- this.user = user;
- }
- }
UserMapper.java
- package com.qiku.mapper;
-
-
- import com.qiku.popo.Order;
- import com.qiku.popo.User;
- import org.apache.ibatis.annotations.*;
-
- import java.util.List;
-
- @CacheNamespace
- public interface UserMapper {
-
- @Insert("insert into user (username , birthday , sex , address)" + " values (#{username} , #{birthday} , #{sex} , #{address})")
- public void addUser(User user);
-
- @Delete("delete from user where id = #{id}")
- public void deleteUser(Integer id);
-
- @Update("update user set address = #{address} where id = #{id}")
- public void updateUser(User user);
-
- @Select("select * from user")
- public List<User> findAllUser();
-
- @Select("select * from user where id = #{id}")
- public User findUserById(Integer id);
-
- @Select("select * from user")
- @Results({
- @Result(id = true , column = "id" ,property = "id"),
- @Result(column = "username" , property = "username"),
- @Result(column = "birthday" , property = "birthday"),
- @Result(column = "sex" , property = "sex"),
- @Result(column = "address" , property = "address"),
- @Result(property = "orderList" , javaType = List.class , column = "id" , many = @Many(select = "com.qiku.mapper.OrderMapper.findOrderByUid"))
- })
- public List<User> findAllUserWithOrder();
-
-
-
- // 查询所有用户 及其 角色信息
- @Select("select * from user")
- @Results({
- @Result(id = true , column = "id" ,property = "id"),
- @Result(column = "username" , property = "username"),
- @Result(column = "birthday" , property = "birthday"),
- @Result(column = "sex" , property = "sex"),
- @Result(column = "address" , property = "address"),
- @Result(property = "roleList" , javaType = List.class , column = "id" , many = @Many(select = "com.qiku.mapper.RoleMapper.findRoleByUid"))
- })
- public List<User> findAllUserWithRole();
-
-
- }
RoleMapper.java
- public interface RoleMapper {
-
- @Select("select * from sys_role r LEFT JOIN sys_user_role ur on r.id = ur.roleid WHERE ur.userid = #{userId}")
- public List<Role> findRoleByUid(Integer userId);
- }
OrderMapper.java
- public interface OrderMapper {
-
- // 查询所有订单 及 订单的用户信息
- @Select("select * from orders ")
- @Results({
- @Result(id = true , column = "id" ,property = "id"),
- @Result(column = "ordertime" , property = "orderTime"),
- @Result(column = "total" , property = "money"),
- @Result(property = "user" , javaType = User.class , column = "uid" ,
- one = @One(select = "com.qiku.mapper.UserMapper.findUserById" ,
- fetchType = FetchType.EAGER))
- })
- public List<Order> findAllOrderWithUser();
-
- // 根据用户id(uid)查询订单信息
- @Select("select * from orders where uid = #{uid}")
- @Results({
- @Result(id = true , column = "id" , property = "id"),
- @Result(column = "ordertime" , property = "orderTime"),
- @Result(column = "total" , property = "money")
- })
- public List<Order> findOrderByUid(Integer uid);
- }
核心配置文件
SqlMapConfig.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>
- <!-- 加载外部文件-->
- <properties resource="jdbc.properties"/>
- <!-- 控制台打印sql语句-->
- <settings>
- <setting name="logImpl" value="STDOUT_LOGGING"/>
- <!--所有方法都会延迟加载-->
- <!-- <setting name="lazyLoadTriggerMethods" value="toString()"/>-->
-
- <!-- 因为cacheEnabled的取值默认就为true,所以这一步可以省略不配置。
- 为true代表开启二级缓存;为false代表不开启二级缓存。
- -->
- <setting name="cacheEnabled" value="true"/>
- </settings>
- <!-- 配置数据库环境-->
- <environments default="mysql01">
- <environment id="mysql01">
- <transactionManager type="JDBC"></transactionManager>
- <dataSource type="POOLED">
- <property name="driver" value="${jdbc.driver}"/>
- <property name="url" value="${jdbc.url}"/>
- <property name="username" value="${jdbc.username}"/>
- <property name="password" value="${jdbc.password}"/>
- </dataSource>
- </environment>
- </environments>
-
- <!-- 加载映射文件-->
- <mappers>
- <!-- resource ; 属性加载的是 接口的xml文件-->
- <!-- <mapper resource="com/qiku/mapper/UserMapper.xml"/>-->
- <!-- <mapper resource="com/qiku/mapper/OrderMapper.xml"/>-->
-
-
- <!-- class 属性加载的是接口的全路径名-->
- <!-- <mapper class="com.qiku.mapper.UserMapper"/>-->
- <!-- 指定加载包的位置, 推荐-->
- <package name="com.qiku.mapper"/>
- </mappers>
-
- </configuration>
jdbc.properties
- jdbc.driver=com.mysql.jdbc.Driver
- jdbc.url=jdbc:mysql://localhost:3306/mydb03
- jdbc.username=root
- jdbc.password=123456
测试类
UserMapperTEst.java
- package com.qiku.test;
-
- import com.qiku.mapper.UserMapper;
- import com.qiku.popo.User;
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
- import org.junit.Test;
-
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.Date;
- import java.util.List;
-
- public class UserMapperTEst {
-
- @Test
- public void testAddUser() throws IOException {
- InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
- SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
- SqlSession sqlSession = factory.openSession();
- UserMapper mapper = sqlSession.getMapper(UserMapper.class);
-
- User user = new User("关羽" , new Date() , "男" , "蜀国" );
- mapper.addUser(user);
- sqlSession.commit();
-
- }
-
- @Test
- public void testUpdateUser() throws IOException {
- InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
- SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
- SqlSession sqlSession = factory.openSession();
- UserMapper mapper = sqlSession.getMapper(UserMapper.class);
-
- User user = new User("关羽" , new Date() , "男" , "河东" );
- user.setId(4);
- mapper.updateUser(user);
- sqlSession.commit();
-
- }
-
- @Test
- public void testFindAllUser() throws IOException {
- InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
- SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
- SqlSession sqlSession = factory.openSession();
- UserMapper mapper = sqlSession.getMapper(UserMapper.class);
- List<User> userList = mapper.findAllUser();
- System.out.println(userList);
-
- }
-
- @Test
- public void testDeleteUser() throws IOException {
- InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
- SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
- SqlSession sqlSession = factory.openSession();
- UserMapper mapper = sqlSession.getMapper(UserMapper.class);
-
-
- mapper.deleteUser(3);
- sqlSession.commit();
-
- }
-
-
- @Test
- public void testFindAllUserWithOrder() throws IOException {
- InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
- SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
- SqlSession sqlSession = factory.openSession();
- UserMapper mapper = sqlSession.getMapper(UserMapper.class);
-
- List<User> userList = mapper.findAllUserWithOrder();
- for (User u : userList){
- System.out.println(u);
- }
-
- }
-
-
-
- @Test
- public void testFindAllUserWithRole() throws IOException {
- InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
- SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
- SqlSession sqlSession = factory.openSession();
- UserMapper mapper = sqlSession.getMapper(UserMapper.class);
-
- List<User> userList = mapper.findAllUserWithRole();
- for (User u : userList){
- System.out.println(u);
- }
-
- }
-
- }
OrderMapperTest.java
- public class OrderMapperTest {
-
- @Test
- public void testFindAllOrderWithUser() throws IOException {
- InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
- SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
- SqlSession sqlSession = factory.openSession();
- OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);
-
- List<Order> orderList = mapper.findAllOrderWithUser();
- for (Order o : orderList){
- System.out.println(o);
- }
-
- }
- }
LocalCacheTest02.java
- public class LocalCacheTest02 {
- @Test
- public void localCacheTest01() throws IOException {
-
- InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
- SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
- SqlSession sqlSession1 = factory.openSession();
- UserMapper mapper1 = sqlSession1.getMapper(UserMapper.class);
- User userById1 = mapper1.findUserById(1);
- System.out.println("====第一次查询====:" + userById1);
-
- //将结果存入二级缓存
- sqlSession1.commit();
- SqlSession sqlSession2 = factory.openSession();
- UserMapper mapper2 = sqlSession2.getMapper(UserMapper.class);
- User userById2 = mapper2.findUserById(1);
- System.out.println("====第二次查询====:" + userById2);
- }
-
- }
我们在映射文件中通过配置 <resultMap>、<association>、<collection> 来实现复杂关系映射。
使用注解开发后,我们可以使用 @Results、@Result,@One、@Many 注解组合完成复杂关系的配置。
