QQ:5654880

MyBatis的Mapper代理模式开发

  使用这种模式程序员需要编写mapper.xml文件,程序员编写mapper接口要遵循规范,mybatis可以自动生成mapper接口实现类代理对象。

开发规范:
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指定的类型保持一致。

案例如下:

1.User.java 文件参考MyBatis实现增删改查

2.SqlMapConfig.xml

 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步在同一包下

 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.测试类

 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 }

 

posted @ 2017-10-10 15:53  大师兄丶2K  阅读(828)  评论(0编辑  收藏  举报