MyBatis进行级联查询
级联查询
1.创建实体类
在pojo目录下创建需要的实体类
public class Account {private Integer aid;private Integer auserid;private Double amoney;private User user;//省略了无参、满参构造方法、get与set方法、toString方法
}
public class User {private Integer userid;private String username;private String useraddress;private String usersex;private String userbirthday;//一对多关系映射private List<Account> accounts;//省略了无参、满参构造方法、get与set方法、toString方法
}
2.一对一查询
1.AccountMapper接口
public interface AccountMapper {
// 一对一public Account getAccount(Integer aid);
}
2.AccountMapper.xml文件
一对一的分步查询
在 <association> 元素中通常使用以下属性。
● property:指定映射到实体类的对象属性。
● column:指定表中对应的字段(即查询返回的列名)。
● javaType:指定映射到实体对象属性的类型。
● select:指定引入嵌套查询的子 SQL 语句,该属性用于关联映射中的嵌套查询
<!-- resultMap -->
<resultMap id="map1" type="com.ape.pojo.Account"><id property="aid" column="aid"></id><result property="auserid" column="auserid"></result><result property="amoney" column="amoney"></result><association property="user" javaType="com.ape.pojo.User" column="auserid"select="com.ape.dao.UserMapper.getUser"></association></resultMap>
<!-- 一对一 -->
<select id="getAccount" parameterType="int" resultMap="map1">select * from account where aid=#{aid};
</select>
3.UserMapper接口
public interface UserMapper {
// 一对一public User getUser(Integer userid);
}
4.UserMapper.xml文件
<!-- 一对一--><select id="getUser" resultType="com.ape.pojo.User" parameterType="int">select * from user where userid=#{userid};</select>
5.创建测试类进行测试
public class AccountTest {InputStream is = null;SqlSessionFactoryBuilder ssfb = null;SqlSessionFactory factory = null;SqlSession session = null;@Beforepublic void before()throws Exception{//1.主配置文件路径String path = "mybatis_config.xml";//2.转换为流对象is = Resources.getResourceAsStream(path);//3.创建工厂构造器对象ssfb = new SqlSessionFactoryBuilder();//4.创建工厂(构造者模式)factory = ssfb.build(is);}@Afterpublic void after()throws Exception{//资源回收session.close();is.close();}@Testpublic void test(){session=factory.openSession();AccountMapper dao=session.getMapper(AccountMapper.class);Account account=dao.getAccount(1);System.out.println(account);}
}
3.一对多查询
1.UserMapper接口
public interface UserMapper {
// 一对多public User getUserById(Integer userid);
}
2.UserMapper.xml文件
级联,分步
在 <collection> 元素中通常使用以下属性。
● property:指定映射到实体类的对象属性。
● column:指定表中对应的字段(即查询返回的列名)。
● javaType:指定映射到实体对象属性的类型。
● select:指定引入嵌套查询的子 SQL 语句,该属性用于关联映射中的嵌套查询``
<!-- 一对多--><select id="getUserById" resultMap="map2" parameterType="int">select * from user where userid=#{userid};</select><resultMap id="map2" type="com.ape.pojo.User"><id property="userid" column="userid"></id><result property="username" column="username"></result><result property="usersex" column="usersex"></result><result property="usersex" column="usersex"></result><result property="userbirthday" column="userbirthday"></result><collection property="accounts" ofType="com.ape.pojo.Account" column="userid"select="com.ape.dao.AccountMapper.getAccountByUserId"></collection></resultMap>
3.AccountMapper接口
public interface AccountMapper {
// 一对多public List<Account> getAccountByUserId(Integer userid);
}
4.AccountMapper.xml文件
<!-- 一对多--><select id="getAccountByUserId" parameterType="int" resultType="com.ape.pojo.Account">select * from account where auserid=#{userid};</select>
5.创建测试类进行测试
public class UserTest {InputStream is = null;SqlSessionFactoryBuilder ssfb = null;SqlSessionFactory factory = null;SqlSession session = null;@Beforepublic void before()throws Exception{//1.主配置文件路径String path = "mybatis_config.xml";//2.转换为流对象is = Resources.getResourceAsStream(path);//3.创建工厂构造器对象ssfb = new SqlSessionFactoryBuilder();//4.创建工厂(构造者模式)factory = ssfb.build(is);}@Afterpublic void after()throws Exception{//资源回收session.close();is.close();}@Testpublic void test1(){session=factory.openSession();UserMapper dao=session.getMapper(UserMapper.class);User user=dao.getUserById(46);System.out.println(user);}
}