Mybatis深入(注解开发)

一、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());
        }
    }

结果
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值