本栏博客目录

一、Spring的IOC和DI 二、IoC和DI注解开发 三、SpringMVC入门 四、SpringMVC的请求和响应 五、JdbcTemplate 六、Spring练习 七、SpringMVC拦截器 八、SpringMVC异常处理机制 九、面向切面编程AOP 十、声明式事务控制 十一、MyBatis入门操作 十二、MyBatis的Dao层实现方式 十三、MyBatis映射文件深入 十四、MyBatis核心配置文件深入 十五、MyBatis的多表操作 十六、Mybatis的注解开发 十七、SSM框架整合

文章目录

MyBatis的常用注解MyBatis的增删改查MyBatis的注解实现复杂映射开发一对一查询1. 一对一查询的模型2. 一对一查询的语句3. 创建Order和User实体4. 创建OrderMapper接口5. 使用注解配置Mapper6. 测试结果

一对多查询1. 一对多查询的模型2. 一对多查询的语句3. 修改User实体4. 创建UserMapper接口5. 使用注解配置Mapper6. 测试结果

多对多查询1. 多对多查询的模型2. 多对多查询的语句3. 创建Role实体,修改User实体4. 添加UserMapper接口方法5. 使用注解配置Mapper6. 测试结果

MyBatis的常用注解

这几年来注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以减少编写Mapper映射文件了。

@Insert:实现新增 @Update:实现更新 @Delete:实现删除 @Select:实现查询 @Result:实现结果集封装 @Results:可以与@Result 一起使用,封装多个结果集 @One:实现一对一结果集封装 @Many:实现一对多结果集封装

MyBatis的增删改查

简单的 user 表的增删改查的操作

@Insert("insert into user2 values(#{id},#{username},#{password},#{birthday})")

public void save(User user);

@Select("select * from user2 where id=#{id}")

public User findById(int id);

@Select("select * from user2")

public List findAll();

@Update("update user2 set usernme=${username}, password=#{password} where id=#{id}")

public void update(User user);

@Delete("delete from user2 where id=#{id}")

public void delete(int id);

修改MyBatis的核心配置文件,我们使用了注解替代的映射文件,所以我们只需要加载使用了注解的Mapper接口即可

或者指定扫描包含映射关系的接口所在的包也可以

MyBatis的注解实现复杂映射开发

实现复杂关系映射之前我们可以在映射文件中通过配置来实现,使用注解开发后,我们可以使用@Results注解,@Result注解,@One注解,@Many注解组合完成复杂关系的配置

一对一查询

1. 一对一查询的模型

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户

2. 一对一查询的语句

对应的sql语句: select * from orders; select * from user where id=查询出订单的uid; 查询的结果如下:

3. 创建Order和User实体

4. 创建OrderMapper接口

5. 使用注解配置Mapper

OrderMapper.java

@Select("select * from orders")

@Results({

@Result(column = "id", property = "id"),

@Result(column = "ordertime", property = "ordertime"),

@Result(column = "total", property = "total"),

@Result(

property = "user", // 要封装的属性名称

column = "uid", // 根据那个字段取查询user表的数据

javaType = User.class, // 要封装的实体类型

// select属性 代表查询那个接口的方法获得数据

one = @One(select = "com.lzjtu.mapper.UserMapper.findById")

)

})

public List findAll();

UserMapper.java

@Select("select * from user2 where id=#{id}")

public User findById(int id);

写法二

@Select("select *,o.id oid from orders o, user2 u where o.uid=u.id")

@Results({

@Result(column = "oid", property = "id"),

@Result(column = "ordertime", property = "ordertime"),

@Result(column = "total", property = "total"),

@Result(column = "uid", property = "user.id"),

@Result(column = "username", property = "user.username"),

@Result(column = "password", property = "user.password")

})

public List findAll();

6. 测试结果

一对多查询

1. 一对多查询的模型

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户一对多查询的需求:查询一个用户,与此同时查询出该用户具有的订单

2. 一对多查询的语句

对应的sql语句: select * from user; select * from orders where uid=查询出用户的id; 查询的结果如下:

3. 修改User实体

4. 创建UserMapper接口

5. 使用注解配置Mapper

UserMapper.java

@Select("select * from user2")

@Results({

@Result(id=true, column = "id", property = "id"),

@Result(column = "username", property = "username"),

@Result(column = "password", property = "password"),

@Result(

property = "orderList",

column = "id",

javaType = List.class,

many = @Many(select = "com.lzjtu.mapper.OrderMapper.findByUid")

)

})

public List findUserAndOrderAll();

OrderMapper.java

@Select("select * from orders where id=#{uid}")

public List findByUid(int uid);

6. 测试结果

多对多查询

跟一对多写法差不多(除了查询语句)

1. 多对多查询的模型

用户表和角色表的关系为,一个用户有多个角色,一个角色被多个用户使用 多对多查询的需求:查询用户同时查询出该用户的所有角色

2. 多对多查询的语句

对应的sql语句: select * from user; select * from role r,user_role ur where r.id=ur.role_id and ur.user_id=用户的id 查询的结果如下:

3. 创建Role实体,修改User实体

4. 添加UserMapper接口方法

5. 使用注解配置Mapper

UserMapper.java

@Select("select * from user2")

@Results({

@Result(id = true, column = "id", property = "id"),

@Result(column = "username", property = "username"),

@Result(column = "password", property = "password"),

@Result(

property = "roleList",

column = "id",

javaType = List.class,

many = @Many(select = "com.lzjtu.mapper.RoleMapper.findByUid")

)

})

public List findUserAndRoleAll();

RoleMapper.java

@Select("select * from sys_user_role ur,sys_role r where ur.roleId=r.id and ur.userId=#{id}")

public List findByUid(int id);

6. 测试结果

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: