当前位置:   article > 正文

SSM学习笔记16 MyBatis注解开发(小总结)_mybatis的注解开发实验总结

mybatis的注解开发实验总结

先学xml,再学注解

MyBatis的常用注解

@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以与@Result-一起使用,封装多个结果集(比Result范围大)
@One:实现一对结果集封装
@Many:实现一对多结果集封装(一对多可能部分要手动映射)

简单查询

只是把xml的关系,用注解的方式配置到接口的方法上

usermapper

  1. @Insert("insert into user values(#{id},#{username},#{password},#{birthday})")
  2. public void save(User user);
  3. @Update("update user set username=#{username},password=#{password} where id=#{id}")
  4. public void update(User user);
  5. @Delete("delete from user where id=#{id}")
  6. public void delete(int id);
  7. @Select("select * from user where id=#{id}")
  8. public User findById(int id);
  9. @Select("select * from user")
  10. public List<User> findAll();

sqlMapConfig.xml

  1. <!--加载映射关系-->
  2. <mappers>
  3. <!--指定接口所在的包-->
  4. <package name="com.itheima.mapper"></package>
  5. </mappers>

复杂查询

 demo:一对一查询:查询订单的同时查询与该订单相关的用户

ordermapper.java

  1. package com.itheima.mapper;
  2. import com.itheima.domain.Order;
  3. import com.itheima.domain.User;
  4. import org.apache.ibatis.annotations.One;
  5. import org.apache.ibatis.annotations.Result;
  6. import org.apache.ibatis.annotations.Results;
  7. import org.apache.ibatis.annotations.Select;
  8. import java.util.List;
  9. public interface OrderMapper {
  10. @Select("select * from orders where uid=#{uid}")
  11. public List<Order> findByUid(int uid);
  12. @Select("select * from orders")
  13. //用@Results封装映射参数,一对一查询
  14. //分表查询,不用加user.id了
  15. @Results({
  16. @Result(column = "id",property = "id"),
  17. @Result(column = "ordertime",property = "ordertime"),
  18. @Result(column = "total",property = "total"),
  19. @Result(
  20. property = "user", //要封装的属性名称
  21. column = "uid", //根据哪个字段去查询user表的数据
  22. javaType = User.class, //要封装的实体类型
  23. //select属性 代表查询哪个接口的方法获得数据,引用要查的那个表的接口方法进行查询
  24. one = @One(select = "com.itheima.mapper.UserMapper.findById")
  25. )
  26. })
  27. public List<Order> findAll();
  28. /*@Select("select *,o.id oid from orders o,user u where o.uid=u.id")
  29. //总表查询
  30. @Results({
  31. @Result(column = "oid",property = "id"),
  32. @Result(column = "ordertime",property = "ordertime"),
  33. @Result(column = "total",property = "total"),
  34. @Result(column = "uid",property = "user.id"),
  35. @Result(column = "username",property = "user.username"),
  36. @Result(column = "password",property = "user.password")
  37. })
  38. public List<Order> findAll();*/
  39. }

mybatistest2.java

  1. package com.itheima.test;
  2. import com.itheima.domain.Order;
  3. import com.itheima.domain.User;
  4. import com.itheima.mapper.OrderMapper;
  5. import com.itheima.mapper.UserMapper;
  6. import org.apache.ibatis.io.Resources;
  7. import org.apache.ibatis.session.SqlSession;
  8. import org.apache.ibatis.session.SqlSessionFactory;
  9. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  10. import org.junit.Before;
  11. import org.junit.Test;
  12. import java.io.IOException;
  13. import java.io.InputStream;
  14. import java.util.List;
  15. public class MyBatisTest2 {
  16. private OrderMapper mapper;
  17. @Before
  18. public void before() throws IOException {
  19. InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
  20. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
  21. SqlSession sqlSession = sqlSessionFactory.openSession(true);
  22. mapper = sqlSession.getMapper(OrderMapper.class);
  23. }
  24. @Test
  25. public void testSave(){
  26. List<Order> all = mapper.findAll();
  27. for (Order order : all) {
  28. System.out.println(order);
  29. }
  30. }
  31. }

sqlMapConfig.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
  3. <configuration>
  4. <!--通过properties标签加载外部properties文件-->
  5. <properties resource="jdbc.properties"></properties>
  6. <!--自定义别名-->
  7. <typeAliases>
  8. <typeAlias type="com.itheima.domain.User" alias="user"></typeAlias>
  9. </typeAliases>
  10. <!--数据源环境-->
  11. <environments default="developement">
  12. <environment id="developement">
  13. <transactionManager type="JDBC"></transactionManager>
  14. <dataSource type="POOLED">
  15. <property name="driver" value="${jdbc.driver}"/>
  16. <property name="url" value="${jdbc.url}"/>
  17. <property name="username" value="${jdbc.username}"/>
  18. <property name="password" value="${jdbc.password}"/>
  19. </dataSource>
  20. </environment>
  21. </environments>
  22. <!--加载映射关系-->
  23. <mappers>
  24. <!--指定接口所在的包-->
  25. <package name="com.itheima.mapper"></package>
  26. </mappers>
  27. </configuration>

一对多的注解开发

  1. @Select("select * from user")
  2. @Results({
  3. @Result(id=true ,column = "id",property = "id"),
  4. @Result(column = "username",property = "username"),
  5. @Result(column = "password",property = "password"),
  6. @Result(
  7. property = "orderList",
  8. column = "id",
  9. javaType = List.class,
  10. many = @Many(select = "com.itheima.mapper.OrderMapper.findByUid")
  11. )
  12. })
  13. public List<User> findUserAndOrderAll();

多对多查询的需求:查询用户同时查询出该用户的所有角色

一对多查询与多对多查询 ,差不多)

  1. @Select("SELECT * FROM USER")
  2. @Results({
  3. @Result(id = true,column = "id",property = "id"),
  4. @Result(column = "username",property = "username"),
  5. @Result(column = "password",property = "password"),
  6. @Result(
  7. property = "roleList",
  8. column = "id",//根据谁去查询
  9. javaType = List.class,
  10. many = @Many(select = "com.itheima.mapper.RoleMapper.findByUid")//调用了rolemapper中的sql语句
  11. )
  12. })
  13. public List<User> findUserAndRoleAll();

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/921922
推荐阅读
相关标签
  

闽ICP备14008679号