1.延遲加載和立即加載
public class AccountTest { private InputStream in; private SqlSessionFactory factory; private SqlSession session; private IAccountDao accountDao; @Before public void init()throws Exception{ in = Resources.getResourceAsStream("SqlMapConfig.xml"); factory = new SqlSessionFactoryBuilder().build(in); session = factory.openSession(); accountDao = session.getMapper(IAccountDao.class); } @After public void destroy()throws Exception{ session.commit(); session.close(); in.close(); } @Test public void testFindAll(){ List<Account> accounts = accountDao.findAll(); for(Account account : accounts){ System.out.println("----每個賬戶的信息-----"); System.out.println(account); System.out.println(account.getUser()); } }
public class AnnotationCRUDTest { private InputStream in; private SqlSessionFactory factory; private SqlSession session; private IUserDao userDao; @Before public void init()throws Exception{ in = Resources.getResourceAsStream("SqlMapConfig.xml"); factory = new SqlSessionFactoryBuilder().build(in); session = factory.openSession(); userDao = session.getMapper(IUserDao.class); } @After public void destroy()throws Exception{ session.commit(); session.close(); in.close(); } @Test public void testFindAll(){ List<User> users = userDao.findAll(); for(User user : users){ System.out.println("---每個用戶的信息----"); System.out.println(user); System.out.println(user.getAccounts()); } } @Test public void testFindOne(){ User user = userDao.findById(57); System.out.println(user); } @Test public void testFindByName(){ List<User> users = userDao.findUserByName("%mybatis%"); for(User user : users){ System.out.println(user); } } }
public class Account implements Serializable { private Integer id; private Integer uid; private Double money; //多對一(mybatis中稱之爲一對一)的映射:一個賬戶只能屬於一個用戶 private User user; } public class User implements Serializable{ private Integer userId; private String userName; private String userAddress; private String userSex; private Date userBirthday; //一對多關係映射:一個用戶對應多個賬戶 private List<Account> accounts; }
public interface IAccountDao { /** * 查詢所有賬戶,並且獲取每個賬戶所屬的用戶信息 * @return */ @Select("select * from account") @Results(id="accountMap",value = { @Result(id=true,column = "id",property = "id"), @Result(column = "uid",property = "uid"), @Result(column = "money",property = "money"), @Result(property = "user",column = "uid",one=@One(select="com.itheima.dao.IUserDao.findById",fetchType= FetchType.EAGER)) }) List<Account> findAll(); /** * 根據用戶id查詢賬戶信息 * @param userId * @return */ @Select("select * from account where uid = #{userId}") List<Account> findAccountByUid(Integer userId); }
@CacheNamespace(blocking = true) public interface IUserDao { /** * 查詢所有用戶 * @return */ @Select("select * from user") @Results(id="userMap",value={ @Result(id=true,column = "id",property = "userId"), @Result(column = "username",property = "userName"), @Result(column = "address",property = "userAddress"), @Result(column = "sex",property = "userSex"), @Result(column = "birthday",property = "userBirthday"), @Result(property = "accounts",column = "id", many = @Many(select = "com.itheima.dao.IAccountDao.findAccountByUid", fetchType = FetchType.LAZY)) }) List<User> findAll(); /** * 根據id查詢用戶 * @param userId * @return */ @Select("select * from user where id=#{id} ") @ResultMap("userMap") User findById(Integer userId); /** * 根據用戶名稱模糊查詢 * @param username * @return */ @Select("select * from user where username like #{username} ") @ResultMap("userMap") List<User> findUserByName(String username); }
public class SecondLevelCatchTest { private InputStream in; private SqlSessionFactory factory; @Before public void init()throws Exception{ in = Resources.getResourceAsStream("SqlMapConfig.xml"); factory = new SqlSessionFactoryBuilder().build(in); } @After public void destroy()throws Exception{ in.close(); } @Test public void testFindOne(){ SqlSession session = factory.openSession(); IUserDao userDao = session.getMapper(IUserDao.class); User user = userDao.findById(49); System.out.println(user); session.close();//釋放一級緩存 SqlSession session1 = factory.openSession();//再次打開session IUserDao userDao1 = session1.getMapper(IUserDao.class); User user1 = userDao1.findById(49); System.out.println(user1); session1.close(); } }