Mybatis_03_一对多
1.User.java
package com.cmdzz.domain; import java.io.Serializable; import java.util.Date; import java.util.List; /** * @author cmdzz * @date 2019/6/26 - 12:01 */ public class User implements Serializable { /** * 属性要和表的列名一样 */ private Integer id; private String userName; private Date birthday; private String sex; private String address; //一对多关系映射,主表实体应该包含从表实体的集合引用 private List<Account> accounts; public List<Account> getAccounts() { return accounts; } public void setAccounts(List<Account> accounts) { this.accounts = accounts; } 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; } @Override public String toString() { return "User{" + "id=" + id + ", userName='" + userName + '\'' + ", birthday=" + birthday + ", sex='" + sex + '\'' + ", address='" + address + '\'' + '}'; } }
2.IUserDao.java
package com.cmdzz.dao; /** * @author cmdzz * @date 2019/6/26 - 12:07 */ import com.cmdzz.domain.User; import java.util.List; /** * 用户的持久层接口 */ public interface IUserDao { /** * 查询所有操作 * @return */ /*注解的方式 @Select("select * from user")*/ List<User> findAll(); /** * 根据id查询用户信息 * @param userId * @return */ User findById(Integer userId); }
3.IUserDao.xml
<?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.cmdzz.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集合的映射 ofType是只哪个类,此处用了包扫描 的别名 --> <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> <!--配置查询所有 id="findAll" 是UserDao方法名 要一致 --> <!-- <select id="findAll" resultType="user"> select * from user </select>--> <select id="findAll" resultMap="userAccountMap"> SELECT * 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.数据库测试语句

发现有名字重复,但是mybaits 会自动识别组合到一个user下。
4.测试类
UserTest.java
package com.cmdzz.test; import com.cmdzz.dao.IAccountDao; import com.cmdzz.dao.IUserDao; import com.cmdzz.domain.Account; import com.cmdzz.domain.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.After; import org.junit.Before; import org.junit.Test; import java.io.InputStream; import java.util.List; /** * @author cmdzz * @date 2019/6/26 - 17:21 */ 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(); //4.获取dao的代理对象 userDao = sqlSession.getMapper(IUserDao.class); } @After//用于在测试方法执行之后执行 public void destroy()throws Exception{ //提交事务 sqlSession.commit(); //6.释放资源 sqlSession.close(); in.close(); } /** * 测试查询所有 */ @Test public void testFindAll() { //5.执行查询所有方法 List<User> users = userDao.findAll(); for(User user:users){ System.out.println("用户信息===================="); System.out.println(user); System.out.println(user.getAccounts()); } } }
5.执行结果

学习记录,网上找的,自己写的都记录下来。如有雷同并且侵犯到您的权益,请联系本人修改。
浙公网安备 33010602011771号