码迷,mamicode.com
首页 > 移动开发 > 详细

JavaPersistenceWithMyBatis3笔记-第4章SQL Mappers Using Annotations-001

时间:2016-04-28 11:54:44      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

一、

1.Mapper

 1 /**
 2  * 
 3  */
 4 package com.mybatis3.mappers;
 5 
 6 import org.apache.ibatis.annotations.Select;
 7 
 8 import com.mybatis3.domain.Address;
 9 
10 /**
11  * @author Siva
12  *
13  */
14 public interface AddressMapper 
15 {
16     @Select("select addr_id as addrId, street, city, state, zip, country from addresses where addr_id=#{id}")
17     Address selectAddressById(int id);
18 }

 

 1 package com.mybatis3.mappers;
 2 
 3 import java.util.List;
 4 import java.util.Map;
 5 
 6 import org.apache.ibatis.annotations.Delete;
 7 import org.apache.ibatis.annotations.Insert;
 8 import org.apache.ibatis.annotations.Options;
 9 import org.apache.ibatis.annotations.Result;
10 import org.apache.ibatis.annotations.ResultMap;
11 import org.apache.ibatis.annotations.Results;
12 import org.apache.ibatis.annotations.Select;
13 import org.apache.ibatis.annotations.Update;
14 
15 import com.mybatis3.domain.Student;
16 
17 
18 
19 /**
20  * @author Siva
21  *
22  */
23 public interface StudentMapper
24 {
25     
26     @Select("select * from students")
27     @Results({
28             @Result(id=true, column="stud_id", property="studId"),
29             @Result(column="name", property="name"),
30             @Result(column="email", property="email"),
31             @Result(column="addr_id", property="address.addrId")            
32     })
33     List<Student> findAllStudents();
34 
35     @Select("select stud_id as studId, name, email, addr_id as ‘address.addrId‘, phone from students")
36     List<Map<String,Object>> findAllStudentsMap();
37     
38     @Select("select stud_id as studId, name, email, addr_id as ‘address.addrId‘, phone from students where stud_id=#{id}")
39     Student findStudentById(Integer id);
40     
41     @Select("select stud_id as studId, name, email, addr_id as ‘address.addrId‘, phone from students where stud_id=#{id}")
42     Map<String,Object> findStudentMapById(Integer id);
43 
44     @Select("select stud_id, name, email, a.addr_id, street, city, state, zip, country"+
45           " FROM students s left outer join addresses a on s.addr_id=a.addr_id"+
46         " where stud_id=#{studId} ")
47     @ResultMap("com.mybatis3.mappers.StudentMapper.StudentWithAddressResult")
48     Student selectStudentWithAddress(int studId);
49     
50     @Insert("insert into students(name,email,addr_id, phone) values(#{name},#{email},#{address.addrId},#{phone})")
51     @Options(useGeneratedKeys=true, keyProperty="studId")
52     void insertStudent(Student student);
53     
54     @Insert("insert into students(name,email,addr_id, phone) values(#{name},#{email},#{address.addrId},#{phone})")
55     @Options(useGeneratedKeys=true, keyProperty="studId")
56     void insertStudentWithMap(Map<String, Object> map);
57 
58     @Update("update students set name=#{name}, email=#{email}, phone=#{phone} where stud_id=#{studId}")
59     void updateStudent(Student student);
60     
61     @Delete("delete from students where stud_id=#{studId}")
62     int deleteStudent(int studId);
63     
64 }

 

 1 /**
 2  * 
 3  */
 4 package com.mybatis3.mappers;
 5 
 6 import java.util.List;
 7 
 8 import org.apache.ibatis.annotations.DeleteProvider;
 9 import org.apache.ibatis.annotations.InsertProvider;
10 import org.apache.ibatis.annotations.Many;
11 import org.apache.ibatis.annotations.One;
12 import org.apache.ibatis.annotations.Options;
13 import org.apache.ibatis.annotations.Param;
14 import org.apache.ibatis.annotations.Result;
15 import org.apache.ibatis.annotations.ResultMap;
16 import org.apache.ibatis.annotations.Results;
17 import org.apache.ibatis.annotations.Select;
18 import org.apache.ibatis.annotations.SelectProvider;
19 import org.apache.ibatis.annotations.UpdateProvider;
20 
21 import com.mybatis3.domain.Course;
22 import com.mybatis3.domain.Tutor;
23 import com.mybatis3.sqlproviders.TutorDynaSqlProvider;
24 
25 
26 /**
27  * @author Siva
28  *
29  */
30 
31 public interface TutorMapper 
32 {
33     
34     @Select("select * from courses where tutor_id=#{tutorId}")
35     @ResultMap("com.mybatis3.mappers.TutorMapper.CourseResult")
36     List<Course> selectCoursesByTutorId(int tutorId);
37     
38     @Select("SELECT tutor_id, t.name as tutor_name, email, addr_id FROM tutors t where t.tutor_id=#{tutorId}")
39     @Results({
40         @Result(id=true, column="tutor_id", property="tutorId"),
41         @Result(column="tutor_name", property="name"),
42         @Result(column="email", property="email"),
43         @Result(property="address", column="addr_id",
44                 one=@One(select="com.mybatis3.mappers.AddressMapper.selectAddressById")),        
45         @Result(property="courses", column="tutor_id",
46                 many=@Many(select="com.mybatis3.mappers.TutorMapper.selectCoursesByTutorId"))        
47     })
48     Tutor selectTutorWithCoursesById(int tutorId);
49     
50     @SelectProvider(type=TutorDynaSqlProvider.class, method="findAllTutorsSql")
51     List<Tutor> findAllTutors();
52     
53     @SelectProvider(type=TutorDynaSqlProvider.class, method="findTutorByIdSql")
54     Tutor findTutorById(int tutorId);
55     
56     @SelectProvider(type=TutorDynaSqlProvider.class, method="findTutorByNameAndEmailSql")
57     Tutor findTutorByNameAndEmail(@Param("name")String name, @Param("email")String email);
58     
59     @InsertProvider(type=TutorDynaSqlProvider.class, method="insertTutor")
60     @Options(useGeneratedKeys=true, keyProperty="tutorId")
61     int insertTutor(Tutor tutor);
62     
63     @UpdateProvider(type=TutorDynaSqlProvider.class, method="updateTutor")
64     int updateTutor(Tutor tutor);
65     
66     @DeleteProvider(type=TutorDynaSqlProvider.class, method="deleteTutor")
67     int deleteTutor(int tutorId);
68         
69     @SelectProvider(type=TutorDynaSqlProvider.class, method="selectTutorById")
70     @ResultMap("com.mybatis3.mappers.TutorMapper.TutorResult")
71     Tutor selectTutorById(int tutorId);
72     
73     
74 }

 

2.Service

3.Domain

4.辅助类

  1 /**
  2  * 
  3  */
  4 package com.mybatis3.sqlproviders;
  5 
  6 
  7 import java.util.Map;
  8 
  9 import org.apache.ibatis.jdbc.SQL;
 10 
 11 import com.mybatis3.domain.Tutor;
 12 /**
 13  * @author Siva
 14  *
 15  */
 16 public class TutorDynaSqlProvider 
 17 {
 18 
 19     public String findAllTutorsSql() 
 20     {
 21         return new SQL() {{
 22             SELECT("tutor_id as tutorId, name, email");
 23             FROM("tutors");
 24           }}.toString();
 25     }
 26     
 27     public String findTutorByIdSql(final int tutorId) 
 28     {
 29         /*return new SQL() {{
 30             SELECT("tutor_id as tutorId, name, email");
 31             FROM("tutors");
 32             WHERE("tutor_id = #{tutorId}");
 33         }}.toString();*/
 34 
 35         return new SQL() {{
 36             SELECT("tutor_id as tutorId, name, email");
 37             FROM("tutors");
 38             WHERE("tutor_id="+tutorId);
 39         }}.toString();
 40     }
 41     
 42     
 43     public String findTutorByNameAndEmailSql(Map<String, Object> map) 
 44     {
 45         String name = (String) map.get("name");
 46         String email = (String) map.get("email");
 47         System.err.println(name+":"+email);
 48         
 49         return new SQL() {{
 50             SELECT("tutor_id as tutorId, name, email");
 51             FROM("tutors");
 52             WHERE("name=#{name} AND email=#{email}");
 53         }}.toString();
 54     }
 55     
 56     public String insertTutor(final Tutor tutor) {
 57         
 58         return new SQL() {{
 59             INSERT_INTO("TUTORS");
 60             
 61             if (tutor.getName() != null) {
 62                 VALUES("NAME", "#{name}");
 63             }
 64             
 65             if (tutor.getEmail() != null) {
 66                 VALUES("EMAIL", "#{email}");
 67             }
 68         }}.toString();
 69         
 70     }
 71     
 72     public String updateTutor(final Tutor tutor) 
 73     {
 74         
 75         return new SQL() {{
 76             UPDATE("TUTORS");
 77             
 78             if (tutor.getName() != null) {
 79                 SET("NAME = #{name}");
 80             }
 81             
 82             if (tutor.getEmail() != null) {
 83                 SET("EMAIL = #{email}");
 84             }
 85             WHERE("TUTOR_ID = #{tutorId}");
 86         }}.toString();
 87     }
 88     
 89     public String deleteTutor(int tutorId) 
 90     {
 91         
 92         return new SQL() {{
 93             DELETE_FROM("TUTORS");
 94             WHERE("TUTOR_ID = #{tutorId}");
 95         }}.toString();
 96         
 97     }
 98     
 99     public String selectTutorById() 
100     {    
101         return new SQL() {{
102             SELECT("t.tutor_id, t.name as tutor_name, email");
103             SELECT("a.addr_id, street, city, state, zip, country");
104             SELECT("course_id, c.name as course_name, description, start_date, end_date");
105             FROM("TUTORS t");
106             LEFT_OUTER_JOIN("addresses a on t.addr_id=a.addr_id");
107             LEFT_OUTER_JOIN("courses c on t.tutor_id=c.tutor_id");
108             WHERE("t.TUTOR_ID = #{id}");
109         }}.toString();
110 
111         
112     }
113 }

 

5.配置及资源文件

(1)mybatis-config.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6 
 7       <properties resource="application.properties"/>
 8         
 9       <typeAliases>
10           <package name="com.mybatis3.domain"/>
11       </typeAliases>
12       <typeHandlers>
13           <typeHandler handler="com.mybatis3.typehandlers.PhoneTypeHandler"/>
14       </typeHandlers>
15     
16       <environments default="development">
17         <environment id="development">
18           <transactionManager type="JDBC"/>
19           <dataSource type="POOLED">
20             <property name="driver" value="${jdbc.driverClassName}"/>
21             <property name="url" value="${jdbc.url}"/>
22             <property name="username" value="${jdbc.username}"/>
23             <property name="password" value="${jdbc.password}"/>
24           </dataSource>
25         </environment>
26       </environments>
27       
28       <mappers>
29           <package name="com.mybatis3.mappers"/>
30       </mappers>      
31       
32 </configuration>

 

(2)StudentMapper.xml

 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   
 6 <mapper namespace="com.mybatis3.mappers.StudentMapper">
 7     
 8     
 9     <resultMap type="Address" id="AddressResult">
10           <id property="addrId" column="addr_id"/>
11         <result property="street" column="street"/>
12         <result property="city" column="city"/>
13         <result property="state" column="state"/>
14         <result property="zip" column="zip"/>
15         <result property="country" column="country"/>
16       </resultMap>
17       
18       <resultMap type="Student" id="StudentWithAddressResult">
19         <id     property="studId" column="stud_id"/>
20         <result property="name" column="name"/>
21         <result property="email" column="email"/>
22         <association property="address" resultMap="AddressResult"/>
23     </resultMap>
24     
25     
26 </mapper>

 

(3)TutorMapper.xml

 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   
 6 <mapper namespace="com.mybatis3.mappers.TutorMapper">
 7               
 8       <resultMap type="Address" id="AddressResult">
 9           <id property="addrId" column="addr_id"/>
10         <result property="street" column="street"/>
11         <result property="city" column="city"/>
12         <result property="state" column="state"/>
13         <result property="zip" column="zip"/>
14         <result property="country" column="country"/>
15       </resultMap>
16       
17       <resultMap type="Course" id="CourseResult">
18           <id     column="course_id" property="courseId"/>
19           <result column="course_name" property="name"/>
20           <result column="description" property="description"/>
21           <result column="start_date" property="startDate"/>
22           <result column="end_date" property="endDate"/>
23       </resultMap>
24       
25       <resultMap type="Tutor" id="TutorResult">
26           <id     column="tutor_id" property="tutorId"/>
27           <result column="tutor_name" property="name"/>
28           <result column="email" property="email"/>
29           <association property="address" resultMap="AddressResult"/>
30           <collection property="courses"  resultMap="CourseResult"></collection>
31       </resultMap>
32       
33 </mapper>

 

6.测试文件

 1 package com.mybatis3.services;
 2 
 3 import static org.junit.Assert.*;
 4 
 5 import java.util.List;
 6 
 7 import org.junit.AfterClass;
 8 import org.junit.BeforeClass;
 9 import org.junit.Test;
10 
11 import com.mybatis3.domain.Tutor;
12 
13 public class TutorServiceTest 
14 {
15 
16     private static TutorService tutorService;
17     
18     @BeforeClass
19     public static void setup() {
20         tutorService = new TutorService();
21         TestDataPopulator.initDatabase();
22     }
23     
24     @AfterClass
25     public static void teardown() {
26         tutorService = null;
27     }
28     
29     @Test
30     public void testFindAllTutors() {
31         List<Tutor> tutors = tutorService.findAllTutors();
32         assertNotNull(tutors);
33         for (Tutor tutor : tutors)
34         {
35             System.err.println(tutor);
36         }
37     }
38 
39     @Test
40     public void testFindTutorById() {
41         Tutor tutor = tutorService.findTutorById(1);
42         assertNotNull(tutor);
43         System.err.println(tutor);
44     }
45 
46     @Test
47     public void testFindTutorByNameAndEmail() {
48         Tutor tutor = tutorService.findTutorByNameAndEmail("Paul", "paul@gmail.com");
49         assertNotNull(tutor);
50         System.err.println(tutor);
51     }
52 
53     @Test
54     public void testCreateTutor() {
55         Tutor tutor = new Tutor();
56         tutor.setName("siva");
57         tutor.setEmail("siva@gmail.com");
58         tutor = tutorService.createTutor(tutor);
59         assertNotNull(tutor);
60         System.err.println(tutor.getTutorId());
61     }
62 
63     @Test
64     public void testUpdateTutor() {
65         Tutor tutor = new Tutor();
66         tutor.setTutorId(1);
67         tutor.setName("sivaprasad");
68         tutor.setEmail("sivaprasad@gmail.com");
69         tutor = tutorService.updateTutor(tutor);
70         Tutor updTutor = tutorService.findTutorById(1);
71         assertNotNull(updTutor);
72         System.err.println(updTutor);
73     }
74 
75     @Test
76     public void testDeleteTutor() {
77         boolean deleted = tutorService.deleteTutor(4);
78            assertTrue(deleted);
79     }
80 
81     @Test
82     public void testSelectTutorById() {
83         Tutor tutor = tutorService.selectTutorById(1);
84         assertNotNull(tutor);
85         System.err.println(tutor);
86     }
87 
88     @Test
89     public void testSelectTutorWithCoursesById() {
90         Tutor tutor = tutorService.selectTutorWithCoursesById(1);
91         assertNotNull(tutor);
92         System.err.println(tutor);
93     }
94 
95 }

 

JavaPersistenceWithMyBatis3笔记-第4章SQL Mappers Using Annotations-001

标签:

原文地址:http://www.cnblogs.com/shamgod/p/5442018.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!