Mybatis的注解开发学习笔记
学习视频:5001 @Select注解_哔哩哔哩_bilibili~5009 案例:基于MyBatis注解的学生管理程序_哔哩哔哩_bilibili
目录
1.基于注解的单表增删改查
1.1@Select注解
1.2Insert注解
1.3Update注解
1.4Delete注解
1.5Param注解
2.基于注解的关联查询
2.1一对一查询
2.2一对多查询
2.3多对多查询
3.基于MyBatis注解的学生管理程序
查询id为2的学生信息
修改学生信息
一对多查询班级为二班的学生
1.基于注解的单表增删改查
1.1@Select注解
数据准备
product表
package com.it.pojo;public class Product {private int id;private String goodsname;private int price;private int typeid;@Overridepublic String toString() {return "Product{" +"id=" + id +", goodsname='" + goodsname + '\'' +", price=" + price +", typeid=" + typeid +'}';}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getGoodsname() {return goodsname;}public void setGoodsname(String goodsname) {this.goodsname = goodsname;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public int getTypeid() {return typeid;}public void setTypeid(int typeid) {this.typeid = typeid;}
}
package com.it.dao;import com.it.pojo.Product;
import org.apache.ibatis.annotations.Select;public interface ProductMapper {@Select("select * from product where id=#{id}")public Product findProductById(int id);}
package com.it.dao;import com.it.pojo.Product;
import com.it.utils.MyBatisUtils;
import junit.framework.TestCase;
import org.junit.Before;import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Test;public class ProductMapperTest extends TestCase {private ProductMapper productMapper;private SqlSession session;@Beforepublic void setUp(){session= MyBatisUtils.getSession();productMapper=session.getMapper(ProductMapper.class);}@Testpublic void testFindProductById() {Product product= productMapper.findProductById(1);System.out.println(product);}@Afterpublic void release(){session.close();}}
1.2Insert注解
@Insert("insert into product(goodsname,price,typeid) values (#{goodsname},#{price},#{typeid})")public int insertProduct(Product product);
@Testpublic void testinsertProduct(){Product product2=new Product();product2.setGoodsname("风扇");product2.setPrice(200);product2.setTypeid(2);int i= productMapper.insertProduct(product2);System.out.println(i);session.commit();}
1.3Update注解
@Update("update product set goodsname=#{goodsname},price=#{price} where id=#{id}")public int updateProduct(Product product);
@Testpublic void testupdateProduct(){Product product2=new Product();product2.setGoodsname("大风扇");product2.setId(5);product2.setPrice(300);int i= productMapper.updateProduct(product2);System.out.println(i);session.commit();}
1.4Delete注解
@Delete("delete from product where id=#{id}")public int deleteProduct(int id);
@Testpublic void testdeleteProduct(){int i= productMapper.deleteProduct(5);if (i>0){System.out.println("删除成功");}session.commit();}
1.5Param注解
@Select("select * from product where id=#{param01} and goodsname=#{param02}")public Product selectProductByIdAndGoodsname(@Param("param01") int id,@Param("param02") String goodsname);
@Testpublic void testselectProductByIdAndGoodsname(){Product product=productMapper.selectProductByIdAndGoodsname(1,"电视机");System.out.println(product);}
2.基于注解的关联查询
2.1一对一查询
package com.it.pojo;public class IdCard {private int id;private String code;@Overridepublic String toString() {return "IdCard{" +"id=" + id +", code='" + code + '\'' +'}';}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}
}
package com.it.pojo;public class Person {private int id;private String name;private int age;private String sex;private IdCard card;@Overridepublic String toString() {return "Person{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", sex='" + sex + '\'' +", card=" + card +'}';}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public IdCard getCard() {return card;}public void setCard(IdCard card) {this.card = card;}
}
package com.it.dao;import com.it.pojo.IdCard;
import org.apache.ibatis.annotations.Select;public interface IdCardMapper {@Select("select * from tb_idcard where id=#{id}")IdCard selectIdCardById(int id);}
public interface PersonMapper {@Select("select * from tb_person where id=#{id}")@Results({@Result(column = "card_id",property = "card",one=@One(select = "com.it.dao.IdCardMapper.selectIdCardById"))})Person selectPersonById(int id);}
public class PersonMapperTest extends TestCase {private PersonMapper personMapper;private SqlSession session;@Beforepublic void setUp(){session= MyBatisUtils.getSession();personMapper=session.getMapper(PersonMapper.class);}@Testpublic void testSelectPersonById() {Person person=personMapper.selectPersonById(1);System.out.println(person.toString());}@Afterpublic void release(){session.close();}
}
这里将mybatis版本改为了3.5.3,不然报错
2.2一对多查询
public class Orders {private int id;private String number;private int userId;@Overridepublic String toString() {return "Orders{" +"id=" + id +", number='" + number + '\'' +", userId=" + userId +'}';}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public int getUserId() {return userId;}public void setUserId(int userId) {this.userId = userId;}
}
public class Users {private int id;private String username;private String address;private List<Orders> ordersList;@Overridepublic String toString() {return "Users{" +"id=" + id +", username='" + username + '\'' +", address='" + address + '\'' +", ordersList=" + ordersList +'}';}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}
}
public interface OrdersMapper {@Select("select * from tb_orders where user_id =#{id}")@Results({@Result(id = true,property = "id",column = "id"),@Result(property = "number",column = "number")})public List<Orders> selectOrdersByUserId(int id);}
public interface UsersMapper {@Select("select * from tb_user where id=#{id}")@Results({@Result(id = true,property = "id",column = "id"),@Result(property = "username",column = "username"),@Result(property = "address",column = "address"),@Result(property = "ordersList",column = "id",many = @Many(select = "com.it.dao.OrdersMapper.selectOrdersByUserId"))})public Users selectUserById(int id);}
public class UsersMapperTest {@Testpublic void testSelectUserById() {SqlSession session= MyBatisUtils.getSession();UsersMapper usersMapper = session.getMapper(UsersMapper.class);Users users= usersMapper.selectUserById(1);System.out.println(users);session.close();}
}
2.3多对多查询
public class Orders {private int id;private String number;private int userId;private List<Product2>product2List;@Overridepublic String toString() {return "Orders{" +"id=" + id +", number='" + number + '\'' +", userId=" + userId +", product2List=" + product2List +'}';}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public int getUserId() {return userId;}public void setUserId(int userId) {this.userId = userId;}
}
import java.util.List;public class Product2 {private int id;private String name;private double price;private List<Orders>ordersList;@Overridepublic String toString() {return "Product2{" +"id=" + id +", name='" + name + '\'' +", price=" + price +", ordersList=" + ordersList +'}';}public int getId() {return id;}public void setId(int 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 List<Orders> getOrdersList() {return ordersList;}public void setOrdersList(List<Orders> ordersList) {this.ordersList = ordersList;}
}
public interface Product2Mapper {@Select("select * from tb_product where id in"+"(select product_id from tb_ordersitem where orders_id=#{orderId})")public List<Product2> selectProduct2sByOrdersId(int orderId);}
@Select("select * from tb_orders where id=#{id}")@Results({@Result(id = true,column = "id",property = "id"),@Result(column = "number",property = "number"),@Result(property = "product2List",column = "id",many = @Many(select = "com.it.dao.Product2Mapper.selectProduct2sByOrdersId"))})public Orders selectOrdersById(int id);
public class OrdersMapperTest extends TestCase {public void testSelectOrdersById() {SqlSession session= MyBatisUtils.getSession();OrdersMapper ordersMapper = session.getMapper(OrdersMapper.class);Orders orders = ordersMapper.selectOrdersById(1);System.out.println(orders);session.close();}
}
3.基于MyBatis注解的学生管理程序
数据准备
CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20),age INT,cid INT
);
INSERT INTO student VALUES(1,'张三',18,1);
INSERT INTO student VALUES(2,'李四',18,2);
INSERT INTO student VALUES(3,'王五',19,2);
INSERT INTO student VALUES(4,'赵六',20,1);CREATE TABLE class(id INT PRIMARY KEY AUTO_INCREMENT,classname VARCHAR(20)
);
INSERT INTO class VALUES(1,'一班');
INSERT INTO class VALUES(2,'二班');
public class Student {private int id;private String name;private int age;private int cid;@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", cid=" + cid +'}';}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getCid() {return cid;}public void setCid(int cid) {this.cid = cid;}
}
public class Iclass {private int id;private String classname;//一对多映射private List<Student>studentList;@Overridepublic String toString() {return "Iclass{" +"id=" + id +", classname='" + classname + '\'' +", studentList=" + studentList +'}';}public String getClassname() {return classname;}public void setClassname(String classname) {this.classname = classname;}public int getId() {return id;}public void setId(int id) {this.id = id;}public List<Student> getStudentList() {return studentList;}public void setStudentList(List<Student> studentList) {this.studentList = studentList;}
}
查询id为2的学生信息
public interface StudentMapper {@Select("select * from student where id=#{id}")public Student selectStudentById(int id);}
public class StudentMapperTest extends TestCase {public void testSelectStudentById() {SqlSession session= MyBatisUtils.getSession();StudentMapper studentMapper= session.getMapper(StudentMapper.class);Student student= studentMapper.selectStudentById(2);System.out.println(student);session.close();}
}
修改学生信息
@Update("update student set name=#{name},age=#{age} where id=#{id}")public int updateStudent(Student student);
public void testupdateStudentByName() {SqlSession session= MyBatisUtils.getSession();StudentMapper studentMapper= session.getMapper(StudentMapper.class);Student student= new Student();student.setName("小吴");student.setAge(20);student.setId(4);int i= studentMapper.updateStudent(student);if(i>0){System.out.println("修改成功");}session.commit();session.close();}
一对多查询班级为二班的学生
@Select("select * from student where cid=#{cid}")@Results({@Result(id =true,column = "id",property = "id"),@Result(column = "name",property = "name"),@Result(column = "age",property = "age")})public List<Student>selectStudentsByCid(int cid);
@Select("select * from class where id=#{id}")@Results({@Result(id = true,column = "id",property = "id"),@Result(property = "classname",column = "classname"),@Result(property = "studentList",column = "id",many =@Many(select = "com.it.dao.StudentMapper.selectStudentsByCid"))})public Iclass selectClassById(int id);
public class ClassMapperTest extends TestCase {public void testSelectClassById() {SqlSession session= MyBatisUtils.getSession();ClassMapper classMapper = session.getMapper(ClassMapper.class);Iclass iclass =classMapper.selectClassById(2);System.out.println(iclass);session.close();}
}