zoukankan      html  css  js  c++  java
  • JavaPersistenceWithMyBatis3笔记-第2章Bootstrapping MyBatis-001XMl形式和Java形式

    一、

    1.Mapper

    同上

     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     <resultMap type="Student" id="StudentResult">
     9         <id     property="studId" column="stud_id"/>
    10         <result property="name" column="name"/>
    11         <result property="email" column="email"/>
    12         <result property="dob" column="dob"/>
    13     </resultMap>
    14   
    15       <select id="findAllStudents" resultMap="StudentResult">
    16         select * from Students
    17       </select>
    18       
    19       <select id="findStudentById" parameterType="int" resultType="Student">
    20         select stud_id as studId, name, email, dob from Students where stud_id=#{studId}
    21       </select>
    22       
    23       <insert id="insertStudent" parameterType="Student" useGeneratedKeys="true" keyProperty="studId">
    24           INSERT INTO STUDENTS(NAME,EMAIL,DOB) VALUES(#{name},#{email},#{dob})
    25       </insert>
    26       
    27       <update id="updateStudent" parameterType="Student">
    28           UPDATE STUDENTS SET NAME=#{name}, EMAIL=#{email}, DOB=#{dob} WHERE STUD_ID=#{studId}
    29       </update>
    30       
    31 </mapper>

    2.Service

    同上

    3.Domain

     1 /**
     2  * 
     3  */
     4 package com.mybatis3.domain;
     5 
     6 
     7 /**
     8  * @author Siva
     9  *
    10  */
    11 public class PhoneNumber 
    12 {
    13     private String countryCode;
    14     private String stateCode;
    15     private String number;
    16     
    17     public PhoneNumber() {
    18     }
    19 
    20     public PhoneNumber(String countryCode, String stateCode, String number) {
    21         super();
    22         this.countryCode = countryCode;
    23         this.stateCode = stateCode;
    24         this.number = number;
    25     }
    26 
    27     public PhoneNumber(String string) {
    28         if(string != null){
    29             String[] parts = string.split("-");
    30             if(parts.length>0) this.countryCode=parts[0];
    31             if(parts.length>1) this.stateCode=parts[1];
    32             if(parts.length>2) this.number=parts[2];
    33             
    34         }
    35     }
    36     
    37     @Override
    38     public String toString() {
    39         return this.getAsString();
    40     }
    41     
    42     public String getCountryCode() {
    43         return countryCode;
    44     }
    45 
    46     public void setCountryCode(String countryCode) {
    47         this.countryCode = countryCode;
    48     }
    49 
    50     public String getStateCode() {
    51         return stateCode;
    52     }
    53 
    54     public void setStateCode(String stateCode) {
    55         this.stateCode = stateCode;
    56     }
    57 
    58     public String getNumber() {
    59         return number;
    60     }
    61 
    62     public void setNumber(String number) {
    63         this.number = number;
    64     }
    65 
    66     public String getAsString() {
    67         return countryCode+"-"+stateCode+"-"+number;
    68     }
    69     
    70 }
     1 package com.mybatis3.domain;
     2 
     3 import java.util.Date;
     4 
     5 import org.apache.ibatis.type.Alias;
     6 
     7 
     8 /**
     9  * @author Siva
    10  *
    11  */
    12 @Alias("Student")
    13 public class Student
    14 {
    15     private Integer studId;
    16     private String name;
    17     private String email;
    18     private Date dob;
    19     
    20     public Student() {
    21         
    22     }
    23     
    24     public Student(Integer studId) {
    25         this.studId = studId;
    26     }
    27     
    28     public Student(Integer studId, String name, String email, Date dob) {
    29         this.studId = studId;
    30         this.name = name;
    31         this.email = email;
    32         this.dob = dob;
    33     }
    34 
    35     @Override
    36     public String toString() {
    37         return "Student [studId=" + studId + ", name=" + name + ", email="
    38                 + email + ", dob=" + dob + "]";
    39     }
    40     
    41     public Integer getStudId() {
    42         return studId;
    43     }
    44     public void setStudId(Integer studId) {
    45         this.studId = studId;
    46     }
    47     public String getName() {
    48         return name;
    49     }
    50     public void setName(String name) {
    51         this.name = name;
    52     }
    53     public String getEmail() {
    54         return email;
    55     }
    56     public void setEmail(String email) {
    57         this.email = email;
    58     }
    59     public Date getDob() {
    60         return dob;
    61     }
    62     public void setDob(Date dob) {
    63         this.dob = dob;
    64     }
    65 }

    4.TypeHandler

     1 /**
     2  * 
     3  */
     4 package com.mybatis3.typehandlers;
     5 
     6 import java.sql.CallableStatement;
     7 import java.sql.PreparedStatement;
     8 import java.sql.ResultSet;
     9 import java.sql.SQLException;
    10 
    11 import org.apache.ibatis.type.BaseTypeHandler;
    12 import org.apache.ibatis.type.JdbcType;
    13 
    14 import com.mybatis3.domain.PhoneNumber;
    15 
    16 
    17 /**
    18  * @author Siva
    19  *
    20  */
    21 public class PhoneTypeHandler extends BaseTypeHandler<PhoneNumber>{
    22 
    23     @Override
    24     public void setNonNullParameter(PreparedStatement ps, int i,
    25             PhoneNumber parameter, JdbcType jdbcType) throws SQLException {
    26         ps.setString(i, parameter.getAsString());
    27     }
    28 
    29     @Override
    30     public PhoneNumber getNullableResult(ResultSet rs, String columnName)
    31             throws SQLException {
    32         return new PhoneNumber(rs.getString(columnName));
    33     }
    34 
    35     @Override
    36     public PhoneNumber getNullableResult(ResultSet rs, int columnIndex)
    37             throws SQLException {
    38         return new PhoneNumber(rs.getString(columnIndex));
    39     }
    40 
    41     @Override
    42     public PhoneNumber getNullableResult(CallableStatement cs, int columnIndex)
    43             throws SQLException {
    44         return new PhoneNumber(cs.getString(columnIndex));
    45     }
    46 
    47 }

    5.辅助类

     1 /**
     2  * 
     3  */
     4 package com.mybatis3.util;
     5 
     6 import java.io.IOException;
     7 import java.io.InputStream;
     8 import java.util.Properties;
     9 
    10 import javax.naming.InitialContext;
    11 import javax.naming.NamingException;
    12 import javax.sql.DataSource;
    13 
    14 import org.apache.ibatis.datasource.pooled.PooledDataSource;
    15 
    16 /**
    17  * @author Siva
    18  *
    19  */
    20 public class DataSourceFactory 
    21 {
    22     private static final Properties PROPERTIES = new Properties();
    23     
    24     static
    25     {
    26         try {
    27             InputStream is = DataSourceFactory.class.getResourceAsStream("/application.properties");
    28             PROPERTIES.load(is);
    29         } catch (IOException e) {
    30             e.printStackTrace();
    31         }
    32     }
    33     
    34     public static DataSource getDataSource() 
    35     {
    36         String driver = PROPERTIES.getProperty("jdbc.driverClassName");
    37         String url = PROPERTIES.getProperty("jdbc.url");
    38         String username = PROPERTIES.getProperty("jdbc.username");
    39         String password = PROPERTIES.getProperty("jdbc.password");
    40         PooledDataSource dataSource = new PooledDataSource(driver, url, username, password);
    41         return dataSource;
    42     }
    43     
    44     public static DataSource getJNDIDataSource() 
    45     {
    46         String dataSourceJNDIName = "java:comp/env/jdbc/MyBatisDemoDS";
    47         try 
    48         {
    49             InitialContext ctx = new InitialContext();
    50             DataSource dataSource = (DataSource) ctx.lookup(dataSourceJNDIName);
    51             return dataSource;
    52         } 
    53         catch (NamingException e) 
    54         {
    55             throw new RuntimeException(e);
    56         }
    57     }
    58 }
     1 package com.mybatis3.util;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 
     6 import javax.sql.DataSource;
     7 
     8 import org.apache.ibatis.io.Resources;
     9 import org.apache.ibatis.mapping.Environment;
    10 import org.apache.ibatis.session.Configuration;
    11 import org.apache.ibatis.session.SqlSessionFactory;
    12 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    13 import org.apache.ibatis.transaction.TransactionFactory;
    14 import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
    15 
    16 import com.mybatis3.domain.Student;
    17 import com.mybatis3.mappers.StudentMapper;
    18 import com.mybatis3.typehandlers.PhoneTypeHandler;
    19 
    20 
    21 /**
    22  * @author Siva
    23  *
    24  */
    25 public class MyBatisUtil
    26 {
    27     private static SqlSessionFactory xmlSqlSessionFactory;
    28     private static SqlSessionFactory javaSqlSessionFactory;
    29     
    30     public static SqlSessionFactory getSqlSessionFactoryUsingXML()
    31     {
    32         if(xmlSqlSessionFactory==null) 
    33         {
    34             InputStream inputStream;
    35             try
    36             {
    37                 inputStream = Resources.getResourceAsStream("mybatis-config.xml");
    38                 xmlSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    39             }catch (IOException e)
    40             {
    41                 throw new RuntimeException(e);
    42             }
    43         }
    44         return xmlSqlSessionFactory;
    45     }
    46     
    47     public static SqlSessionFactory getSqlSessionFactoryUsingJavaAPI()
    48     {
    49         if(javaSqlSessionFactory==null) 
    50         {
    51             try
    52             {
    53                 DataSource dataSource = DataSourceFactory.getDataSource();
    54                 TransactionFactory transactionFactory = new JdbcTransactionFactory();
    55                 Environment environment = new Environment("development", transactionFactory, dataSource);
    56                 Configuration configuration = new Configuration(environment);
    57                 configuration.getTypeAliasRegistry().registerAlias("student", Student.class);
    58                 configuration.getTypeHandlerRegistry().register(PhoneTypeHandler.class);
    59                 configuration.addMapper(StudentMapper.class);
    60                 javaSqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
    61                 
    62             }catch (Exception e)
    63             {
    64                 throw new RuntimeException(e);
    65             }
    66         }
    67         return javaSqlSessionFactory;
    68     }
    69     
    70 }

    6.配置及资源文件

    (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         <property name="jdbc.username" value="root"/>
     9           <property name="jdbc.password" value="verysecurepwd"/>    
    10     </properties>
    11     
    12     <!-- <settings>
    13        <setting name="cacheEnabled" value="true"/>
    14         <setting name="lazyLoadingEnabled" value="true"/>
    15         <setting name="multipleResultSetsEnabled" value="true"/>
    16         <setting name="useColumnLabel" value="true"/>
    17         <setting name="useGeneratedKeys" value="false"/>
    18         <setting name="autoMappingBehavior" value="PARTIAL"/>
    19         <setting name="defaultExecutorType" value="SIMPLE"/>
    20         <setting name="defaultStatementTimeout" value="25000"/>
    21         <setting name="safeRowBoundsEnabled" value="false"/>
    22         <setting name="mapUnderscoreToCamelCase" value="false"/>
    23         <setting name="localCacheScope" value="SESSION"/>
    24         <setting name="jdbcTypeForNull" value="OTHER"/>
    25         <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
    26     </settings> -->
    27 
    28       <typeAliases>
    29           <package name="com.mybatis3.domain"/>
    30       </typeAliases>
    31     
    32       <environments default="development">
    33         <environment id="development">
    34           <transactionManager type="JDBC"/>
    35           <dataSource type="POOLED">
    36             <property name="driver" value="${jdbc.driverClassName}"/>
    37             <property name="url" value="${jdbc.url}"/>
    38             <property name="username" value="${jdbc.username}"/>
    39             <property name="password" value="${jdbc.password}"/>
    40           </dataSource>
    41         </environment>
    42       </environments>
    43       
    44       <mappers>
    45         <mapper resource="com/mybatis3/mappers/StudentMapper.xml"/>
    46         <!-- <package name="com.mybatis3.mappers"/> -->
    47       </mappers>
    48       
    49 </configuration>

    (2)full-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     <!--  This file is for a reference purpose for various configuration options -->
     8     <properties resource="application.properties">
     9         <property name="username" value="db_user"/>
    10           <property name="password" value="verysecurepwd"/>    
    11     </properties>
    12     
    13     <settings>
    14           <setting name="cacheEnabled" value="true"/>
    15           <setting name="lazyLoadingEnabled" value="true"/>
    16           <setting name="multipleResultSetsEnabled" value="true"/>
    17           <setting name="useColumnLabel" value="true"/>
    18           <setting name="useGeneratedKeys" value="false"/>
    19           <setting name="autoMappingBehavior" value="PARTIAL"/>
    20           <setting name="defaultExecutorType" value="SIMPLE"/>
    21           <setting name="defaultStatementTimeout" value="25000"/>
    22           <setting name="safeRowBoundsEnabled" value="false"/>
    23           <setting name="mapUnderscoreToCamelCase" value="false"/>
    24           <setting name="localCacheScope" value="SESSION"/>
    25           <setting name="jdbcTypeForNull" value="OTHER"/>
    26           <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
    27     </settings>
    28     
    29       <typeAliases>
    30           <typeAlias alias="Tutor" type="com.mybatis3.domain.Tutor"/>
    31           <package name="com.mybatis3.domain"/>
    32       </typeAliases>
    33       
    34         <typeHandlers>
    35           <typeHandler handler="com.mybatis3.typehandlers.PhoneTypeHandler"/>
    36           <package name="com.mybatis3.typehandlers"/>
    37         </typeHandlers>
    38 
    39      <environments default="development">
    40         <environment id="development">
    41           <transactionManager type="JDBC"/>
    42           <dataSource type="POOLED">
    43             <property name="driver" value="${jdbc.driverClassName}"/>
    44             <property name="url" value="${jdbc.url}"/>
    45             <property name="username" value="${jdbc.username}"/>
    46             <property name="password" value="${jdbc.password}"/>
    47           </dataSource>
    48         </environment>
    49         
    50         <environment id="production">
    51           <transactionManager type="JDBC"/>
    52           <dataSource type="JNDI">
    53             <property name="data_source" value="java:comp/jdbc/MyBatisDemoDS"/>
    54           </dataSource>
    55         </environment>
    56         
    57       </environments>
    58       
    59       <mappers>
    60         <mapper resource="com/mybatis3/mappers/StudentMapper.xml"/>
    61         <mapper url="file:///var/mappers/StudentMapper.xml"/>
    62         <mapper class="com.mybatis3.mappers.TutorMapper"/>
    63       </mappers>
    64       
    65       
    66 </configuration>

    7.测试文件

     1 package com.mybatis3.services;
     2 
     3 import static org.junit.Assert.assertEquals;
     4 import static org.junit.Assert.assertNotNull;
     5 
     6 import java.util.Date;
     7 import java.util.List;
     8 
     9 import org.apache.ibatis.session.SqlSessionFactory;
    10 import org.junit.AfterClass;
    11 import org.junit.BeforeClass;
    12 import org.junit.Test;
    13 
    14 import com.mybatis3.domain.Student;
    15 import com.mybatis3.util.MyBatisUtil;
    16 
    17 public class StudentServiceTest 
    18 {
    19     private static StudentService studentService;
    20     
    21     @BeforeClass
    22     public static void setup()
    23     {
    24         TestDataPopulator.initDatabase();
    25         
    26         SqlSessionFactory sqlSessionFactory =  null;
    27         //Use this if you want XML based configuration
    28         sqlSessionFactory = MyBatisUtil.getSqlSessionFactoryUsingXML();
    29         
    30         //Use this if you want to use Java API configuration
    31         //sqlSessionFactory = MyBatisUtil.getSqlSessionFactoryUsingJavaAPI();
    32         studentService = new StudentService(sqlSessionFactory);
    33     }
    34     
    35     @AfterClass
    36     public static void teardown()
    37     {
    38         studentService = null;
    39     }
    40     
    41     @Test
    42     public void testFindAllStudents() 
    43     {
    44         List<Student> students = studentService.findAllStudents();
    45         assertNotNull(students);
    46         for (Student student : students)
    47         {
    48             assertNotNull(student);
    49             System.out.println(student);
    50         }
    51         
    52     }
    53     
    54     @Test
    55     public void testFindStudentById() 
    56     {
    57         Student student = studentService.findStudentById(1);
    58         assertNotNull(student);
    59     }
    60     
    61     @Test
    62     public void testCreateUStudent() 
    63     {
    64         Student student = new Student();
    65         int id = 4;
    66         student.setStudId(id);
    67         student.setName("student_"+id);
    68         student.setEmail("student_"+id+"gmail.com");
    69         student.setDob(new Date());
    70         Student newStudent = studentService.createStudent(student);
    71         assertNotNull(newStudent);
    72         assertEquals("student_"+id, newStudent.getName());
    73         assertEquals("student_"+id+"gmail.com", newStudent.getEmail());
    74     }
    75     
    76     @Test    
    77     public void testUpdateStudent() 
    78     {
    79         int id = 2;
    80         Student student =studentService.findStudentById(id);
    81         student.setStudId(id);
    82         student.setName("student_"+id);
    83         student.setEmail("student_"+id+"gmail.com");
    84         Date now = new Date();
    85         student.setDob(now);
    86         studentService.updateStudent(student);
    87         Student updatedStudent = studentService.findStudentById(id);
    88         assertNotNull(updatedStudent);
    89         assertEquals("student_"+id, updatedStudent.getName());
    90         assertEquals("student_"+id+"gmail.com", updatedStudent.getEmail());
    91         
    92     }
    93 }
  • 相关阅读:
    ssh框架整合
    spring事务管理
    spring AOP
    spring静态代理和动态代理
    log4j介绍
    Socket通信介绍
    C# 串口与窗体应用程序的连接
    Halcon中的图像相减算子abs_diff_image和sub_image
    R-CNN、fast-RCNN、faster-RCNN到yolo、SSD简要
    QT入门系列(2):MinGW与MSVC编译的区别
  • 原文地址:https://www.cnblogs.com/shamgod/p/5440106.html
Copyright © 2011-2022 走看看