zoukankan      html  css  js  c++  java
  • JavaPersistenceWithMyBatis3笔记-第5章Configuring MyBatis in a Spring applications-001

    一、

    1.Mapper

     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

     1 package com.mybatis3.services;
     2 
     3 import java.util.List;
     4 import java.util.Map;
     5 
     6 import org.slf4j.Logger;
     7 import org.slf4j.LoggerFactory;
     8 import org.springframework.beans.factory.annotation.Autowired;
     9 import org.springframework.stereotype.Service;
    10 import org.springframework.transaction.annotation.Transactional;
    11 
    12 import com.mybatis3.domain.Address;
    13 import com.mybatis3.domain.Student;
    14 import com.mybatis3.mappers.AddressMapper;
    15 import com.mybatis3.mappers.StudentMapper;
    16 
    17 
    18 @Service
    19 @Transactional
    20 public class StudentService 
    21 {
    22     private Logger logger = LoggerFactory.getLogger(getClass());
    23     
    24     @Autowired
    25     private StudentMapper studentMapper;
    26     
    27     @Autowired
    28     private AddressMapper addressMapper;
    29     
    30     public List<Student> findAllStudents() {
    31         return studentMapper.findAllStudents();        
    32     }
    33     
    34     public Student findStudentById(Integer id) {
    35         logger.debug("findStudentById :"+id);
    36         return studentMapper.findStudentById(id);        
    37     }
    38 
    39     public Student findStudentWithAddressById(int id) {
    40         return studentMapper.selectStudentWithAddress(id);        
    41     }
    42     
    43     public Student createStudent(Student student) {
    44         Address address = student.getAddress();
    45         if(address != null){
    46             addressMapper.insertAddress(address);
    47         }
    48         if(student.getName()==null || student.getName().trim().length()==0){
    49             throw new RuntimeException("Student Name should not be null");
    50         }
    51         studentMapper.insertStudent(student);
    52         return student;
    53     }
    54     
    55     public void createStudentWithMap(Map<String, Object> studentDataMap) {
    56         studentMapper.insertStudentWithMap(studentDataMap);
    57     }
    58 
    59     public Student updateStudent(Student student) {
    60         studentMapper.updateStudent(student);
    61         return student;
    62     }
    63     
    64     public boolean deleteStudent(int id) {
    65         int count = studentMapper.deleteStudent(id);
    66         return count > 0;
    67     }
    68     
    69     public Map<String, Object> findStudentMapById(int id) {
    70         return studentMapper.findStudentMapById(id);
    71     }
    72 
    73     public List<Map<String, Object>> findAllStudentsMap() {
    74         return studentMapper.findAllStudentsMap();
    75     }
    76 }
     1 /**
     2  * 
     3  */
     4 package com.mybatis3.services;
     5 
     6 import java.util.List;
     7 
     8 import org.apache.ibatis.session.SqlSession;
     9 import org.springframework.beans.factory.annotation.Autowired;
    10 import org.springframework.stereotype.Service;
    11 import org.springframework.transaction.annotation.Transactional;
    12 
    13 import com.mybatis3.domain.Tutor;
    14 import com.mybatis3.mappers.TutorMapper;
    15 
    16 
    17 /**
    18  * @author Siva
    19  *
    20  */
    21 @Service
    22 @Transactional
    23 public class TutorService 
    24 {
    25     @Autowired
    26     private SqlSession sqlSession;
    27     
    28     private TutorMapper getTutorMapper(){
    29         return sqlSession.getMapper(TutorMapper.class);
    30     }
    31     public List<Tutor> findAllTutors() {
    32         return getTutorMapper().findAllTutors();
    33     }
    34     
    35     public Tutor findTutorById(int tutorId) {
    36         return getTutorMapper().findTutorById(tutorId);
    37     }
    38     
    39     public Tutor findTutorByNameAndEmail(String name, String email) {
    40         return getTutorMapper().findTutorByNameAndEmail(name, email);
    41     }
    42     
    43     public Tutor createTutor(Tutor tutor) {
    44         getTutorMapper().insertTutor(tutor);
    45         return tutor;
    46     }
    47     
    48     public Tutor updateTutor(Tutor tutor) {
    49         getTutorMapper().updateTutor(tutor);
    50         return tutor;
    51     }
    52     
    53     public boolean deleteTutor(int tutorId) {
    54         boolean deleted = false;
    55         int nor = getTutorMapper().deleteTutor(tutorId);
    56         deleted = (nor == 1);
    57         return deleted;
    58     }
    59     
    60     public Tutor selectTutorById(int tutorId) {
    61         return getTutorMapper().selectTutorById(tutorId);
    62     }
    63     
    64     public Tutor selectTutorWithCoursesById(int tutorId) {
    65         return getTutorMapper().selectTutorWithCoursesById(tutorId);
    66     }
    67 }

    3.Domain

    4.辅助类

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

    5.配置及资源文件

    applicationContext.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xmlns:aop="http://www.springframework.org/schema/aop"
     5     xmlns:context="http://www.springframework.org/schema/context"
     6     xmlns:p="http://www.springframework.org/schema/p"
     7     xmlns:tx="http://www.springframework.org/schema/tx"
     8     xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
     9     xsi:schemaLocation="http://www.springframework.org/schema/beans 
    10                         http://www.springframework.org/schema/beans/spring-beans.xsd
    11                         http://www.springframework.org/schema/aop 
    12                         http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
    13                         http://www.springframework.org/schema/context 
    14                         http://www.springframework.org/schema/context/spring-context.xsd
    15                         http://www.springframework.org/schema/tx 
    16                         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    17                         http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">
    18     
    19     <context:annotation-config />
    20 
    21     <context:component-scan base-package="com.mybatis3" />
    22 
    23     <context:property-placeholder location="classpath:application.properties" />
    24     
    25      
    26     <tx:annotation-driven transaction-manager="transactionManager"/>
    27     
    28     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    29           <property name="dataSource" ref="dataSource" />
    30     </bean>
    31     
    32     <!-- <mybatis:scan base-package="com.mybatis3.mappers"/> -->
    33     
    34     <!-- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    35       <property name="basePackage" value="com.mybatis3.mappers" />
    36     </bean> -->
    37 
    38     <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    39       <constructor-arg index="0" ref="sqlSessionFactory" />
    40     </bean>
    41     
    42        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    43           <property name="dataSource" ref="dataSource" />
    44           <property name="typeAliasesPackage" value="com.mybatis3.domain"/>
    45           <property name="typeHandlersPackage" value="com.mybatis3.typehandlers"/>
    46           <property name="mapperLocations" value="classpath*:com/mybatis3/**/*.xml" />
    47     </bean>
    48     
    49      <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    50         <property name="driverClassName" value="${jdbc.driverClassName}"/>
    51         <property name="url" value="${jdbc.url}"/>
    52         <property name="username" value="${jdbc.username}"/>
    53         <property name="password" value="${jdbc.password}"/>
    54     </bean>
    55     
    56 </beans>

    mapper.xml同上

     1 package com.mybatis3.config;
     2 
     3 import org.mybatis.spring.annotation.MapperScan;
     4 import org.springframework.context.annotation.Configuration;
     5 /*
     6 import javax.sql.DataSource;
     7 import org.apache.ibatis.datasource.pooled.PooledDataSource;
     8 import org.apache.ibatis.session.SqlSessionFactory;
     9 import org.mybatis.spring.SqlSessionFactoryBean;
    10 import org.springframework.context.annotation.Bean;
    11 */
    12 /**
    13  * @author Siva
    14  *
    15  */
    16 @Configuration
    17 @MapperScan(value="com.mybatis3.mappers")
    18 public class AppConfig
    19 {
    20     /*
    21     @Bean
    22     public DataSource dataSource() {
    23         return new PooledDataSource("com.mysql.jdbc.Driver", 
    24                                     "jdbc:mysql://localhost:3306/elearning", 
    25                                     "root", "admin");
    26     }
    27     
    28     @Bean
    29     public SqlSessionFactory sqlSessionFactory() throws Exception {
    30         SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
    31         sessionFactory.setDataSource(dataSource());
    32         return sessionFactory.getObject();
    33     }
    34     */
    35 }

    6.测试文件

      1 package com.mybatis3.services;
      2 
      3 import static org.junit.Assert.*;
      4 
      5 import java.util.HashMap;
      6 import java.util.List;
      7 import java.util.Map;
      8 
      9 import org.junit.BeforeClass;
     10 import org.junit.Test;
     11 import org.junit.runner.RunWith;
     12 import org.springframework.beans.factory.annotation.Autowired;
     13 import org.springframework.dao.DataAccessException;
     14 import org.springframework.test.context.ContextConfiguration;
     15 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
     16 
     17 import com.mybatis3.domain.Address;
     18 import com.mybatis3.domain.PhoneNumber;
     19 import com.mybatis3.domain.Student;
     20 
     21 @RunWith(SpringJUnit4ClassRunner.class)
     22 @ContextConfiguration(locations="classpath:applicationContext.xml")
     23 public class StudentServiceTest 
     24 {
     25     @Autowired
     26     private StudentService studentService;
     27     
     28     @BeforeClass
     29     public static void setup() {
     30         TestDataPopulator.initDatabase();
     31     }
     32     
     33     @Test
     34     public void testFindAllStudents() {
     35         List<Student> students = studentService.findAllStudents();
     36         assertNotNull(students);
     37         for (Student student : students)
     38         {
     39             System.err.println(student);
     40         }
     41     }
     42 
     43     @Test
     44     public void testFindStudentById() {
     45         Student student = studentService.findStudentById(1);
     46         System.err.println(student);
     47         System.err.println(student.getAddress().getAddrId()+":"+student.getAddress().getCity());
     48         
     49     }
     50 
     51     @Test
     52     public void testFindStudentWithAddressById() {
     53         Student student = studentService.findStudentWithAddressById(2);
     54         assertNotNull(student);
     55         System.out.println(student.getAddress().getAddrId()+":"+student.getAddress().getCity());
     56     }
     57 
     58     @Test
     59     public void testCreateStudent() {
     60         //Address address = new Address();
     61         Address address = new Address(1,"Quaker Ridge Rd.","Bethel","Brooklyn","06801","USA");
     62         /*address.setStreet("Quaker Ridge Rd.");
     63         address.setCity("Bethel");
     64         address.setState("Brooklyn");
     65         address.setZip("06801");
     66         address.setCountry("USA");*/
     67         
     68         Student stud = new Student();
     69         long ts = System.currentTimeMillis();
     70         stud.setName("stud_"+ts);
     71         stud.setEmail("stud_"+ts+"@gmail.com");
     72         stud.setPhone(new PhoneNumber("123-456-7890"));
     73         stud.setAddress(address);
     74         Student student = studentService.createStudent(stud);
     75         assertNotNull(student);
     76         assertEquals("stud_"+ts, student.getName());
     77         assertEquals("stud_"+ts+"@gmail.com", student.getEmail());
     78         System.err.println("CreatedStudent: "+student);
     79     }
     80 
     81     @Test(expected=DataAccessException.class)
     82     public void testCreateStudentForException() {
     83         Address address = new Address();
     84         address.setStreet("Quaker Ridge Rd.");
     85         address.setCity("Bethel");
     86         address.setState("Brooklyn");
     87         address.setZip("06801");
     88         address.setCountry("USA");
     89         
     90         Student stud = new Student();
     91         long ts = System.currentTimeMillis();
     92         stud.setName("stud_"+ts);
     93         stud.setEmail("timothy@gmail.com");
     94         stud.setPhone(new PhoneNumber("123-456-7890"));
     95         stud.setAddress(address);
     96         studentService.createStudent(stud);
     97         fail("You should not reach here");
     98     }
     99     
    100     @Test
    101     public void testCreateStudentWithMap() {
    102         Map<String, Object> studMap = new HashMap<String, Object>();
    103         long ts = System.currentTimeMillis();
    104         studMap.put("name","stud_"+ts);
    105         studMap.put("email","stud_"+ts+"@gmail.com");
    106         studMap.put("phone",null);
    107         studentService.createStudentWithMap(studMap);
    108     }
    109 
    110     @Test
    111     public void testUpdateStudent() {
    112         Student stud = new Student();
    113         long ts = System.currentTimeMillis();
    114         stud.setStudId(2);
    115         stud.setName("studddd_"+ts);
    116         stud.setEmail("studddd_"+ts+"@gmail.com");
    117         Student student = studentService.updateStudent(stud);
    118         assertNotNull(student);
    119         assertEquals("studddd_"+ts, student.getName());
    120         assertEquals("studddd_"+ts+"@gmail.com", student.getEmail());
    121         assertEquals(new Integer(2), student.getStudId());
    122         
    123         System.out.println("UpdatedStudent: "+student);
    124     }
    125 
    126     @Test
    127     public void testDeleteStudent() {
    128         boolean deleted = studentService.deleteStudent(3);
    129         assertTrue(deleted);
    130         System.err.println("deleteStudent:"+deleted);
    131     }
    132 
    133     @Test
    134     public void testFindStudentMapById() {
    135         Map<String, Object> studentMap = studentService.findStudentMapById(1);
    136         System.err.println(studentMap);
    137     }
    138 
    139     @Test
    140     public void testFindAllStudentsMap() {
    141         List<Map<String,Object>> studentMapList = studentService.findAllStudentsMap();
    142         for(Map<String,Object> studentMap : studentMapList)
    143         {
    144             System.out.println("id :"+studentMap.get("id"));
    145             System.out.println("name :"+studentMap.get("name"));
    146             System.out.println("email :"+studentMap.get("email"));
    147             System.out.println("phone :"+studentMap.get("phone"));
    148         }
    149     }
    150 
    151 }
     1 package com.mybatis3.services;
     2 
     3 import static org.junit.Assert.*;
     4 
     5 import java.util.List;
     6 
     7 import org.junit.BeforeClass;
     8 import org.junit.Test;
     9 import org.junit.runner.RunWith;
    10 import org.springframework.beans.factory.annotation.Autowired;
    11 import org.springframework.test.context.ContextConfiguration;
    12 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    13 
    14 import com.mybatis3.domain.Tutor;
    15 
    16 @RunWith(SpringJUnit4ClassRunner.class)
    17 @ContextConfiguration(locations="classpath:applicationContext.xml")
    18 public class TutorServiceTest 
    19 {
    20     @Autowired
    21     private TutorService tutorService;
    22     
    23     @BeforeClass
    24     public static void setup() {
    25         TestDataPopulator.initDatabase();
    26     }
    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     }
    61 
    62     @Test
    63     public void testUpdateTutor() {
    64         Tutor tutor = new Tutor();
    65         tutor.setTutorId(1);
    66         tutor.setName("sivaprasad");
    67         tutor.setEmail("sivaprasad@gmail.com");
    68         tutor = tutorService.updateTutor(tutor);
    69         Tutor updTutor = tutorService.findTutorById(1);
    70         assertNotNull(updTutor);
    71         System.err.println(updTutor);
    72     }
    73 
    74     @Test
    75     public void testDeleteTutor() {
    76         boolean deleted = tutorService.deleteTutor(4);
    77            assertTrue(deleted);
    78     }
    79 
    80     @Test
    81     public void testSelectTutorById() {
    82         Tutor tutor = tutorService.selectTutorById(1);
    83         assertNotNull(tutor);
    84         System.err.println(tutor);
    85     }
    86 
    87     @Test
    88     public void testSelectTutorWithCoursesById() {
    89         Tutor tutor = tutorService.selectTutorWithCoursesById(1);
    90         assertNotNull(tutor);
    91         System.err.println(tutor);
    92     }
    93 
    94 }
  • 相关阅读:
    用户登录
    在ASP.NET里实现计算器代码的封装
    计算器的封装
    典型用户和场景-老陈、小石头
    葫芦娃团队
    20155235 王玥 《基于Arm实验箱的接口测试和应用》 课程设计报告
    实验补交专用链接随笔
    20155235 《网络攻防》 实验九 Web安全基础
    20155235 《网络攻防》 实验七 网络欺诈防范
    20155235 《网络攻防》 实验八 Web基础
  • 原文地址:https://www.cnblogs.com/shamgod/p/5442973.html
Copyright © 2011-2022 走看看