MyBatis的Mapper代理模式開發

  使用這種模式程序員須要編寫mapper.xml文件,程序員編寫mapper接口要遵循規範,mybatis能夠自動生成mapper接口實現類代理對象。html

開發規範:
1.在mapper.xml中namespace等於mapper接口地址。
<mapper namespace="com.test.dao.UserMapper">
2.mapper.java接口中的方法名和mapper.xml中statement的id的名字一致。
<select id="findUserById"
3.mapper.java接口中方法輸入參數類型和mapper.xml中statement的parameterType指定的類型保持一致。
4.mapper.java接口中的方法返回值類型和mapper.xml中statement的resultType指定的類型保持一致。java

案例以下:程序員

1.User.java 文件參考MyBatis實現增刪改查spring

2.SqlMapConfig.xmlsql

 1 <!DOCTYPE configuration
 2 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 3 "http://mybatis.org/dtd/mybatis-3-config.dtd">
 4 <configuration>
 5     <!-- 和spring整合後 environments配置將廢除  mybatis-config.xml-->
 6     <environments default="development">
 7         <environment id="development">
 8         <!-- 使用jdbc事務管理-->
 9             <transactionManager type="JDBC" />
10         <!-- 數據庫鏈接池-->
11             <dataSource type="POOLED">
12                 <property name="driver" value="oracle.jdbc.driver.OracleDriver" />
13                 <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
14                 <property name="username" value="dsx" />
15                 <property name="password" value="admin" />
16             </dataSource>
17         </environment>
18     </environments>
19     
20     <!-- 加載mapper.xml -->
21     <mappers>
22         <mapper resource="com/test/dao/UserMapper.xml" />
23     </mappers>
24     
25 </configuration>

3.UserMapper.java接口數據庫

package com.test.dao;

import com.test.entity.User;
/**
 * 
 * @author Mr
 * Mapper接口代理模式開發命名必定是:實體類名+Mapper
 * 
 * 使用mapper開發步驟:
 *     1.編寫接口和mapper.xml要遵循4個指標
 *     2.SqlMapConfig.xml中加載UserMapper.xml
 */
public interface UserMapper {
    //根據用戶id查詢用戶
    public User findUserById(int id);
    //添加用戶
    public void addUser(User user);
    //刪除用戶條目
    public void delUserById(int id);
    //根據id更新用戶信息
    public void upUserById(int id);
}

4.UserMapper.xml配置文件 和第3步在同一包下apache

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <!-- namespace命名空間是UserMapper接口的全類名-->
 6 <mapper namespace="com.test.dao.UserMapper">
 7 <!-- 這裏能夠配置多個sql
 8     根據用戶的id查詢
 9  -->
10  <select id="findUserById" parameterType="int" resultType="com.test.entity.User">
11      select * from userss WHERE ID=#{id}
12  </select>
13  <!-- 添加用戶 -->
14  <insert id="addUser" parameterType="com.test.entity.User">
15      insert into userss values(seq_users_id.nextval,#{username},#{birthday},#{sex},#{address})
16  </insert>
17  
18  </mapper>

5.測試類session

 1 package com.test.demo;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.util.Date;
 6 
 7 import org.apache.ibatis.io.Resources;
 8 import org.apache.ibatis.session.SqlSession;
 9 import org.apache.ibatis.session.SqlSessionFactory;
10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
11 
12 import com.test.dao.UserMapper;
13 import com.test.entity.User;
14 
15 /**
16  * 
17  * @author Mr
18  * 只寫了接口,沒有寫接口的實現類
19  */
20 public class Test3 {
21 
22     public static void main(String[] args) {
23         // TODO Auto-generated method stub
24         try {
25             //mybatis核心配置文件
26             String resource = "SqlMapConfig.xml";
27             //讀取配置文件
28             InputStream inputStream = Resources.getResourceAsStream(resource);
29             //獲取工廠
30             SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
31             //獲取數據庫操做對象
32             SqlSession sqlSession = sf.openSession();
33             //經過反射機制自動生成接口實現類
34             UserMapper um = sqlSession.getMapper(UserMapper.class);
35 /*            //調用方法獲取對象
36             User user = um.findUserById(31);
37             System.out.println(user);*/
38             
39             //添加用戶
40             User user = new User("老趙", new Date(), "1", "寧夏回族自治區");
41             um.addUser(user);
42             sqlSession.commit();
43             System.out.println(user);
44             
45         } catch (IOException e) {
46             // TODO Auto-generated catch block
47             e.printStackTrace();
48         }
49         
50 
51     }
52 
53 }
相關文章
相關標籤/搜索