mybatis笔记-5-注解(一对一,一对多,多对多)
来源:互联网 发布:simcms二手车源码 编辑:程序博客网 时间:2024/06/17 02:58
下面三个案例都需要在xml中配置映射:
<?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> <settings> <setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading" value="false"/> <setting name="cacheEnabled" value="true"/> </settings> <!-- 懒加载 <settings> <setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading" value="false"/> </settings> --> <environments default="development"> <environment id="development"> <!-- type="JDBC":指直接简单使用了JDBC的提交和回滚设置 type="POOLED":指让容器实现对事务的管理 --> <transactionManager type="JDBC" /> <!-- 配置数据库连接信息 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8" /> <property name="username" value="root" /> <property name="password" value="caoxuekun" /> </dataSource> </environment> </environments> <mappers> <!-- 注册userMapper.xml文件, userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml--> <mapper resource="usersMapper.xml"/> <mapper resource="relationMapping.xml"/> <mapper resource="cache.xml"/> <mapper class="com.interfaceMybatis.UsersMapper"/> <mapper class="com.interfaceMybatis.mapping.OneToOne" /> <mapper class="com.interfaceMybatis.mapping.OneToMany" /> <mapper class="com.interfaceMybatis.mapping.ManyToMany" /> </mappers></configuration>
一对一:
实体:
package com.entity.oneToOne;import java.io.Serializable;public class Person implements Serializable{ private Integer id; private String name; private String sex; private Integer age; private Card card; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Card getCard() { return card; } public void setCard(Card card) { this.card = card; }}
package com.entity.oneToOne;import java.io.Serializable;public class Card implements Serializable{ private Integer id; private String code; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getCode() { return code; } public void setCode(String code) { this.code = code; }}
数据库表:
CREATE TABLE `tb_person` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) DEFAULT NULL, `sex` varchar(100) DEFAULT NULL, `age` int(11) DEFAULT NULL, `card_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `card_id` (`card_id`), CONSTRAINT `tb_person_ibfk_1` FOREIGN KEY (`card_id`) REFERENCES `tb_card` (`id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;CREATE TABLE `tb_card` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
注解配置:
package com.interfaceMybatis.mapping;import org.apache.ibatis.annotations.One;import org.apache.ibatis.annotations.Result;import org.apache.ibatis.annotations.Results;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.mapping.FetchType;import com.entity.oneToOne.Card;import com.entity.oneToOne.Person;public interface OneToOne { @Select("select * from tb_card where id = #{id}") Card selectCardById(Integer id); @Select("select * from tb_person where id = #{id}") @Results({ @Result(id=true,column="id",property="id"), @Result(column="name",property="name"), @Result(column="sex",property="sex"), @Result(column="age",property="age"), @Result(column="card_id",property="card", one=@One( select="com.interfaceMybatis.mapping.OneToOne.selectCardById", fetchType=FetchType.EAGER )) }) Person selectPersonById(Integer id);}
测试:
public static SqlSession getSqlSession() { // mybatis的配置文件 String resource = "conf.xml"; // 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件) InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource); // 构建sqlSession的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); // 使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件) // Reader reader = Resources.getResourceAsReader(resource); // 构建sqlSession的工厂 // SqlSessionFactory sessionFactory = new // SqlSessionFactoryBuilder().build(reader); // 创建能执行映射文件中sql的sqlSession SqlSession session = sessionFactory.openSession(); return session; } //oneToOne public static void oneToOne(Integer id){ SqlSession session = getSqlSession(); OneToOne oto = session.getMapper(OneToOne.class);// Card card = oto.selectCardById(id);// System.out.println(card.getId()+"==="+card.getCode()); Person person = oto.selectPersonById(id); System.out.println(person.getId()+"==="+person.getName()+"==="+person.getSex()+"==="+person.getAge()+"==="+person.getCard().getId()+"==="+person.getCard().getCode()); session.commit(); session.close(); } public static void main(String[] args) { oneToOne(1);// oneToMany(1);// manyTomany(); }
一对多
实体:
package com.entity.oneToMany;import java.io.Serializable;import java.util.List;public class Clazz implements Serializable{ private Integer id;//班级id private String code;//班级编号 private String name;//班级名称 private List<Student> students; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; }}
package com.entity.oneToMany;public class Student { private Integer id; private String name; private String sex; private Integer age; private Clazz clazz; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Clazz getClazz() { return clazz; } public void setClazz(Clazz clazz) { this.clazz = clazz; }}
数据库:
CREATE TABLE `tb_clazz` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code` varchar(100) DEFAULT NULL, `name` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;CREATE TABLE `tb_student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) DEFAULT NULL, `sex` varchar(18) DEFAULT NULL, `age` int(11) DEFAULT NULL, `clazz_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `clazz_id` (`clazz_id`), CONSTRAINT `tb_student_ibfk_1` FOREIGN KEY (`clazz_id`) REFERENCES `tb_clazz` (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
注解配置:
package com.interfaceMybatis.mapping;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 org.apache.ibatis.mapping.FetchType;import com.entity.oneToMany.Clazz;import com.entity.oneToMany.Student;public interface OneToMany { @Select("select * from tb_student where clazz_id=#{id}") @Results({ @Result(id=true,column="id",property="id"), @Result(column="name",property="name"), @Result(column="sex",property="sex"), @Result(column="age",property="age") }) List<Student> selectByClazzId(Integer id); @Select("select * from tb_clazz where id = #{id}") @Results({ @Result(id=true,column="id",property="id"), @Result(column="code",property="code"), @Result(column="name",property="name"), @Result(column="id",property="students", many=@Many( select="com.interfaceMybatis.mapping.OneToMany.selectByClazzId", fetchType=FetchType.LAZY ) ) }) Clazz selectClazzByIdToManyStudent(Integer id);}
测试:
public static SqlSession getSqlSession() { // mybatis的配置文件 String resource = "conf.xml"; // 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件) InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource); // 构建sqlSession的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); // 使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件) // Reader reader = Resources.getResourceAsReader(resource); // 构建sqlSession的工厂 // SqlSessionFactory sessionFactory = new // SqlSessionFactoryBuilder().build(reader); // 创建能执行映射文件中sql的sqlSession SqlSession session = sessionFactory.openSession(); return session; } //OneToMany public static void oneToMany(Integer id){ SqlSession session = getSqlSession(); OneToMany otm = session.getMapper(OneToMany.class); Clazz clazz = otm.selectClazzByIdToManyStudent(id); System.out.println(clazz.getId()+"=="+clazz.getName()+"==="+clazz.getCode()); for(Student s:clazz.getStudents()){ System.out.println(s.getId()+"==="+s.getName()+"==="+s.getSex()+"==="+s.getAge()); } session.commit(); session.close(); } public static void main(String[] args) {// oneToOne(1); oneToMany(1);// manyTomany(); }
多对多
实体:
package com.entity.manyToMany;import java.io.Serializable;import java.util.List;public class Article implements Serializable{ private Integer id;//商品id private String name;//商品名称 private Double price;//商品价格 private String remark;//商品描述 private List<Order> orders; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public List<Order> getOrders() { return orders; } public void setOrders(List<Order> orders) { this.orders = orders; }}
package com.entity.manyToMany;import java.io.Serializable;import java.util.List;public class Order implements Serializable { private Integer id;//订单id private String code;//订单编号 private Double total;//订单总金额 private User user; private List<Article> articles;//一个订单可包含多种商品 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public Double getTotal() { return total; } public void setTotal(Double total) { this.total = total; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public List<Article> getArticles() { return articles; } public void setArticles(List<Article> articles) { this.articles = articles; }}
package com.entity.manyToMany;import java.io.Serializable;import java.util.List;public class User implements Serializable{ private Integer id; private String username; private String loginname; private String password; private String phone; private String address;//收获地址 private List<Order> orders;//订单 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 String getLoginname() { return loginname; } public void setLoginname(String loginname) { this.loginname = loginname; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public List<Order> getOrders() { return orders; } public void setOrders(List<Order> orders) { this.orders = orders; }}
数据库:
//多对多create table tb_user(id int PRIMARY key auto_increment,username VARCHAR(100),loginname varchar(100),password VARCHAR(100),phone varchar(18));create table tb_article(id int primary key auto_increment,name VARCHAR(100),price double,remark VARCHAR(18));create table tb_order(id int primary key auto_increment,code VARCHAR(180),total double,user_id int,FOREIGN key(user_id) REFERENCES tb_user(id));//tb_order和tb_article的中间表create table tb_item(order_id int,article_id int,amout int,PRIMARY key(order_id,article_id),FOREIGN key(order_id) REFERENCES tb_order(id),FOREIGN key(article_id) REFERENCES tb_article(id));
注解配置:
package com.interfaceMybatis.mapping;import java.util.List;import org.apache.ibatis.annotations.Many;import org.apache.ibatis.annotations.One;import org.apache.ibatis.annotations.Result;import org.apache.ibatis.annotations.Results;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.mapping.FetchType;import com.entity.manyToMany.Article;import com.entity.manyToMany.Order;import com.entity.manyToMany.User;import com.sun.scenario.effect.impl.prism.PrImage;public interface ManyToMany { @Select("select * from tb_user where id = #{id}") User selectUserById(Integer id); @Select("select * from tb_article where id in (select article_id from tb_item where order_id = #{id})") List<Article> selectArticles(Integer id); @Select("select * from tb_order where id = #{id}") @Results({ @Result(id=true,column="id",property="id"), @Result(column="code",property="code"), @Result(column="total",property="total"), @Result(column="user_id",property="user", one=@One( select="com.interfaceMybatis.mapping.ManyToMany.selectUserById", fetchType=FetchType.EAGER ) ), @Result(column="id",property="articles", many=@Many( select="com.interfaceMybatis.mapping.ManyToMany.selectArticles", fetchType=FetchType.LAZY ) ) }) Order selectOrderById(Integer id); @Select("select * from tb_order where id in(select order_id from tb_item where article_id = #{id})") List<Order> selectOrders(Integer id); @Select("select * from tb_article where id = #{id}") @Results({ @Result(id=true,column="id",property="id"), @Result(column="name",property="name"), @Result(column="price",property="price"), @Result(column="remark",property="remark"), @Result(column="id",property="orders", many=@Many( select="com.interfaceMybatis.mapping.ManyToMany.selectOrders", fetchType=FetchType.LAZY ) ) }) Article selectArticleById(Integer id);}
测试:
public static SqlSession getSqlSession() { // mybatis的配置文件 String resource = "conf.xml"; // 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件) InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource); // 构建sqlSession的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); // 使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件) // Reader reader = Resources.getResourceAsReader(resource); // 构建sqlSession的工厂 // SqlSessionFactory sessionFactory = new // SqlSessionFactoryBuilder().build(reader); // 创建能执行映射文件中sql的sqlSession SqlSession session = sessionFactory.openSession(); return session; } //manyTomany public static void manyTomany(){ SqlSession session = getSqlSession(); ManyToMany mtm = session.getMapper(ManyToMany.class); Order order = mtm.selectOrderById(1); System.out.println("order : "+order.getId()+"==="+order.getCode()+"==="+order.getTotal()); System.out.println("=====Articles====="); for(Article a : order.getArticles()){ System.out.println(a.getId()+"==="+a.getName()+"==="+a.getRemark()+"==="+a.getPrice()); } System.out.println("\r\n========\r\n"); Article article = mtm.selectArticleById(2); System.out.println("article:"+article.getId()+"==="+article.getName()+"==="+article.getRemark()+"==="+article.getPrice()); for(Order o:article.getOrders()){ System.out.println("order :"+o.getId()+"==="+o.getCode()); } } public static void main(String[] args) {// oneToOne(1);// oneToMany(1); manyTomany(); }
阅读全文
1 0
- mybatis笔记-5-注解(一对一,一对多,多对多)
- MyBatis 一对一、一对多
- mybatis 一对一,一对多
- MyBatis 详解(一对一,一对多,多对多)
- MyBatis 详解(一对一,一对多,多对多)
- mybatis笔记-2-xml(一对一,一对多,多对多)
- MyBatis注解方式与映射文件方式配合实现一对一,一对多,多对多(一)
- MyBatis注解方式与映射文件方式配合实现一对一,一对多,多对多(二)
- MyBatis注解方式与映射文件方式配合实现一对一,一对多,多对多(三)
- mybatis 一对一 一对多 多对一 多对多
- MyBatis入门(二)-一对一,一对多
- MyBatis 一对一、一对多的
- Mybatis一对一和一对多
- mybatis一对一,一对多查询
- mybatis教程---MyBatis一对一、MyBatis一对多
- mybatis映射 一对一、一对多、多对多高级映射
- mybatis中的高级映射一对一、一对多、多对多
- mybatis一对一,一对多,多对多的关联查询
- 2017 summer individual contest(6)
- TensorFlow学习之会话Sesstion()和交互会话InterativeSesstion()
- JS基础-算法
- 2017年8月7日提高组T3 选数
- URAL
- mybatis笔记-5-注解(一对一,一对多,多对多)
- javaweb学习总结——servlet开发
- C# 简单的权限管理
- Hadoop系列--Hadoop基本架构之MapReduce架构
- JZOJsenior1215.油滴扩展
- Android-putExtra(),getExtra()
- hadoop 搭建3节点集群,遇到Live Nodes显示为0时解决办法
- C语言signed和unsigned之间的编程陷阱
- Netty框架及源码知识点