- 基于XML方式的一对多进行
本知识点在XML方式的一对多的基础上,进行修改,以实现注解方式的一对多 - CategoryMapper
新增加CategoryMapper接口,查询所有Category
@Select注解获取Category类本身
@Results 通过@Result和@Many中调用ProductMapper.listByCategory()方法相结合,来获取一对多关系@Select(" select * from category_ ")
products这个property 并不是和id这个column对应。反正不加就会报错,我认为是mybatis本身的缺陷造成的,这是其作者打的补丁
package com.how2java.mapper; import java.util.List; import org.apache.ibatis.annotations.Many; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import com.how2java.pojo.Category; public interface CategoryMapper { @Select(" select * from category_ ") @Results({ @Result(property = "id", column = "id"), @Result(property = "products", javaType = List.class, column = "id", many = @Many(select = "com.how2java.mapper.ProductMapper.listByCategory") ) }) public List<Category> list(); }
- ProductMapper
新增接口ProductMapper
注解@Select用于根据分类id获取产品集合
@Select(" select * from product_ where cid = #{cid}")
package com.how2java.mapper; import java.util.List; import org.apache.ibatis.annotations.Select; import com.how2java.pojo.Product; public interface ProductMapper { @Select(" select * from product_ where cid = #{cid}") public List<Product> listByCategory(int cid); }
- mybatis-config.xml
添加ProductMapper和CategoryMapper的映射
<?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> <typeAliases> <package name="com.how2java.pojo"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="admin"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/how2java/pojo/Category.xml"/> <mapper class="com.how2java.mapper.CategoryMapper"/> <mapper class="com.how2java.mapper.ProductMapper"/> </mappers> </configuration>
- 测试
package com.how2java; import java.io.IOException; import java.io.InputStream; import java.util.List; 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 com.how2java.mapper.CategoryMapper; import com.how2java.pojo.Category; import com.how2java.pojo.Product; public class TestMybatis { public static void main(String[] args) throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sqlSessionFactory.openSession(); CategoryMapper mapper = session.getMapper(CategoryMapper.class); listAll(mapper); session.commit(); session.close(); } private static void listAll(CategoryMapper mapper) { List<Category> cs = mapper.list(); for (Category c : cs) { System.out.println(c.getName()); List<Product> ps = c.getProducts(); for (Product p : ps) { System.out.println("\t"+p.getName()); } } } }
Mybatis注解-使用注解实现一对多
最新推荐文章于 2024-05-10 07:28:52 发布