1.原始方式
/** * 測試使用QueryVo作爲查詢條件 */ @Test public void testFindByVo(){ QueryVo vo = new QueryVo(); User user = new User(); user.setUserName("%王%"); vo.setUser(user); //5.執行查詢一個方法 List<User> users = userDao.findUserByVo(vo); for(User u : users){ System.out.println(u); } } }
public class QueryVo { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
public class User implements Serializable { private Integer userId; private String userName; private String userAddress; private String userSex; private Date userBirthday; }
<?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"> <mapper namespace="com.itheima.dao.IUserDao"> <!-- 配置 查詢結果的列名和實體類的屬性名的對應關係 --> <resultMap id="userMap" type="uSeR"> <!-- 主鍵字段的對應 --> <id property="userId" column="id"></id> <!--非主鍵字段的對應--> <result property="userName" column="username"></result> <result property="userAddress" column="address"></result> <result property="userSex" column="sex"></result> <result property="userBirthday" column="birthday"></result> </resultMap> <!-- 根據queryVo的條件查詢用戶 --> <select id="findUserByVo" parameterType="com.itheima.domain.QueryVo" resultMap="userMap"> select * from user where username like #{user.userName} </select> </mapper>
2.一對一,一對多
public class AccountTest { private InputStream in; private SqlSession sqlSession; private IAccountDao accountDao; @Before//用於在測試方法執行之前執行 public void init()throws Exception{ //1.讀取配置文件,生成字節輸入流 in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.獲取SqlSessionFactory SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); //3.獲取SqlSession對象 sqlSession = factory.openSession(true); //4.獲取dao的代理對象 accountDao = sqlSession.getMapper(IAccountDao.class); } @After//用於在測試方法執行之後執行 public void destroy()throws Exception{ //提交事務 // sqlSession.commit(); //6.釋放資源 sqlSession.close(); in.close(); } /** * 測試查詢所有 */ @Test public void testFindAll(){ List<Account> accounts = accountDao.findAll(); for(Account account : accounts){ System.out.println("--------每個account的信息------------"); System.out.println(account); System.out.println(account.getUser()); } } /** * 測試查詢所有賬戶,同時包含用戶名稱和地址 */ @Test public void testFindAllAccountUser(){ List<AccountUser> aus = accountDao.findAllAccount(); for(AccountUser au : aus){ System.out.println(au); } } }
public class Account implements Serializable { private Integer id; private Integer uid; private Double money; //從表實體應該包含一個主表實體的對象引用 private User user; }
<?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"> <mapper namespace="com.itheima.dao.IAccountDao"> <!-- 定義封裝account和user的resultMap --> <resultMap id="accountUserMap" type="account"> <id property="id" column="aid"></id> <result property="uid" column="uid"></result> <result property="money" column="money"></result> <!-- 一對一的關係映射:配置封裝user的內容--> <association property="user" javaType="user"> <id property="id" column="id"></id> <result column="username" property="username"></result> <result column="address" property="address"></result> <result column="sex" property="sex"></result> <result column="birthday" property="birthday"></result> </association> </resultMap> <!-- 查詢所有 --> <select id="findAll" resultMap="accountUserMap"> select u.*,a.id as aid,a.uid,a.money from account a , user u where u.id = a.uid; </select> <!--查詢所有賬戶同時包含用戶名和地址信息--> <select id="findAllAccount" resultType="accountuser"> select a.*,u.username,u.address from account a , user u where u.id = a.uid; </select> </mapper>
public class UserTest { private InputStream in; private SqlSession sqlSession; private IUserDao userDao; @Before//用於在測試方法執行之前執行 public void init()throws Exception{ //1.讀取配置文件,生成字節輸入流 in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.獲取SqlSessionFactory SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); //3.獲取SqlSession對象 sqlSession = factory.openSession(true); //4.獲取dao的代理對象 userDao = sqlSession.getMapper(IUserDao.class); } @After//用於在測試方法執行之後執行 public void destroy()throws Exception{ //提交事務 // sqlSession.commit(); //6.釋放資源 sqlSession.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()); } } }
public class User implements Serializable { private Integer id; private String username; private String address; private String sex; private Date birthday; //一對多關係映射:主表實體應該包含從表實體的集合引用 private List<Account> accounts; }
<?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"> <mapper namespace="com.itheima.dao.IUserDao"> <!-- 定義User的resultMap--> <resultMap id="userAccountMap" type="user"> <id property="id" column="id"></id> <result property="username" column="username"></result> <result property="address" column="address"></result> <result property="sex" column="sex"></result> <result property="birthday" column="birthday"></result> <!-- 配置user對象中accounts集合的映射 --> <collection property="accounts" ofType="account"> <id column="aid" property="id"></id> <result column="uid" property="uid"></result> <result column="money" property="money"></result> </collection> </resultMap> <!-- 查詢所有 --> <select id="findAll" resultMap="userAccountMap"> select u.*,a.id aid,a.uid uid,a.money money from user u left outer join account a on u.id = a.uid </select> <!-- 根據id查詢用戶 --> <select id="findById" parameterType="INT" resultType="user"> select * from user where id = #{uid} </select> </mapper>
3.多對多
public class UserTest { private InputStream in; private SqlSession sqlSession; private IUserDao userDao; @Before//用於在測試方法執行之前執行 public void init()throws Exception{ //1.讀取配置文件,生成字節輸入流 in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.獲取SqlSessionFactory SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); //3.獲取SqlSession對象 sqlSession = factory.openSession(true); //4.獲取dao的代理對象 userDao = sqlSession.getMapper(IUserDao.class); } @After//用於在測試方法執行之後執行 public void destroy()throws Exception{ //提交事務 // sqlSession.commit(); //6.釋放資源 sqlSession.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.getRoles()); } } }
public class User implements Serializable { private Integer id; private String username; private String address; private String sex; private Date birthday; //多對多的關係映射:一個用戶可以具備多個角色 private List<Role> roles; }
<?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"> <mapper namespace="com.itheima.dao.IUserDao"> <!-- 定義User的resultMap--> <resultMap id="userMap" type="user"> <id property="id" column="id"></id> <result property="username" column="username"></result> <result property="address" column="address"></result> <result property="sex" column="sex"></result> <result property="birthday" column="birthday"></result> <!-- 配置角色集合的映射 --> <collection property="roles" ofType="role"> <id property="roleId" column="rid"></id> <result property="roleName" column="role_name"></result> <result property="roleDesc" column="role_desc"></result> </collection> </resultMap> <!-- 查詢所有 --> <select id="findAll" resultMap="userMap"> select u.*,r.id as rid,r.role_name,r.role_desc from user u left outer join user_role ur on u.id = ur.uid left outer join role r on r.id = ur.rid </select> <!-- 根據id查詢用戶 --> <select id="findById" parameterType="INT" resultType="user"> select * from user where id = #{uid} </select> </mapper>
public class RoleTest { private InputStream in; private SqlSession sqlSession; private IRoleDao roleDao; @Before//用於在測試方法執行之前執行 public void init()throws Exception{ //1.讀取配置文件,生成字節輸入流 in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.獲取SqlSessionFactory SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); //3.獲取SqlSession對象 sqlSession = factory.openSession(true); //4.獲取dao的代理對象 roleDao = sqlSession.getMapper(IRoleDao.class); } @After//用於在測試方法執行之後執行 public void destroy()throws Exception{ //提交事務 // sqlSession.commit(); //6.釋放資源 sqlSession.close(); in.close(); } /** * 測試查詢所有 */ @Test public void testFindAll(){ List<Role> roles = roleDao.findAll(); for(Role role : roles){ System.out.println("---每個角色的信息----"); System.out.println(role); System.out.println(role.getUsers()); } } }
public class Role implements Serializable { private Integer roleId; private String roleName; private String roleDesc; //多對多的關係映射:一個角色可以賦予多個用戶 private List<User> users; }
<?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"> <mapper namespace="com.itheima.dao.IRoleDao"> <!--定義role表的ResultMap--> <resultMap id="roleMap" type="role"> <id property="roleId" column="rid"></id> <result property="roleName" column="role_name"></result> <result property="roleDesc" column="role_desc"></result> <collection property="users" ofType="user"> <id column="id" property="id"></id> <result column="username" property="username"></result> <result column="address" property="address"></result> <result column="sex" property="sex"></result> <result column="birthday" property="birthday"></result> </collection> </resultMap> <!--查詢所有--> <select id="findAll" resultMap="roleMap"> select u.*,r.id as rid,r.role_name,r.role_desc from role r left outer join user_role ur on r.id = ur.rid left outer join user u on u.id = ur.uid </select> </mapper>