一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java Mybatis框架多表操作與注解開發詳解分析

Java Mybatis框架多表操作與注解開發詳解分析

2022-03-03 00:36龍弟-idea Java教程

MyBatis 是一款優秀的持久層框架,它支持自定義 SQL、存儲過程以及高級映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設置參數和獲取結果集的工作。MyBatis 可以通過簡單的 XML 或注解來配置和映射原始類型、接口和 Java POJO為數據庫中

一對一查詢

一對一查詢的模型

用戶表和訂單表的關系為,一個用戶有多個訂單,一個訂單只從屬于一個用戶。

一對一查詢的需求:查詢一個訂單,與此同時查詢出該訂單所屬的用戶

Java Mybatis框架多表操作與注解開發詳解分析

一對一查詢的語句

對應的sql語句: select * from orders o,user u where o.uid=u.id;查詢的結果如下:

Java Mybatis框架多表操作與注解開發詳解分析

創建Order和User實體

Java Mybatis框架多表操作與注解開發詳解分析

創建OrderMapper接口

public interface OrderMapper {

  //查詢全部的方法
  public List<Order> findAll();
}

配置OrderMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.longdi.mapper.OrderMapper">

  <resultMap id="orderMap" type="order">
      <!--手動指定字段與實體屬性的映射關系
          column: 數據表的字段名稱
          property:實體的屬性名稱
      -->
      <id column="oid" property="id"></id>
      <result column="ordertime" property="ordertime"></result>
      <result column="total" property="total"></result>
      <!--<result column="uid" property="user.id"></result>
      <result column="username" property="user.username"></result>
      <result column="password" property="user.password"></result>
      <result column="birthday" property="user.birthday"></result>-->

      <!--
          property: 當前實體(order)中的屬性名稱(private User user)
          javaType: 當前實體(order)中的屬性的類型(User)
      -->
      <association property="user" javaType="user">
          <id column="uid" property="id"></id>
          <result column="username" property="username"></result>
          <result column="password" property="password"></result>
          <result column="birthday" property="birthday"></result>
      </association>

  </resultMap>

  <select id="findAll" resultMap="orderMap">
       SELECT *,o.id oid FROM orders o,USER u WHERE o.uid=u.id
  </select>

</mapper>

配置UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.longdi.mapper.UserMapper">


  <resultMap id="userMap" type="user">
      <id column="uid" property="id"></id>
      <result column="username" property="username"></result>
      <result column="password" property="password"></result>
      <result column="birthday" property="birthday"></result>
      <!--配置集合信息
          property:集合名稱
          ofType:當前集合中的數據類型
      -->
      <collection property="orderList" ofType="order">
          <!--封裝order的數據-->
          <id column="oid" property="id"></id>
          <result column="ordertime" property="ordertime"></result>
          <result column="total" property="total"></result>
      </collection>
  </resultMap>

  <select id="findAll" resultMap="userMap">
      SELECT *,o.id oid FROM USER u,orders o WHERE u.id=o.uid
  </select>

  <!--#############################################################################-->

  <resultMap id="userRoleMap" type="user">
      <!--user的信息-->
      <id column="userId" property="id"></id>
      <result column="username" property="username"></result>
      <result column="password" property="password"></result>
      <result column="birthday" property="birthday"></result>
      <!--user內部的roleList信息-->
      <collection property="roleList" ofType="role">
          <id column="roleId" property="id"></id>
          <result column="roleName" property="roleName"></result>
          <result column="roleDesc" property="roleDesc"></result>
      </collection>
  </resultMap>

  <select id="findUserAndRoleAll" resultMap="userRoleMap">
      SELECT * FROM USER u,sys_user_role ur,sys_role r WHERE u.id=ur.userId AND ur.roleId=r.id
  </select>

</mapper>

配置sqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

  <!--通過properties標簽加載外部properties文件-->
  <properties resource="jdbc.properties"></properties>

  <!--自定義別名-->
  <typeAliases>
      <typeAlias type="com.longdi.domain.User" alias="user"></typeAlias>
      <typeAlias type="com.longdi.domain.Order" alias="order"></typeAlias>
      <typeAlias type="com.longdi.domain.Role" alias="role"></typeAlias>
  </typeAliases>

  <!--數據源環境-->
  <environments default="developement">
      <environment id="developement">
          <transactionManager type="JDBC"></transactionManager>
          <dataSource type="POOLED">
              <property name="driver" value="${jdbc.driver}"/>
              <property name="url" value="${jdbc.url}"/>
              <property name="username" value="${jdbc.username}"/>
              <property name="password" value="${jdbc.password}"/>
          </dataSource>
      </environment>
  </environments>
  

  <!--加載映射文件-->
  <mappers>
      <mapper resource="com/longdi/mapper/UserMapper.xml"></mapper>
      <mapper resource="com/longdi/mapper/OrderMapper.xml"></mapper>
  </mappers>
</configuration>

測試代碼

  @Test
  public void test1() throws IOException {
      InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
      SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
      SqlSession sqlSession = sqlSessionFactory.openSession();

      OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);
      List<Order> orderList = mapper.findAll();
      for (Order order : orderList) {
          System.out.println(order);
      }
      sqlSession.close();
  }

一對多查詢

一對多查詢模型

用戶表和訂單表的關系為,一個用戶有多個訂單,一個訂單只從屬于一個用戶一對多查詢的需求:查詢一個用戶,與此同時查詢出該用戶具有的訂單

Java Mybatis框架多表操作與注解開發詳解分析

對應的sql語句: select *,o.id oid from user u left join orders o on u.id=o.uid;查詢的結果如下:

Java Mybatis框架多表操作與注解開發詳解分析

SELECT *,o.id oid FROM USER u, orders o WHERE u.id=o.uid

Java Mybatis框架多表操作與注解開發詳解分析

修改User實體

Java Mybatis框架多表操作與注解開發詳解分析

創建UserMapper接口

Java Mybatis框架多表操作與注解開發詳解分析

配置UserMapper.xml
測試結果

Java Mybatis框架多表操作與注解開發詳解分析

 

多對多查詢

多對多查詢的模型
用戶表和角色表的關系為,一個用戶有多個角色,一個角色被多個用戶使用多對多查詢的需求:查詢用戶同時查詢出該用戶的所有角色

Java Mybatis框架多表操作與注解開發詳解分析

多對多查詢的語句

對應的sql語句: select u.*,r.*,r.id rid from user u left join user_role ur on u.id=ur.user_idinner join role r on ur.role_id=r.id;
查詢的結果如下:

Java Mybatis框架多表操作與注解開發詳解分析

創建Role實體,修改User實體

Java Mybatis框架多表操作與注解開發詳解分析

添加UserMapper接口方法

Java Mybatis框架多表操作與注解開發詳解分析

配置UserMapper.xml(上面)
測試代碼

Java Mybatis框架多表操作與注解開發詳解分析

總結:

MyBatis多表配置方式:

一對一配置:使用<resultMap>做配置
一對多配置:使用<resultMap>+<collection>做配置

多對多配置:使用<resultMap>+<collection>做配置

 

Mybatis的注解開發

Mybatis的常用注解

這幾年來注解開發越來越流行,Mybatis也可以使用注解開發方式,這樣我們就可以減少編寫Mapper映射文件了。我們先圍繞一些基本的CRUD來學習,再學習復雜映射多表操作。
@Insert:實現新增
@Update:實現更新@Delete:實現刪除@Select:實現查詢
@Result:實現結果集封裝
@Results:可以與@Result一起使用,封裝多個結果集@One:實現一對一結果集封裝
@Many:實現一對多結果集封裝

Mybatis的增刪查改

  private UserMapper mapper;

  @Before
  public void before() throws IOException {
      InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
      SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
      SqlSession sqlSession = sqlSessionFactory.openSession(true);
      mapper = sqlSession.getMapper(UserMapper.class);
  }
 @Test
  public void testSave(){
      User user = new User();
      user.setUsername("tom");
      user.setPassword("abc");
      mapper.save(user);
  }

  @Test
  public void testUpdate(){
      User user = new User();
      user.setId(18);
      user.setUsername("lucy");
      user.setPassword("123");
      mapper.update(user);
  }

  @Test
  public void testDelete(){
      mapper.delete(18);
  }

  @Test
  public void testFindById(){
      User user = mapper.findById(2);
      System.out.println(user);
  }

  @Test
  public void testFindAll(){
      List<User> all = mapper.findAll();
      for (User user : all) {
          System.out.println(user);
      }
  }

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

  <!--加載映射關系-->
  <mappers>
      <!--掃描使用注解的類-->
      <package name="com.longdi.mapper.UserMapper"></package>
  </mappers>

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

  <!--加載映射關系-->
  <mappers>
      <!--指定接口所在的包-->
      <package name="com.longdi.mapper"></package>
  </mappers>

UserMapper:

public interface UserMapper {

  @Insert("insert into user values(#{id},#{username},#{password},#{birthday})")
  public void save(User user);

  @Update("update user set username=#{username},password=#{password} where id=#{id}")
  public void update(User user);

  @Delete("delete from user where id=#{id}")
  public void delete(int id);

  @Select("select * from user where id=#{id}")
  public User findById(int id);

  @Select("select * from user")
  public List<User> findAll();

  @Select("select * from user")
  @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.longdi.mapper.OrderMapper.findByUid")
          )
  })
  public List<User> findUserAndOrderAll();


  @Select("SELECT * FROM USER")
  @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.longdi.mapper.RoleMapper.findByUid")
          )
  })
  public List<User> findUserAndRoleAll();


}

MyBatis的注解實現復雜映射開發

實現復雜關系映射之前我們可以在映射文件中通過配置<resultMap>來實現,使用注解開發后,我們可以使用@Results注解,@Result注解,@One注解,@Many注解組合完成復雜關系的配置

Java Mybatis框架多表操作與注解開發詳解分析

Java Mybatis框架多表操作與注解開發詳解分析

一對一查詢(使用注解配置Mapper)

Java Mybatis框架多表操作與注解開發詳解分析

測試代碼:

Java Mybatis框架多表操作與注解開發詳解分析

一對多查詢(使用注解配置Mapper)

Java Mybatis框架多表操作與注解開發詳解分析

測試代碼;

Java Mybatis框架多表操作與注解開發詳解分析

多對多查詢(使用注解配置mapper)

Java Mybatis框架多表操作與注解開發詳解分析

測試代碼:

Java Mybatis框架多表操作與注解開發詳解分析

到此這篇關于Java Mybatis框架多表操作與注解開發詳解分析的文章就介紹到這了,更多相關Java Mybatis內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/weixin_48838340/article/details/120919790

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99ri国产精品 | 久久精品视频在线看 | 美女被灌浣肠失禁视频 | 成人国产精品视频 | 免费看打屁股视频的软件 | 久久综合给会久久狠狠狠 | 奇米网狠狠网 | 99热网址| 欧美一级片免费在线观看 | 国产在线观看91精品一区 | 天海翼最新作品 | 免费观看欧美性一级 | 久久丫线这里只精品 | 亚洲精品在线免费看 | 私人黄色 | 黑人粗长大战亚洲女 | 免费看男女做好爽好硬视频 | 办公室出轨秘书高h | 青青在线观看视频 | 护士videossexo另类 | 国产成人免费a在线资源 | 国产成人综合一区人人 | 国产激情久久久久影院小草 | 美女脱了内裤打开腿让你桶爽 | 日本特级a禁片在线播放 | yy6080午夜国产免费福利 | 91韩国女主播 | 毛片免费全部免费观看 | 大学生宿舍飞机china free | 视频一区在线免费观看 | 大象传媒短视频网站 | 精品操 | 1986葫芦兄弟全集免费观看第十集 | 蜜月aⅴ免费一区二区三区 蜜桃影像传媒推广 | 国产在线乱子伦一区二区 | 5278欧美一区二区三区 | 精品精品国产自在现拍 | 欧美精品国产第一区二区 | 国产成人综合精品一区 | 草留色区| 欧美video丝袜连裤袜bd |