一、Mybatis 注解
常用注解
@Insert 插入
@Update 更新
@Delete 删除
@Select 查询
@One 一对一结果集封装
@Many 一对多结果集封装
@Result 结果集封装
@Results 与Result 一起使用,封装多个结果集
1. CRUD 增删改查
简单不啰嗦,上代码 ~
1.1 配置注解扫描
sqlMapConfig.xml 文件 mapper 扫描(即包路径)
<mappers>
<package name="com.lg.dao"/>
</mappers>
1.2 StuMapper 接口
/**
* Stu表Mapper
*/
public interface StuMapper {
@Insert("insert into Stu values (#{sid}, #{sname},#{gender},#{phone},#{hobby},#{info})")
public void insert(Stu stu);
@Update("update Stu set sname = #{sname} where sid = #{sid}")
public void updateStu(Stu stu);
@Select("select * from Stu")
public List<Stu> selectAll();
@Delete("delete from Stu where sid = #{sid}")
public void deleteUser(Stu stu);
}
1.3 测试类
private SqlSession sqlSession;
@Before
public void setSqlSession() throws Exception{
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream,"develop");
sqlSession = build.openSession();
}
@Test // 测试查询
public void testSelectAnnonation(){
StuMapper mapper = sqlSession.getMapper(StuMapper.class);
List<Stu> stus = mapper.selectAll();
for (Stu stu:
stus) {
System.out.println(stu.toString());
}
}
@Test // 测试更新
public void testUpdateAnnonation(){
StuMapper mapper = sqlSession.getMapper(StuMapper.class);
Stu stu = new Stu();
stu.setSid(319);
stu.setSname("hello world");
mapper.updateStu(stu);
sqlSession.commit();
}
@Test // 测试删除
public void testDeleteAnnonation(){
StuMapper mapper = sqlSession.getMapper(StuMapper.class);
Stu stu = new Stu();
stu.setSid(319);
mapper.deleteUser(stu);
sqlSession.commit();
}
@Test // 测试新增
public void testInsert(){
StuMapper mapper = sqlSession.getMapper(StuMapper.class);
Stu stu = new Stu();
stu.setSname("小夜夜");
stu.setGender("男");
stu.setHobby("羽毛球");
stu.setInfo("你好信息嘻嘻嘻");
stu.setPhone("17704055983");
mapper.insert(stu);
sqlSession.commit();
}
2. 一对一查询
2.1 与xml文件对比:
@Results | 代替的是标签resultMap标签;该注解中可以使用单个@result注解,也可以使用@Result集合。使用格式:@Results({@Result(property="",column=""),@Result(property="",column="")}) 或 @Results(@Result(property="",column="")) |
---|---|
@Result | 代替了id标签和result标签 @Result 属性介绍: column:数据库的列明 property:需要装配的属性名 one:需要使用的@One注解(@Result (one=@One)()) many:需要使用的@Many注解(@Result(many=@Many)()) |
2.2 实现
2.2.1 POJO类
Order 类
package com.lg.pojo;
/**
* 订单类
*/
public class Order {
private int id;
private String orderTime;
private String total;
private User user;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getOrderTime() {
return orderTime;
}
public void setOrderTime(String orderTime) {
this.orderTime = orderTime;
}
public String getTotal() {
return total;
}
public void setTotal(String total) {
this.total = total;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
User类
package com.lg.pojo;
import java.util.ArrayList;
import java.util.List;
public class User {
private int uid;
private String username;
// 用户关联的订单
private List<Order> orderList = new ArrayList<Order>();
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public List<Order> getOrderList() {
return orderList;
}
public void setOrderList(List<Order> orderList) {
this.orderList = orderList;
}
}
2.2.2 UserDao接口
@Select("select * from user where uid = #{id}")
public User findById(Integer id);
2.2.3 OrderMap 接口
public interface OrderMap {
// column = "uid" 传递的参数 ,就是该 com.lg.dao.UserDao.findById (namespace.id)的入参
// property = "user" 为 com.lg.dao.UserDao.findById 查询出的结果,封装到Order类的user属性中
@Results({
@Result(property = "id",column = "id"),
@Result(property = "orderTime",column = "orderTime"),
@Result(property = "total",column = "total"),
@Result(property = "user",column = "uid",javaType = User.class,
one = @One(select = "com.lg.dao.UserDao.findById"))
})
@Select("select * from order")
public List<Order> findOrderAndUser();
测试类:
@Test
public void testOneToOne(){
OrderMapper order = sqlSession.getMapper(OrderMapper.class);
List<Order> orderAndUser = order.findOrderAndUser();
for(Order orders:
orderAndUser) {
System.out.println(orders.toString());
}
}
测试结果:
3. 一对多查询
3.1 POJO: 见上图 一对一
3.2 UserDao接口实现类
@Results({
@Result(property = "uid",column = "uid"),
@Result(property = "username",column = "username"),
@Result(property = "orderList",column = "uid",javaType = List.class,many = @Many(select = "com.lg.dao.OrderMapper.findAllOrder"))
})
@Select("select * from user")
public List<User> findAllUser();
3.3 OrderMapper接口实现类
@Select("select * from order_yeye")
public List<Order> findAllOrder(Integer id);
3.4 测试类
@Test
public void testOneToMany(){
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> allUser = mapper.findAllUser();
for (User user:
allUser) {
System.out.println(user.toString());
}
}
结果