JavaEE企业级应用开发教程实验四MyBatis的注解开发

该实验详细介绍了如何使用MyBatis的注解进行数据库操作,包括单表的增删改查以及一对一、一对多、多对多的关联查询。通过创建POJO实体类、定义Mapper接口和注解SQL,实现了对tb_worker表的插入、更新和删除操作,同时展示了如何进行简单查询和复杂关联查询。
摘要由CSDN通过智能技术生成

实验四:MyBatis的注解开发

一、实验目的

1.掌握基于注解的单表增删改查

2.熟悉基于注解的一对一关联查询

3.熟悉基于注解的一对多关联查询

4.熟悉基于注解的多对多关联查询

二、实验内容

1.操作MyBatis注解实现修改操作

2.MyBatis注解实现简单查询

3.MyBatis注解实现一对一关联查询

4.MyBatis注解实现一对多查询

5.MyBatis注解实现多对多查询

 三、实验步骤

1.操作MyBatis注解实现修改操作

(1)数据准备

使用mybatis数据库,创建tb_worker表并存入数据

USE mybatis;

CREATE TABLE  tb_worker(

     id INT PRIMARY KEY AUTO_INCREMENT,

     name VARCHAR(32),

     age INT,

     sex VARCHAR(8),

     worker_id INT UNIQUE     

);

INSERT INTO tb_worker(name,age,sex,worker_id)VALUES('孙昊楠1',32,'男',1001);

INSERT INTO tb_worker(name,age,sex,worker_id)VALUES('孙昊楠2',29,'男',1002);

INSERT INTO tb_worker(name,age,sex,worker_id)VALUES('孙昊楠3',26,'男',1003);

(2)插入操作

① 创建POJO实体类

在src\main\java文件夹中创建com\sun\pojo文件夹,在文件夹中创建Worker.java

package com.sun.pojo;
public class Worker {
    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 Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getWorker_id() {
        return worker_id;
    }
    public void setWorker_id(String worker_id) {
        this.worker_id = worker_id;
    }
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
    private String worker_id;
    @Override
    public String toString() {
        return  "员工id:"+ id +", 员工姓名:"+ name +", 年龄:" + age + ", 性别:" + sex + ", 工号:" + worker_id;
    }
}

② 创建接口

在src\main\java文件夹中创建com\sun\dao文件夹,在文件夹中创建WorkerMapper.java

package com.sun.dao;
导入相关包...
public interface WorkerMapper {
    @Insert("insert into tb_worker(name,age,sex,worker_id)"
            +"values(#{name},#{age},#{sex},#{worker_id})")
    int insertWorker(Worker worker);
}

③ 修改mybatis-config.xml文件

在mybatis-config.xml文件的<mappers>元素下引入WoekMapper接口

<mapper class="com.sun.dao.WorkerMapper"/>

④ 创建测试类

在src\test\java文件夹下创建Test文件夹并创建MyBatisTest.java文件

@Test
public void insertWorkerTest() {
    SqlSession session = MybatisUtils.getSession();
    Worker worker = new Worker();
    worker.setId(4);
    worker.setName("孙昊楠4");
    worker.setAge(36);
    worker.setSex("男");
    worker.setWorker_id("1004");
    WorkerMapper mapper = session.getMapper(WorkerMapper.class);
    int result = mapper.insertWorker(worker);
    if (result > 0) {
        System.out.println("成功插入" + result + "条数据");
    } else {
        System.out.println("插入数据失败");
    }
    System.out.println(worker.toString());
    session.commit();
    session.close();
}

运行结果:

(3)修改操作:

①修改WorkerMapper.java文件

在WorkerMapper.java接口文件中添加更新的方法,并在方法上添加@updata注解

@Update("update tb_worker set name = #{name},age = #{age} "
        +"where id = #{id}")
int updateWorker(Worker worker);

②编写测试类

在MyBatisTest.java文件中添加:

@Test
public void updateWorkerTest() {
    SqlSession session = MybatisUtils.getSession();
    Worker worker = new Worker();
    worker.setId(4);
    worker.setName("孙昊楠5");
    worker.setAge(28);
    WorkerMapper mapper = session.getMapper(WorkerMapper.class);
    int result = mapper.updateWorker(worker);
    if (result > 0) {
        System.out.println("成功更新" + result + "条数据");
    } else {
        System.out.println("更新数据失败");
    }
    System.out.println(worker.toString());
    session.commit();
    session.close();
}

运行结果:

(4)删除操作:

①修改WorkerMapper.java文件

在WorkerMapper.java接口文件中添加删除的方法,并在方法上添加@Delete注解

@Delete("delete from tb_worker where id = #{id}")
int deleteWorker(int id);

②编写测试类

在MyBatisTest.java文件中添加:

@Test
public void deleteWorkerTest() {
    SqlSession session = MybatisUtils.getSession();
    WorkerMapper mapper = session.getMapper(WorkerMapper.class);
    int result = mapper.deleteWorker(4);
    if (result > 0) {
        System.out.println("成功删除" + result + "条数据");
    } else {
        System.out.println("删除数据失败");
    }
    session.commit();
    session.close();
}

运行结果:

2.MyBatis注解实现简单查询

(1)修改WorkerMapper.java文件

在WorkerMapper.java接口文件中添加查询的方法,并在方法上添加@Select注解

@Select("select * from tb_worker where id = #{id}")
Worker selectWorker(int id);

(2)编写测试类

在MyBatisTest.java文件中添加:

@Test
public void findWorkerByIdTest() {
    SqlSession session = MybatisUtils.getSession();
    WorkerMapper mapper = session.getMapper(WorkerMapper.class);
    Worker worker = mapper.selectWorker(1);
    System.out.println(worker.toString());
    session.close();
}

运行结果:

3.MyBatis注解实现一对一查询

(1)数据准备

使用实验三的tb_idcard表和tb_person表

(2)创建POJO实体类

使用实验三的IdCard类和Person类

(3)创建IdCardMapper接口

在src\main\java\com\sun\dao文件夹中创建IdCardMapper.java

package com.sun.dao;
import com.sun.pojo.IdCard;
import org.apache.ibatis.annotations.Select;
public interface IdCardMapper {
    @Select("select * from tb_idcard where id=#{id}")
    IdCard selectIdCardById(int id);
}

(4)创建PersonMapper接口

在src\main\java\com\sun\dao文件夹中创建PersonMapper.java

package com.sun.dao;
导入相关包...
public interface PersonMapper {
    @Select("select * from tb_person where id=#{id}")
    @Results({@Result(column = "card_id", property = "card",
            one = @One(select =
                    "com.sun.dao.IdCardMapper.selectIdCardById"))})
    Person selectPersonById(int id);
}

(5)修改mybatis-config.xml文件

在mybatis-config.xml文件的<mappers>元素下引入IdCardMapper接口和 PersonMapper接口

<mapper class="com.sun.dao.IdCardMapper"/>
<mapper class="com.sun.dao.PersonMapper"/>

(6)创建测试类

在MyBatisTest.java文件中添加:

@Test
public void selectPersonByIdTest() {
    SqlSession session = MybatisUtils.getSession();
    PersonMapper mapper = session.getMapper(PersonMapper.class);
    Person person = mapper.selectPersonById(1);
    System.out.println(person.toString());
    session.close();
}

运行结果:

4.MyBatis注解实现一对多关联查询

(1)数据准备

使用实验三的tb_user表和tb_orders表

(2)创建POJO实体类

使用实验三的Users类和Orders类

(3)创建OrdersMapper接口

在src\main\java\com\sun\dao文件夹中创建OrdersMapper.java

package com.sun.dao;
导入相关包...
public interface OrdersMapper {
    @Select("select * from tb_orders where user_id=#{id} ")
    @Results({@Result(id = true, column = "id", property = "id"),
            @Result(column = "number", property = "number")
    })
    List<Orders> selectOrdersByUserId(int user_id);
}

(4)创建UsersMapper接口

在src\main\java\com\sun\dao文件夹中创建UsersMapper.java

package com.sun.dao;
导入相关包...
public interface UsersMapper {
    @Select("select * from tb_user where id=#{id} ")
    @Results({@Result(id = true, column = "id", property = "id"),
            @Result(column = "username", property = "username"),
            @Result(column = "address", property = "address"),
            @Result(column = "id", property = "ordersList",
                    many = @Many(select =
                            "com.sun.dao.OrdersMapper.selectOrdersByUserId"))})
    Users selectUserById(int id);
}

(5)修改mybatis-config.xml文件

在mybatis-config.xml文件的<mappers>元素下引入OrdersMapper接口和UsersMapper接口

<mapper class="com.sun.dao.OrdersMapper"/>
<mapper class="com.sun.dao.UsersMapper"/>

(6)创建测试类

在MyBatisTest.java文件中添加:

@Test
public void selectUserByIdTest() {
    SqlSession session = MybatisUtils.getSession();
    UsersMapper mapper = session.getMapper(UsersMapper.class);
    Users users = mapper.selectUserById(1);
    System.out.println(users.toString());
    session.close();
}

运行结果:

5.MyBatis注解实现多对多查询

(1)创建ProductMapper接口

在src\main\java\com\sun\dao文件夹中创建ProductMapper.java

package com.sun.dao;
导入相关包...
public interface ProductMapper {
    @Select("select * from tb_product where id in (select product_id from " +
            "tb_ordersitem where orders_id = #{id} )")
    List<Product> selectProductByOrdersId(int orders_id);
}

(2)修改OrdersMapper接口

在OrdersMapper.java中添加方法

@Select("select * from tb_orders where id=#{id} ")
@Results({@Result(id = true, column = "id", property = "id"),
        @Result(column = "number", property = "number"),
        @Result(column = "id", property = "productList",
                many = @Many(select =
                        "com.sun.dao.ProductMapper.selectProductByOrdersId"))})
Orders selectOrdersById(int id);

(3)修改mybatis-config.xml文件

在mybatis-config.xml文件的<mappers>元素下引入ProductMapper接口

<mapper class="com.sun.dao.ProductMapper"/>

(4)编写测试类

在MyBatisTest.java文件中添加:

@Test
public void selectOrdersByIdTest() {
    SqlSession session = MybatisUtils.getSession();
    OrdersMapper mapper = session.getMapper(OrdersMapper.class);
    Orders orders = mapper.selectOrdersById(3);
    System.out.println(orders.toString());
    session.close();
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小孙同学1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值