基于注解的单表增删改查
基于注解的关联查询
一、需求分析
掌握基于注解的单表增删改查, 熟悉基于注解的一对一关联查询, 熟悉基于注解的一对多关联查询、熟悉基于注解的多对多关联查询 。
二、搭建环境
1)数据库环境
mybatis数据库,运行mybatistest05.sql
2)引入依赖
pom.xml文件
3)配置文件
src/main/resources,数据库连接配置文件db.properties,log4j配置文件log4j.properties,MyBatis的核心配置文件mybatis-config.xml。
4)新建包和目录
src/main/java,新建com.sw.pojo包
src/main/java,新建com.sw.mapper包
src/main/java,新建com.sw.util包,工具类MyBatisUtils
src/main/resources,新建com/sw/mapper目录
三、基于注解的单表增删改查
员工信息表的增删改查
1)数据封装类
com.sw.pojo包,新建Worker类
public class Worker {
private Integer id;
private String name;
private Integer age;
private String sex;
private String workerId;
//get、set
//tostring
}
2)@Select注解
com.sw.mapper包,WorkerMapper接口
@Select("select * from tb_worker where id = #{id}")
Worker getOne(int id);
3)@Insert注解
com.sw.mapper包,WorkerMapper接口
@Insert("insert into tb_worker(id,name,age,sex,worker_id) values(null,#{name},#{age},#{sex},#{workerId})")
@Options(keyProperty = "id",keyColumn = "id",useGeneratedKeys = true)
int insertOne(Worker worker);
4)@Update注解
com.sw.mapper包,WorkerMapper接口
@Update("update tb_worker set name=#{name},age=#{age},sex=#{sex},worker_id=#{workerId} where id=#{id}")
int updateOne(Worker worker);
5)@Delete注解
com.sw.mapper包,WorkerMapper接口
@Delete("delete from tb_worker where id=#{id}")
int deleteOne(int id);
四、基于注解的关联查询
1)基于注解的一对一关联查询
com.sw.pojo包,新建IdCard类
public class IdCard{
private Integer id;
private String code;
//get、set
//tostring
}
com.sw.pojo包,新建Person类
public class Person{
private Integer id;
private String name;
private Integer age;
private String sex;
private IdCard idCard;
//get、set
//tostring
}
com.sw.mapper包,新建IdCardMapper接口。
@Select("select * from tb_idcard where id=#{id}")
IdCard getOne(int id);
com.sw.mapper包,新建PersonMapper接口。
@Select("select * from tb_person where id=#{id}")
@Results({
@Result(id = true,property = "id",column = "id"),
@Result(property = "name",column = "name"),
@Result(property = "age",column = "age"),
@Result(property = "sex",column = "sex"),
@Result(property = "idCard",column = "card_id",
one = @One(select="com.sw.mapper.IdCardMapper.getOne"))})
Person getOne(int id);
2)基于注解的一对多关联查询
com.sw.pojo包,新建Order类
public class Order{
private Integer id;
private String number;
//get、set
//tostring
}
com.sw.pojo包,新建User类
public class User{
private Integer id;
private String username;
private String address;
List<Order> orderList;
//get、set
//tostring
}
com.sw.mapper包,新建OrderMapper接口。
@Select(" select * from tb_orders where user_id = #{userId}")
List<Order> getList(int userId);
com.sw.mapper包,新建UserMapper接口。
@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 = "orderList",column = "id",
many = @Many(select = "com.sw.mapper.OrderMapper.getList")),
})
User getOne(int id);
3)基于注解的多对多关联查询
com.sw.pojo包,Order类
public class Order{
private Integer id;
private String number;
private List<Product> productList;
//get、set
//tostring
}
com.sw.pojo包,新建Product类
public class Product{
private Integer id;
private String name;
private Double price;
private List<Order> orderList;
//get、set
//tostring
}
com.sw.mapper包,新建ProductMapper接口。
@Select("SELECT * FROM tb_product ,tb_ordersitem\n" +
"WHERE tb_ordersitem.product_id=tb_product.id\n" +
"AND tb_ordersitem.orders_id=#{orderId}")
List<Product> getList(int orderId);
com.sw.mapper包,OrderMapper接口。
@Select("SELECT * FROM tb_orders WHERE id=#{id}")
@Results({
@Result(id = true,property = "id",column = "id"),
@Result(property = "number",column = "number"),
@Result(property = "productList",column = "id",
many = @Many(select = "com.sw.mapper.ProductMapper.getList"))
})
Order getOne(int id);