Mybatis配置Mapper

发布时间:2018-07-02 09:00:25   来源:文档文库   
字号:

Mybatis配置Mapper

 我们知道在Mybatis中定义Mapper信息有两种方式,一种是利用xml写一个对应的包含Mapper信息的配置文件;另一种就是定义一个Mapper接口,然后定义一些相应的操作方法,再辅以相应的操作注解。

       现假设我有这样一个实体类:

Java代码  

1. package com.tiantian.mybatis.model;  

2.    

3. public class User {  

4.    

5.     private int id;  

6.     private String name;  

7.     private int age;  

8.     public int getId() {  

9.        return id;  

10.     }  

11.     public void setId(int id) {  

12.        this.id = id;  

13.     }  

14.     public String getName() {  

15.        return name;  

16.     }  

17.     public void setName(String name) {  

18.        this.name = name;  

19.     }  

20.     public int getAge() {  

21.        return age;  

22.     }  

23.     public void setAge(int age) {  

24.        this.age = age;  

25.     }  

26.      

27. }  

 

       它对应的数据库表结构是这样的:


 

然后我要利用Mybatis对它做一个简单的增删改查操作,那么如果利用xml配置Mapper的方式来定义的话,我对应的UserMapper.xml文件会是这样:

Xml代码  

1.   

2.

3.   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  

4.   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  

5.    

6.   

7.       

8.        insert into t_user(name, age) values(#{name}, #{age})  

9.       

10.      

11.       

12.        update t_user set name=#{name}, age=#{age} where id=#{id}  

13.       

14.      

15.       

16.        select * from t_user where id=#{id}  

17.       

18.      

19.       

20.        delete from t_user where id=#{id}  

21.       

22.   

 

       如果使用接口加注解的方式,那么我们的UserMapper接口应该这样定义:

Java代码  

1. package com.tiantian.mybatis.mapperinterface;  

2.    

3. import org.apache.ibatis.annotations.Delete;  

4. import org.apache.ibatis.annotations.Insert;  

5. import org.apache.ibatis.annotations.Select;  

6. import org.apache.ibatis.annotations.Update;  

7.    

8. import com.tiantian.mybatis.model.User;  

9.    

10. public interface UserMapper {  

11.    

12.     @Insert("insert into t_user(name, age) values(#{name}, #{age})")  

13.     public void insertUser(User user);  

14.      

15.     @Update("update t_user set name=#{name}, age=#{age} where id=#{id}")  

16.     public void updateUser(User user);  

17.      

18.     @Select("select * from t_user where id=#{id}")  

19.     public User findById(int id);  

20.      

21.     @Delete("delete from t_user where id=#{id}")  

22.     public void deleteUser(int id);  

23.      

24. }  

 

       注意看这里我故意把UserMapper接口的namespace也就是它的包名置为与UserMapper.xmlnamespace属性不一样。这主要是为了要更好的讲以下的内容。

       接下来要做的就是把Mapper信息注册到Mybatis的配置中,告诉Mybatis我们定义了哪些Mapper信息。这主要是在Mybatis的配置文件中通过mappers元素来进行的。在以前版本的Mybatis中我们在Mybatis的配置文件中需要这样定义Mapper信息资源的位置。

Xml代码  

1.   

2.      

3.      

4.   

 

       这主要是通过mapper元素的resourceurl属性来指定的,resource属性指定的是相对于跟类路径下的资源,url属性指定的是通过URL可以获取到的资源。这有一点不好的地方,当我们使用Mapper接口加注解来定义当前Mapper的操作信息时,我们还需要定义一个与它对应的Mapper.xml文件。如:

Xml代码  

1.   

2.

3.   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  

4.   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  

5.   

6.    

7.   

 

 

Java代码  

1. package com.tiantian.mybatis.mapperinterface;  

2.    

3. import org.apache.ibatis.annotations.Delete;  

4. import org.apache.ibatis.annotations.Insert;  

5. import org.apache.ibatis.annotations.Select;  

6. import org.apache.ibatis.annotations.Update;  

7.    

8. import com.tiantian.mybatis.model.User;  

9.    

10. public interface UserMapper {  

11.    

12.     @Insert("insert into t_user(name, age) values(#{name}, #{age})")  

13.     public void insertUser(User user);  

14.      

15.     @Update("update t_user set name=#{name}, age=#{age} where id=#{id}")  

16.     public void updateUser(User user);  

17.      

18.     @Select("select * from t_user where id=#{id}")  

19.     public User findById(int id);  

20.      

21.     @Delete("delete from t_user where id=#{id}")  

22.     public void deleteUser(int id);  

23.      

24. }  

 

 

       我发现在现在使用的这个Mybatis3.2.1中这个问题已经得到了改善,现在我们在定义基于接口的定义的Mapper时可以通过一个class属性来指定接口。

Xml代码  

1.   

2.      

3.   

 

       除了通过class属性指定Mapper接口外,Mybatis还为我们提供了一个可以同时指定多个Mapper接口的方法。在现在的Mybatis版本中我们可以在mappers元素下面定义一个package子元素,用以指定Mapper接口所在的包,这样Mybatis就会把这个包下面的所有Mapper接口都进行注册。

Xml代码  

1.   

2.      

3.   

 

       这里的一个package只针对于一个包。当在多个包里面定义有Mapper接口时,我们需要定义对应的多个package元素。

这四种注册Mapper的方式就是我想在这篇文章中表达的。总结一下:

Xml代码  

1.   

2.      

3.      

4.      

5.      

6.      

7.      

8.      

9.      

10.   

 

       当使用mapper元素进行Mapper定义的时候需要注意:mapper的三个属性resourceurlclass对于每个mapper元素只能指定一个,要么指定resource属性,要么指定url属性,要么指定class属性,不能都指定,也不能都不指定。

下面将对上面的代码给出一些对应的测试代码。先贴出测试对应的Mybatis的配置文件:

Xml代码  

1.   

2.

3.   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  

4.   "http://mybatis.org/dtd/mybatis-3-config.dtd">  

5.   

6.    

7.       

8.       

9.          

10.       

11.       

12.          

13.              

14.              

15.                 

16.                 

17.                 

18.                 

19.              

20.          

21.       

22.       

23.          

24.          

25.       

26.   

 

       1.对于使用xml方式定义的UserMapper.xml,然后直接使用SqlSession访问定义在其中的statement的测试:

Java代码  

1. package com.tiantian.mybatis.test;  

2.    

3. import org.apache.ibatis.session.SqlSession;  

4. import org.apache.ibatis.session.SqlSessionFactory;  

5. import org.junit.Before;  

6. import org.junit.Test;  

7.    

8. import com.tiantian.mybatis.model.User;  

9. import com.tiantian.mybatis.util.Util;  

10.    

11. /** 

12.  * 

13.  * 这个类主要用来测试直接使用SqlSession访问定义在UserMapper.xml文件中的statement 

14.  * 

15.  */  

16. public class UserMapperTest {  

17.    

18.     SqlSessionFactory sqlSessionFactory = null;  

19.      

20.     @Before  

21.     public void before() {  

22.        sqlSessionFactory = Util.getSqlSessionFactory();  

23.     }  

24.      

25.     @Test  

26.     public void testInsert() {  

27.        SqlSession sqlSession = sqlSessionFactory.openSession();  

28.        try {  

29.            User user = new User();  

30.            user.setName("张三");  

31.            user.setAge(30);  

32.            sqlSession.insert("com.tiantian.mybatis.mapper.UserMapper.insertUser", user);  

33.            sqlSession.commit();  

34.        } finally {  

35.            sqlSession.close();  

36.        }  

37.     }  

38.      

39.     @Test  

40.     public void testUpdate() {  

41.        SqlSession sqlSession = sqlSessionFactory.openSession();  

42.        try {  

43.            User user = new User();  

44.            user.setId(1);  

45.            user.setName("李四");  

46.            user.setAge(34);  

47.            sqlSession.update("com.tiantian.mybatis.mapper.UserMapper.updateUser", user);  

48.            sqlSession.commit();  

49.        } finally {  

50.            sqlSession.close();  

51.        }  

52.     }  

53.      

54.     @Test  

55.     public void testFind() {  

56.        SqlSession sqlSession = sqlSessionFactory.openSession();  

57.        try {  

58.            User user = sqlSession.selectOne("com.tiantian.mybatis.mapper.UserMapper.findById", 1);  

59.            System.out.println(user.getId() + "--" + user.getName() + "--" + user.getAge());  

60.        } finally {  

61.            sqlSession.close();  

62.        }  

63.     }  

64.      

65.     @Test  

66.     public void testDelele() {  

67.        SqlSession sqlSession = sqlSessionFactory.openSession();  

68.        try {  

69.            sqlSession.delete("com.tiantian.mybatis.mapper.UserMapper.deleteUser", 2);  

70.            sqlSession.commit();  

71.        } finally {  

72.            sqlSession.close();  

73.        }  

74.     }  

75.      

76. }  

 

 

       2.对于使用Mapper接口加对应的注解来定义的Mapper信息直接使用SqlSession访问Mapper接口中使用注解定义好的statement的测试:

Java代码  

1. package com.tiantian.mybatis.test;  

2.    

3. import org.apache.ibatis.session.SqlSession;  

4. import org.apache.ibatis.session.SqlSessionFactory;  

5. import org.junit.Before;  

6. import org.junit.Test;  

7.    

8. import com.tiantian.mybatis.model.User;  

9. import com.tiantian.mybatis.util.Util;  

10.    

11. /** 

12.  * 

13.  *这个类是测试直接使用SqlSession访问UserMapper接口中使用注解定义好的statement 

14.  * 

15.  */  

16. public class UserMapperTest2 {  

17.    

18.        SqlSessionFactory sqlSessionFactory = null;  

19.         

20.        @Before  

21.        public void before() {  

22.               sqlSessionFactory = Util.getSqlSessionFactory();  

23.        }  

24.         

25.        @Test  

26.        public void testInsert() {  

27.               SqlSession sqlSession = sqlSessionFactory.openSession();  

28.               try {  

29.                      User user = new User();  

30.                      user.setName("张三");  

31.                      user.setAge(30);  

32.                      sqlSession.insert("com.tiantian.mybatis.mapperinterface.UserMapper.insertUser", user);  

33.                      sqlSession.commit();  

34.               } finally {  

35.                      sqlSession.close();  

36.               }  

37.        }  

38.         

39.        @Test  

40.        public void testUpdate() {  

41.               SqlSession sqlSession = sqlSessionFactory.openSession();  

42.               try {  

43.                      User user = new User();  

44.                      user.setId(1);  

45.                      user.setName("李四");  

46.                      user.setAge(34);  

47.                      sqlSession.update("com.tiantian.mybatis.mapperinterface.UserMapper.updateUser", user);  

48.                      sqlSession.commit();  

49.               } finally {  

50.                      sqlSession.close();  

51.               }  

52.        }  

53.         

54.        @Test  

55.        public void testFind() {  

56.               SqlSession sqlSession = sqlSessionFactory.openSession();  

57.               try {  

58.                      User user = sqlSession.selectOne("com.tiantian.mybatis.mapperinterface.UserMapper.findById", 1);  

59.                      System.out.println(user.getId() + "--" + user.getName() + "--" + user.getAge());  

60.               } finally {  

61.                      sqlSession.close();  

62.               }  

63.        }  

64.         

65.        @Test  

66.        public void testDelele() {  

67.               SqlSession sqlSession = sqlSessionFactory.openSession();  

68.               try {  

69.                      sqlSession.delete("com.tiantian.mybatis.mapperinterface.UserMapper.deleteUser", 3);  

70.                      sqlSession.commit();  

71.               } finally {  

72.                      sqlSession.close();  

73.               }  

74.        }  

75.         

76. }  

 

 

       3.对于使用Mapper接口加注解定义好的Mapper信息通过SqlSession获取其对应的Mapper接口来操作其中定义好的statement的测试:

Java代码  

1. package com.tiantian.mybatis.test;  

2.    

3. import org.apache.ibatis.session.SqlSession;  

4. import org.apache.ibatis.session.SqlSessionFactory;  

5. import org.junit.Before;  

6. import org.junit.Test;  

7.    

8. import com.tiantian.mybatis.mapperinterface.UserMapper;  

9. import com.tiantian.mybatis.model.User;  

10. import com.tiantian.mybatis.util.Util;  

11.    

12. /** 

13.  * 

14.  *这个类是测试使用SqlSession获取UserMapper接口来执行使用注解定义在UserMapper接口中的statement 

15.  * 

16.  */  

17. public class UserMapperTest3 {  

18.    

19.        SqlSessionFactory sqlSessionFactory = null;  

20.         

21.        @Before  

22.        public void before() {  

23.               sqlSessionFactory = Util.getSqlSessionFactory();  

24.        }  

25.         

26.        @Test  

27.        public void testInsert() {  

28.               SqlSession sqlSession = sqlSessionFactory.openSession();  

29.               try {  

30.                      User user = new User();  

31.                      user.setName("张三");  

32.                      user.setAge(30);  

33.                      UserMapper userMapper = sqlSession.getMapper(UserMapper.class);  

34.                      userMapper.insertUser(user);  

35.                      sqlSession.commit();  

36.               } finally {  

37.                      sqlSession.close();  

38.               }  

39.        }  

40.         

41.        @Test  

42.        public void testUpdate() {  

43.               SqlSession sqlSession = sqlSessionFactory.openSession();  

44.               try {  

45.                      User user = new User();  

46.                      user.setId(1);  

47.                      user.setName("李四");  

48.                      user.setAge(34);  

49.                      UserMapper userMapper = sqlSession.getMapper(UserMapper.class);  

50.                      userMapper.updateUser(user);  

51.                      sqlSession.commit();  

52.               } finally {  

53.                      sqlSession.close();  

54.               }  

55.        }  

56.         

57.        @Test  

58.        public void testFind() {  

59.               SqlSession sqlSession = sqlSessionFactory.openSession();  

60.               try {  

61.                      UserMapper userMapper = sqlSession.getMapper(UserMapper.class);  

62.                      User user = userMapper.findById(1);  

63.                      System.out.println(user.getId() + "--" + user.getName() + "--" + user.getAge());  

64.               } finally {  

65.                      sqlSession.close();  

66.               }  

67.        }  

68.         

69.        @Test  

70.        public void testDelele() {  

71.               SqlSession sqlSession = sqlSessionFactory.openSession();  

72.               try {  

73.                      UserMapper userMapper = sqlSession.getMapper(UserMapper.class);  

74.                      userMapper.deleteUser(5);  

75.                      sqlSession.commit();  

76.               } finally {  

77.                      sqlSession.close();  

78.               }  

79.        }  

80.         

81. }  

本文来源:https://www.2haoxitong.net/k/doc/f6fa8c8a02d276a200292ed1.html

《Mybatis配置Mapper.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式