1、工程搭建:
pom.xml:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.emmaluo.mbatislearning</groupId> <artifactId>mybatis</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <!-- 无集成spring --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.5</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.5</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.30</version> </dependency> <!-- 集成spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.3.0.RELEASE</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.3.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.3.0.RELEASE</version> <scope>test</scope> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.7.2</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.7.2</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib-nodep</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> </dependencies> </project>
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="jdbc.properties"> </properties> <settings> <!-- Globally enables or disables any caches configured in any mapper under this configuration --> <setting name="cacheEnabled" value="true"/> <!-- Sets the number of seconds the driver will wait for a response from the database --> <setting name="defaultStatementTimeout" value="3000"/> <!-- Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn --> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- Allows JDBC support for generated keys. A compatible driver is required. This setting forces generated keys to be used if set to true, as some drivers deny compatibility but still work --> <setting name="useGeneratedKeys" value="true"/> </settings> <typeAliases> <package name="com.emmaluo.mybatislearning.model" /> </typeAliases> <typeHandlers> <typeHandler handler="com.emmaluo.mybatislearning.typehandler.PhoneTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="com.emmaluo.mybatislearning.model.Gender" /> </typeHandlers> <!-- Continue going here --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/emmaluo/mybatislearning/mapper/StudentMapper.xml"/> <mapper resource="com/emmaluo/mybatislearning/mapper/TutorMapper.xml" /> <mapper resource="com/emmaluo/mybatislearning/mapper/UserPicMapper.xml" /> <mapper resource="com/emmaluo/mybatislearning/mapper/CourseMapper.xml" /> </mappers> </configuration>
知识点包括:environments default environment dataSource mappers mapper typeAliases typeAliase typeHandlers typeHandler
jdbc.propertis
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/stock jdbc.username=stock jdbc.password=password
log4j.properties
log4j.rootLogger=INFO, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d [%-5p] %c - %m%n log4j.logger.com.mybatis3=DEBUG
相关表的SQL文件
/* MySQL Backup Source Server Version: 5.7.12 Source Database: stock Date: 2016/6/27 16:07:05 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `addresses` -- ---------------------------- DROP TABLE IF EXISTS `addresses`; CREATE TABLE `addresses` ( `ADDR_ID` int(11) NOT NULL AUTO_INCREMENT, `STREET` varchar(50) NOT NULL, `CITY` varchar(50) NOT NULL, `STATE` varchar(50) NOT NULL, `ZIP` varchar(10) DEFAULT NULL, `COUNTRY` varchar(50) NOT NULL, PRIMARY KEY (`ADDR_ID`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1; -- ---------------------------- -- Table structure for `courses` -- ---------------------------- DROP TABLE IF EXISTS `courses`; CREATE TABLE `courses` ( `COURSE_ID` int(11) NOT NULL AUTO_INCREMENT, `NAME` varchar(100) NOT NULL, `DESCRIPTION` varchar(512) DEFAULT NULL, `START_DATE` date DEFAULT NULL, `END_DATE` date DEFAULT NULL, `TUTOR_ID` int(11) NOT NULL, PRIMARY KEY (`COURSE_ID`), KEY `FK_COURSE_TUTOR` (`TUTOR_ID`), CONSTRAINT `FK_COURSE_TUTOR` FOREIGN KEY (`TUTOR_ID`) REFERENCES `tutors` (`TUTOR_ID`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; -- ---------------------------- -- Table structure for `course_enrollment` -- ---------------------------- DROP TABLE IF EXISTS `course_enrollment`; CREATE TABLE `course_enrollment` ( `COURSE_ID` int(11) NOT NULL, `STUD_ID` int(11) NOT NULL, PRIMARY KEY (`COURSE_ID`,`STUD_ID`), KEY `FK_ENROLLMENT_STUD` (`STUD_ID`), CONSTRAINT `FK_ENROLLMENT_COURSE` FOREIGN KEY (`COURSE_ID`) REFERENCES `courses` (`COURSE_ID`), CONSTRAINT `FK_ENROLLMENT_STUD` FOREIGN KEY (`STUD_ID`) REFERENCES `students` (`STUD_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- ---------------------------- -- Table structure for `students` -- ---------------------------- DROP TABLE IF EXISTS `students`; CREATE TABLE `students` ( `STUD_ID` int(11) NOT NULL AUTO_INCREMENT, `NAME` varchar(50) NOT NULL, `EMAIL` varchar(50) NOT NULL, `PHONE` varchar(15) DEFAULT NULL, `DOB` date DEFAULT NULL, `BIO` longtext, `PIC` blob, `ADDR_ID` int(11) DEFAULT NULL, `GENDER` varchar(10) DEFAULT NULL, PRIMARY KEY (`STUD_ID`), KEY `FK_STUDENTS_ADDR` (`ADDR_ID`), CONSTRAINT `FK_STUDENTS_ADDR` FOREIGN KEY (`ADDR_ID`) REFERENCES `addresses` (`ADDR_ID`) ) ENGINE=InnoDB AUTO_INCREMENT=69 DEFAULT CHARSET=latin1; -- ---------------------------- -- Table structure for `tutors` -- ---------------------------- DROP TABLE IF EXISTS `tutors`; CREATE TABLE `tutors` ( `TUTOR_ID` int(11) NOT NULL AUTO_INCREMENT, `NAME` varchar(50) NOT NULL, `EMAIL` varchar(50) NOT NULL, `PHONE` varchar(15) DEFAULT NULL, `DOB` date DEFAULT NULL, `BIO` longtext, `PIC` blob, `ADDR_ID` int(11) DEFAULT NULL, PRIMARY KEY (`TUTOR_ID`), KEY `FK_TUTORS_ADDR` (`ADDR_ID`), CONSTRAINT `FK_TUTORS_ADDR` FOREIGN KEY (`ADDR_ID`) REFERENCES `addresses` (`ADDR_ID`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; -- ---------------------------- -- Table structure for `user_pics` -- ---------------------------- DROP TABLE IF EXISTS `user_pics`; CREATE TABLE `user_pics` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `NAME` varchar(50) DEFAULT NULL, `PIC` blob, `BIO` longtext, PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1; -- ---------------------------- -- Records -- ---------------------------- INSERT INTO `addresses` VALUES ('1','4891 Pacific Hwy','San Diego','CA','92110','San Diego'), ('2','2400 N Jefferson St','Perry','FL','32347','Taylor'), ('3','710 N Cable Rd','Lima','OH','45825','Allen'), ('4','5108 W Gore Blvd','Lawton','OK','32365','Comanche'); INSERT INTO `courses` VALUES ('1','Quickstart Core Java','Core Java Programming','2013-03-01','2013-04-15','1'), ('2','Quickstart JavaEE6','Enterprise App Development using JavaEE6','2013-04-01','2013-08-30','1'), ('3','MyBatis3 Premier','MyBatis 3 framework','2013-06-01','2013-07-15','2'); INSERT INTO `course_enrollment` VALUES ('1','1'), ('1','2'), ('2','2'); INSERT INTO `students` VALUES ('1','Timothy','timothy@gmail.com','123-123-1234','1988-04-25',NULL,NULL,'3',NULL), ('2','Douglas','douglas@gmail.com','789-456-1234','1990-08-15',NULL,NULL,'4',NULL), ('42','student_3','student_3@gmail.com','123-123-1239',NULL,NULL,NULL,NULL,'0'), ('43','student_3','student_3@gmail.com','123-123-1239',NULL,NULL,NULL,NULL,'0'), ('44','student_3','student_3@gmail.com','123-123-1239',NULL,NULL,NULL,NULL,'0'), ('55','stud_1466947477396','stud_1466947477396@gmail.com',NULL,NULL,NULL,NULL,NULL,NULL), ('61','stud_1466947633475','stud_1466947633475@gmail.com',NULL,NULL,NULL,NULL,NULL,NULL), ('62','stud_1466949446311','stud_1466949446311@gmail.com',NULL,NULL,NULL,NULL,NULL,NULL), ('63','stud_1467014304497','stud_1467014304497@gmail.com',NULL,NULL,NULL,NULL,NULL,NULL); INSERT INTO `tutors` VALUES ('1','John','john@gmail.com','111-222-3333','1980-05-20',NULL,NULL,'1'), ('2','Paul','paul@gmail.com','123-321-4444','1981-03-15',NULL,NULL,'2');
2、包结构:
表映射的JAVA对象
Mapper接口
service包
typehandler与model包中的PhoneNumber关系
test包与service包关系
工程UML关系全图
3、查询、插入、更新mapper的xml文件配置
创建mapper文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.emmaluo.mybatislearning.IDAO.StudentMapper"> <resultMap id="AddressResult" type="Address"> <id property="addrId" column="addr_id" /> <result property="street" column="street" /> <result property="city" column="city" /> <result property="state" column="state" /> <result property="zip" column="zip" /> <result property="country" column="country" /> </resultMap> <resultMap id="StudentResult" type="Student"> <id property="studId" column="stud_id"/> <result property="name" column="name"/> <result property="email" column="email"/> <result property="dob" column="dob"/> </resultMap> <resultMap id="StudentWithAddressResult" type="Student" > <id property="studId" column="stud_id"/> <result property="name" column="name"/> <result property="email" column="email"/> <result property="dob" column="dob"/> <result property="gender" column="gender" /> <result property="phone" column="phone" javaType="PhoneNumber" jdbcType="VARCHAR" typeHandler="com.emmaluo.mybatislearning.typehandler.PhoneTypeHandler" /> <association property="address" resultMap="AddressResult" /> </resultMap> <select id="selectStudentWithAddress" parameterType="int" resultMap="StudentWithAddressResult"> SELECT STUD_ID, NAME, EMAIL, PHONE,dob, A.ADDR_ID, STREET, CITY, STATE, ZIP, COUNTRY FROM STUDENTS S LEFT OUTER JOIN ADDRESSES A ON S.ADDR_ID=A.ADDR_ID WHERE STUD_ID=#{studId} </select> <select id="findAllStudents" resultMap="StudentResult"> SELECT * from students </select> <select id="findStudentById" parameterType="int" resultType="Student"> SELECT STUD_ID as studId,NAME,EMAIL,DOB,PHONE,gender FROM STUDENTS WHERE STUD_ID=#{id} </select> <select id="findAllStudentsByNameEmail" resultMap="StudentWithAddressResult"> SELECT STUD_ID,NAME,EMAIL,DOB,PHONE,gender FROM STUDENTS WHERE name = #{param1} and email=#{param2} </select> <insert id="insertStudent" parameterType="Student" useGeneratedKeys="true" keyProperty="studId"> insert into students(name,email,dob) values(#{name},#{email},#{dob}) </insert> <insert id="insertStudentWithPhone" parameterType="Student" useGeneratedKeys="true" keyProperty="studId"> insert into students(name,email,dob,PHONE) values(#{name},#{email},#{dob},#{phone}) </insert> <insert id="insertStudentWithGender" parameterType="Student" useGeneratedKeys="true" keyProperty="studId"> insert into students(name,email,addr_id, phone,gender) values(#{name},#{email},#{address.addrId},#{phone},#{gender}) </insert> <delete id="deleteStudentById" parameterType="int"> DELETE FROM students WHERE stud_id=#{id} </delete> <update id="updateStudent" parameterType="Student"> update students <set> <if test="name != null">name=#{name},</if> <if test="email != null">email=#{email},</if> </set> where stud_id=#{studId} </update> </mapper>
知识点包括:mapper namespace属性(值为mapper接口全限定名) select parameteType resultType resultMap insert useGenerateKeys keyProperty selectKey keyProperty resultType order update parameterType delete parameterType association collection property column select
4、数据查询接口层
Mapper接口
package com.emmaluo.mybatislearning.IDAO; import com.emmaluo.mybatislearning.model.Student; import org.apache.ibatis.session.RowBounds; import org.springframework.stereotype.Component; import java.util.List; /** * Created by zcluo on 2016/6/23. */ @Component public interface StudentMapper { List<Student> findAllStudents(RowBounds rowBounds); List<Student> findAllStudents(); List<Student> findAllStudentsByNameEmail(String name,String email); Student findStudentById(Integer id); int insertStudent(Student student); int insertStudentWithPhone(Student student); int insertStudentWithGender(Student student); int deleteStudentById(Integer id); Student selectStudentWithAddress(Integer studId); int updateStudent(Student student); }
5、服务层
服务实现
package com.emmaluo.mybatislearning.service; import com.emmaluo.mybatislearning.IDAO.StudentMapper; import com.emmaluo.mybatislearning.model.Student; import com.emmaluo.mybatislearning.util.MyBatisSqlSessionFactory; import org.apache.ibatis.session.RowBounds; import org.apache.ibatis.session.SqlSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; /** * Created by zcluo on 2016/6/23. */ public class StudentService { private Logger logger = LoggerFactory.getLogger(getClass()); public List<Student> findAllStudents(){ SqlSession sqlSession = MyBatisSqlSessionFactory.openSession(); try { StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); return studentMapper.findAllStudents(); } finally { sqlSession.close(); } } public Student findStudentById(Integer studId){ logger.debug("Select Student By ID :{}",studId); SqlSession sqlSession = MyBatisSqlSessionFactory.openSession(); try{ StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); return studentMapper.findStudentById(studId); } finally { sqlSession.close(); } } public Student findStudentWithAddress(Integer studId){ logger.debug("Select Student By ID :{}",studId); SqlSession sqlSession = MyBatisSqlSessionFactory.openSession(); try{ StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); return studentMapper.selectStudentWithAddress(studId); } finally { sqlSession.close(); } } public List<Student> findStudentsWithNameAndEmail(String name,String email){ logger.debug("Select Student by Name: {} and Email: {}",name,email); SqlSession sqlSession = MyBatisSqlSessionFactory.openSession(); try{ StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); return studentMapper.findAllStudentsByNameEmail(name,email); } finally { sqlSession.close(); } } public List<Student> findStudentsAllWithPagenation(int offset,int limits){ logger.debug("Select Student All with Pagenation!"); SqlSession sqlSession = MyBatisSqlSessionFactory.openSession(); try { StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); RowBounds rowBounds = new RowBounds(offset,limits); return studentMapper.findAllStudents(rowBounds); } finally { sqlSession.close(); } } public int createStudent(Student student) { SqlSession sqlSession = MyBatisSqlSessionFactory.openSession(); int insertRows = 0; try { StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); insertRows = studentMapper.insertStudent(student); sqlSession.commit(); } finally { sqlSession.close(); return insertRows; } } public int insertStudentWithPhone(Student student){ SqlSession sqlSession = MyBatisSqlSessionFactory.openSession(); int insertRows = 0; try { StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); insertRows = studentMapper.insertStudentWithPhone(student); sqlSession.commit(); } finally { sqlSession.close(); return insertRows; } } public int insertStudentWithGender(Student student){ SqlSession sqlSession = MyBatisSqlSessionFactory.openSession(); int insertRows = 0; try { StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); insertRows = studentMapper.insertStudentWithGender(student); sqlSession.commit(); } finally { sqlSession.close(); return insertRows; } } public int deleteStudentById(Integer studId) { SqlSession sqlSession = MyBatisSqlSessionFactory.openSession(); int deleteRows = 0; try { StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); deleteRows = studentMapper.deleteStudentById(studId); sqlSession.commit(); } finally { sqlSession.close(); return deleteRows; } } public int updateStudent(Student student) { SqlSession sqlSession = MyBatisSqlSessionFactory.openSession(); int updateRows = 0; try{ StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); updateRows = studentMapper.updateStudent(student); sqlSession.commit(); } finally { sqlSession.close(); return updateRows; } } }
6、测试
测试案例
package com.emmaluo.mybatislearning.test; import com.emmaluo.mybatislearning.model.Gender; import com.emmaluo.mybatislearning.model.PhoneNumber; import com.emmaluo.mybatislearning.model.Student; import com.emmaluo.mybatislearning.service.StudentService; import org.apache.ibatis.session.RowBounds; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import java.util.Date; import java.util.List; /** * Created by zcluo on 2016/6/23. */ public class StudentServiceTest { private static StudentService studentService; @Before public void setUp() throws Exception { studentService = new StudentService(); } @After public void tearDown() throws Exception { studentService = null; } @Test public void findAllStudents() throws Exception { List<Student> students = studentService.findAllStudents(); Assert.assertNotNull(students); for(Student student : students){ System.out.println(student); } } @Test public void findStudentsAllWithPagenation() throws Exception { int offset=0; int limits=2; List<Student> students = studentService.findStudentsAllWithPagenation(offset,limits); Assert.assertNotNull(students); Assert.assertTrue(students.size()<=limits); for(Student student : students){ System.out.println(student); } } @Test public void findStudentById() throws Exception { Student student = studentService.findStudentById(1); Assert.assertNotNull(student); System.out.println(student); } @Test public void findStudentsWithNameAndEmail() throws Exception { List<Student> students = studentService.findStudentsWithNameAndEmail("student_3","student_3@gmail.com"); Assert.assertNotNull(students); System.out.println(students); } @Test public void findStudentWithAddress() throws Exception { Student student = studentService.findStudentWithAddress(1); Assert.assertNotNull(student); System.out.println(student); } @Test public void createStudent() throws Exception { Student student = new Student(); int id = 3; //student.setStudId(id); student.setName("student_"+id); student.setEmail("student_"+id+"@gmail.com"); student.setDob(new Date()); int rowInserted = studentService.createStudent(student); id = student.getStudId(); Student newStudent = studentService.findStudentById(id); Assert.assertNotNull(newStudent); Assert.assertEquals(1,rowInserted); System.out.println(newStudent); studentService.deleteStudentById(id); } @Test public void insertStudentWithPhone() throws Exception { Student student = new Student(); int id = 3; //student.setStudId(id); student.setName("student_"+id); student.setEmail("student_"+id+"@gmail.com"); student.setDob(new Date()); PhoneNumber phone = new PhoneNumber("123-123-1239"); student.setPhone(phone); int rowInserted = studentService.insertStudentWithPhone(student); id = student.getStudId(); Student newStudent = studentService.findStudentById(id); Assert.assertNotNull(newStudent); Assert.assertEquals(1,rowInserted); System.out.println(newStudent); studentService.deleteStudentById(id); } @Test public void insertStudentWithGender() throws Exception { Student student = new Student(); int id = 3; //student.setStudId(id); student.setName("student_"+id); student.setEmail("student_"+id+"@gmail.com"); student.setDob(new Date()); PhoneNumber phone = new PhoneNumber("123-123-1239"); student.setPhone(phone); Gender gender = Gender.FEMALE; student.setGender(gender); int rowInserted = studentService.insertStudentWithGender(student); id = student.getStudId(); Student newStudent = studentService.findStudentById(id); Assert.assertNotNull(newStudent); Assert.assertEquals(1,rowInserted); System.out.println(newStudent); studentService.deleteStudentById(id); } @Test public void updateStudent() throws Exception { Student student = new Student(); int id = 0; //student.setStudId(id); student.setName("student_"+id); student.setEmail("student_"+id+"@gmail.com"); student.setDob(new Date()); int rowInserted = studentService.createStudent(student); id = student.getStudId(); student.setName("student_" + id); student.setEmail("student_"+id+"@gmail.com"); int rowUpdated = studentService.updateStudent(student); Assert.assertEquals(1,rowUpdated); student = studentService.findStudentById(id); System.out.println(student); int rowDeleted = studentService.deleteStudentById(id); Assert.assertEquals(1,rowDeleted); } @Test public void deleteStudentById() throws Exception { Student student = new Student(); int id = 3; //student.setStudId(id); student.setName("student_"+id); student.setEmail("student_"+id+"@gmail.com"); student.setDob(new Date()); studentService.createStudent(student); int rowdeleted = studentService.deleteStudentById(student.getStudId()); Student s = studentService.findStudentById(student.getStudId()); Assert.assertNull(s); Assert.assertEquals(1,rowdeleted); } }
7、spring集成
spring配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <context:annotation-config /> <context:component-scan base-package="com.emmaluo" /> <context:property-placeholder location="jdbc.properties" /> <tx:annotation-driven transaction-manager="transactionManager" /> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.emmaluo.mybatislearning.IDAO" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="typeAliases" value="com.emmaluo.mybatislearning.model.UserPic,com.emmaluo.mybatislearning.model.Tutor,com.emmaluo.mybatislearning.model.Course,com.emmaluo.mybatislearning.model.Address,com.emmaluo.mybatislearning.model.Student" /> <property name="typeAliasesPackage" value="com.emmaluo.mybatislearning.model" /> <!-- <property name="typeHandlers" value="com.emmaluo.mybatislearning.typehandler.PhoneTypeHandler" /> --> <property name="typeHandlersPackage" value="com.emmaluo.mybatislearning.typehandler" /> <property name="mapperLocations" value="classpath*:com/emmaluo/**/*.xml" /> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driver}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> </beans>
查询接口代码注解
package com.emmaluo.mybatislearning.IDAO; import com.emmaluo.mybatislearning.model.Student; import org.apache.ibatis.session.RowBounds; import org.springframework.stereotype.Component; import java.util.List; /** * Created by zcluo on 2016/6/23. */ @Component public interface StudentMapper { List<Student> findAllStudents(RowBounds rowBounds); List<Student> findAllStudents(); List<Student> findAllStudentsByNameEmail(String name,String email); Student findStudentById(Integer id); int insertStudent(Student student); int insertStudentWithPhone(Student student); int insertStudentWithGender(Student student); int deleteStudentById(Integer id); Student selectStudentWithAddress(Integer studId); int updateStudent(Student student); }
服务层代码注解
package com.emmaluo.mybatislearning.service; import com.emmaluo.mybatislearning.IDAO.StudentMapper; import com.emmaluo.mybatislearning.model.Student; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** * Created by zcluo on 2016/6/26. */ @Component public class StudentServiceWithSpring { @Resource private StudentMapper studentMapper; public StudentMapper getStudentMapper() { return studentMapper; } public void setStudentMapper(StudentMapper studentMapper) { this.studentMapper = studentMapper; } public Student createStudent(Student student) { this.studentMapper.insertStudent(student); return student; } }
测试案例
package com.emmaluo.mybatislearning.test; import com.emmaluo.mybatislearning.model.Address; import com.emmaluo.mybatislearning.model.Student; import com.emmaluo.mybatislearning.service.StudentService; import com.emmaluo.mybatislearning.service.StudentServiceWithSpring; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.Resource; import static org.junit.Assert.*; /** * Created by zcluo on 2016/6/26. */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:mybatis-spring.xml") public class StudentServiceSpringTest { @Resource private StudentServiceWithSpring studentServiceWithSpring; @Test public void testCreateStudent(){ Address address = new Address(0, "Quaker Ridge Rd.", "Bethel", "Brooklyn", "06801", "USA"); Student stud = new Student(); long ts = System.currentTimeMillis(); stud.setName("stud_" + ts); stud.setEmail("stud_" + ts + "@gmail.com"); stud.setAddress(address); Student student = studentServiceWithSpring.createStudent(stud); assertNotNull(student); assertEquals("stud_" + ts, student.getName()); assertEquals("stud_" + ts + "@gmail.com", student.getEmail()); System.err.println("CreatedStudent: " + student); } }
所有代码:https://github.com/zcluo/mybatislearning.git
参考书籍:《Java Persistence with MyBatis 3》、http://www.mybatis.org/mybatis-3/zh/index.html