Mybatis之XML、注解


前言

  上篇簡單介紹了Mybatis的簡單實用,本篇先對上次實驗環境的一些內容進行優化,然后驗證Mybatis的XML配置以及注解方式。

實驗環境優化

  數據庫配置

  在mybatis的配置文件中,引入數據庫配置文件db.properties,然后修改配置文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
name=root
password=admin

mybatis配置文件 mybatis-config.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 resource="db.properties"/>
<!-- development : 開發模式 work : 工作模式 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${name}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/lion/mapper/UserMapper.xml" />
    </mappers>
</configuration>

實體類定義別名

  沒有為實體定義別名時,在sql映射xml中應用實體時,比如parameterType resultType 中就需要配置實體的全路徑名(全限定名)。

  當為實體定義了別名后,映射文件中可以直接配置實體的別名即可。因此為實體類定義別名,可以簡化Sql映射xml文件中對實體的引用配置。

  mybatis配置文件中<typeAlises>定義實體別名有兩種方式:

  • typeAlias 單個為每個實體定義別名 當實體類比較多是 配置增多 不方便
  • package 指定實體的包  會自動為改包下的所有實體自動設定各自的類名為別名

  

  優化后的Mybatis配置文件mybatis-config.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 resource="db.properties"/>
    
    <!-- 配置實體的別名 -->
    <typeAliases>
        <!-- 此種方式是分別為每一個實體設置別名 mapper xml 中resultType即為alias的值-->
        <!-- <typeAlias type="com.lion.pojo.User" alias="_User"/> -->
        <!-- package 設置別名的方式會自動為該包下的所有JavaBean設置別名為其類名稱 -->
        <package name="com.lion.pojo"/>
    </typeAliases>
<!-- development : 開發模式 work : 工作模式 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${name}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/lion/mapper/UserMapper.xml" />
    </mappers>
</configuration>

Mybatis實現方式

  分別使用XML和注解的方式實現對User的CURD。
  XML方式

  sql中參數定義為 #{} 在Mybatis配置文件中已經配置對實體類的自動設置別名,因此此處可以直接使用實體類的別名進行引用。

<?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.lion.mapper.UserMapper">
  <select id="selectUser" parameterType="int" resultType="User"> select * from users where id = #{id} </select>
  
  <delete id="deleteUser" parameterType="int"> delete from users where id = #{id} </delete>
  
  
  <update id="updateUser" parameterType="User"> update users set name = #{name},age = #{age} where id = #{id} </update>
   
  <insert id="addUser" parameterType="User"> insert into users(name,age) values(#{name},#{age}) </insert>
  
  <select id="selectAll" resultType="User" > select * from users </select>
</mapper>

  

 1 package com.lion.test;  2 
 3 import java.io.IOException;  4 import java.util.List;  5 
 6 import org.apache.ibatis.session.SqlSession;  7 import org.apache.ibatis.session.SqlSessionFactory;  8 import org.junit.Test;  9 
10 import com.lion.pojo.User; 11 import com.lion.util.MybatisUtils; 12 
13 public class TestUserCURDByXML { 14 
15  @Test 16     public void testAdd() { 17         try { 18             SqlSessionFactory factory = MybatisUtils.getFactory(); 19             SqlSession session = factory.openSession(); 20 
21             String statement = "com.lion.mapper.UserMapper.addUser"; 22             // id mysql設置的自增長 此處設為 -1
23             User user = new User(-1, "Spring", 25); 24  session.insert(statement, user); 25 
26             // 不提交的話 數據無法提交到數據庫
27  session.commit(); 28  session.close(); 29         } catch (IOException e) { 30  e.printStackTrace(); 31  } 32  } 33 
34  @Test 35     public void testDelete() { 36         try { 37             SqlSessionFactory factory = MybatisUtils.getFactory(); 38             // 自動提交事務
39             SqlSession session = factory.openSession(true); 40 
41             String statement = "com.lion.mapper.UserMapper.deleteUser"; 42             session.delete(statement, 4); 43 
44  session.close(); 45         } catch (IOException e) { 46  e.printStackTrace(); 47  } 48  } 49 
50  @Test 51     public void testUpdate() { 52         try { 53             SqlSessionFactory factory = MybatisUtils.getFactory(); 54             // 自動提交事務
55             SqlSession session = factory.openSession(true); 56 
57             String statement = "com.lion.mapper.UserMapper.updateUser"; 58             User user = new User(1, "mali", 18); 59  session.update(statement, user); 60 
61  session.close(); 62         } catch (IOException e) { 63  e.printStackTrace(); 64  } 65  } 66 
67  @Test 68     public void testSelect() { 69         try { 70             SqlSessionFactory factory = MybatisUtils.getFactory(); 71             // 自動提交事務
72             SqlSession session = factory.openSession(true); 73 
74             String statement = "com.lion.mapper.UserMapper.selectAll"; 75             List<User> users = session.selectList(statement); 76             for (User user : users) { 77  System.out.println(user); 78  } 79 
80  session.close(); 81         } catch (IOException e) { 82  e.printStackTrace(); 83  } 84  } 85 
86 }

  

  注解方式

 

package com.lion.testAnnotation; import java.util.List; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import com.lion.pojo.User; public interface UserMapper { @Insert("insert into users(name,age) values(#{name},#{age})") int insertUser(User user); @Delete("delete from users where id = #{id}") int deleteUser(int id); @Update("update users set name = #{name},age = #{age} where id = #{id}") int updateUser(User user); @Select("select * from users where id = #{id}") User selectUser(int id); @Select("select * from users") List<User> selectAll(); }

   Mybatis配置文件中注冊映射接口  class

 

    <mappers>
        <mapper resource="com/lion/mapper/UserMapper.xml" />
        <mapper class="com.lion.testAnnotation.UserMapper"/>
    </mappers>

 

 

 

  針對同一實體的映射文件不能放到同一個包中。

 1 package com.lion.testAnnotation;  2 
 3 import java.io.IOException;  4 import java.util.List;  5 
 6 import org.apache.ibatis.session.SqlSession;  7 import org.apache.ibatis.session.SqlSessionFactory;  8 import org.junit.Before;  9 import org.junit.Test; 10 
11 import com.lion.pojo.User; 12 import com.lion.util.MybatisUtils; 13 
14 public class TestUserCURDByAnnotaion2 { 15 
16     private SqlSessionFactory factory; 17 
18  @Before 19     public void loadFactory() { 20         try { 21             factory = MybatisUtils.getFactory(); 22         } catch (IOException e) { 23  e.printStackTrace(); 24  } 25  } 26 
27  @Test 28     public void testAdd() { 29         SqlSession session = factory.openSession(true); 30         // 映射器
31         UserMapper mapper = session.getMapper(UserMapper.class); 32 
33         int i = mapper.insertUser(new User(-1, "xiazis", 24)); 34 
35  System.out.println(i); 36 
37  session.close(); 38 
39  } 40 
41  @Test 42     public void testDelete() { 43         SqlSession session = factory.openSession(true); 44         // 映射器
45         UserMapper mapper = session.getMapper(UserMapper.class); 46 
47         int i = mapper.deleteUser(1); 48 
49  System.out.println(i); 50 
51  session.close(); 52 
53  } 54 
55  @Test 56     public void testUpdate() { 57         SqlSession session = factory.openSession(true); 58         // 映射器
59         UserMapper mapper = session.getMapper(UserMapper.class); 60 
61         int i = mapper.updateUser(new User()); 62 
63  System.out.println(i); 64 
65  session.close(); 66 
67  } 68 
69  @Test 70     public void testSelect() { 71         SqlSession session = factory.openSession(true); 72         // 映射器
73         UserMapper mapper = session.getMapper(UserMapper.class); 74 
75         User user = mapper.selectUser(2); 76 
77  System.out.println(user); 78 
79  session.close(); 80 
81  } 82 
83  @Test 84     public void testSelectAll() { 85         SqlSession session = factory.openSession(true); 86         // 映射器
87         UserMapper mapper = session.getMapper(UserMapper.class); 88 
89         List<User> users = mapper.selectAll(); 90 
91         for (User user : users) { 92  System.out.println(user); 93  } 94 
95  session.close(); 96 
97  } 98 
99 }

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM