<?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="application.properties"><property name="username" value="db_user" /><property name="password" value="verysecurepwd" /></properties><settings><setting name="cacheEnabled" value="true" /></settings><typeAliases><typeAlias alias="Tutor" type="com.mybatis3.domain.Tutor" /><package name="com.mybatis3.domain" /></typeAliases><typeHandlers><typeHandler handler="com.mybatis3.typehandlers.PhoneTypeHandler" /><package name="com.mybatis3.typehandlers" /></typeHandlers><environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment><environment id="production"><transactionManager type="MANAGED" /><dataSource type="JNDI"><property name="data_source" value="java:comp/jdbc/MyBatisDemoDS" /></dataSource></environment></environments><mappers><mapper resource="com/mybatis3/mappers/StudentMapper.xml" /><mapper url="file:///D:/mybatisdemo/mappers/TutorMapper.xml" /><mapper class="com.mybatis3.mappers.TutorMapper" /></mappers></configuration>
<environments default="shoppingcart"><environment id="shoppingcart"><transactionManager type="MANAGED" /><dataSource type="JNDI"><property name="data_source" value="java:comp/jdbc/ ShoppingcartDS" /></dataSource></environment><environment id="reports"><transactionManager type="MANAGED" /><dataSource type="JNDI"><property name="data_source" value="java:comp/jdbc/ReportsDS" /></dataSource></environment></environments>
inputStream = Resources.getResourceAsStream("mybatis-config.xml");defaultSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);cartSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, "shoppingcart");reportSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, "reports");
<dataSource type="POOLED"><property name="driver" value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource>
jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatisdemojdbc.username=rootjdbc.password=admin
<properties resource="application.properties"><property name="jdbc.username" value="db_user" /><property name="jdbc.password" value="verysecurepwd" /></properties><dataSource type="POOLED"><property name="driver" value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource>
<properties resource="application.properties"><property name="jdbc.username" value="db_user" /><property name="jdbc.password" value="verysecurepwd" /></properties>
<select id="findStudentById" parameterType="int"resultType="com.mybatis3.domain.Student">SELECT STUD_ID AS ID, NAME, EMAIL, DOBFROM STUDENTS WHERE STUD_ID=#{Id}</select><update id="updateStudent" parameterType="com.mybatis3.domain. Student">UPDATE STUDENTSSET NAME=#{name}, EMAIL=#{email}, DOB=#{dob}WHERE STUD_ID=#{id}</update>
<typeAliases><typeAlias alias="Student" type="com.mybatis3.domain.Student" /><typeAlias alias="Tutor" type="com.mybatis3.domain.Tutor" /><package name="com.mybatis3.domain" /></typeAliases>
<select id="findStudentById" parameterType="int" resultType="Student">SELECT STUD_ID AS ID, NAME, EMAIL, DOBFROM STUDENTS WHERE STUD_ID=#{id}</select><update id="updateStudent" parameterType="Student">UPDATE STUDENTSSET NAME=#{name}, EMAIL=#{email}, DOB=#{dob}WHERE STUD_ID=#{id}</update>
<typeAliases><package name="com.mybatis3.domain" /></typeAliases>
@Alias("StudentAlias")public class Student{}
<insert id="insertStudent" parameterType="Student">INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB)VALUES(#{studId},#{name},#{email},#{dob})</insert>
PreparedStatement pstmt = connection.prepareStatement("INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB) VALUES(?,?,?,?)");
pstmt.setInt(1,student.getStudId());
pstmt.setString(2, student.getName());pstmt.setString(3, student.getEmail());
pstmt.setTimestamp(4, new Timestamp((student.getDob()).getTime()));
public class PhoneNumber {private String countryCode;private String stateCode;private String number;public PhoneNumber() {}public PhoneNumber(String countryCode, String stateCode, String number) {this.countryCode = countryCode;this.stateCode = stateCode;this.number = number;}public PhoneNumber(String string) {if (string != null) {String[] parts = string.split("-");if (parts.length > 0)this.countryCode = parts[0];if (parts.length > 1)this.stateCode = parts[1];if (parts.length > 2)this.number = parts[2];}}public String toString() {return countryCode + "-" + stateCode + "-" + number;}// Setters and getters}public class Student {private Integer id;private String name;private String email;private PhoneNumber phone;// Setters and getters}
<insert id="insertStudent" parameterType="Student">insert into students(name,email,phone)values(#{name},#{email},#{phone})</insert>这里,phone 参数需要传递给#{phone};而 phone 对象是 PhoneNumber 类型。然而,MyBatis 并不知道该怎样来处
理这个类型的对象。为了让 MyBatis 明白怎样处理这个自定义的 Java 对象类型,如 PhoneNumber,我们可以创建一个自定义的类型处理
器,如下所示:1. MyBatis 提供了抽象类 BaseTypeHandler<T> ,我们可以继承此类创建自定义类型处理器。
Java Code
package com.mybatis3.typehandlers;import java.sql.CallableStatement;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import org.apache.ibatis.type.BaseTypeHandler;import org.apache.ibatis.type.JdbcType;import com.mybatis3.domain.PhoneNumber;public class PhoneTypeHandler extends BaseTypeHandler<PhoneNumber> {@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, PhoneNumber parameter, JdbcType jdbcType)throws SQLException {ps.setString(i, parameter.getAsString());}@Overridepublic PhoneNumber getNullableResult(ResultSet rs, String columnName) throws SQLException {return new PhoneNumber(rs.getString(columnName));}@Overridepublic PhoneNumber getNullableResult(ResultSet rs, int columnIndex) throws SQLException {return new PhoneNumber(rs.getString(columnIndex));}@Overridepublic PhoneNumber getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {return new PhoneNumber(cs.getString(columnIndex));}}2. 我们使用 ps.setString()和 rs.getString()方法是因为 phone 列是 VARCHAR 类型。
3. 一旦我们实现了自定义的类型处理器,我们需要在 mybatis-config.xml 中注册它:
XML Code
<?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="application.properties" /><typeHandlers><typeHandler handler="com.mybatis3.typehandlers. PhoneTypeHandler" /></typeHandlers></configuration>注册 PhoneTypeHandler 后, MyBatis 就能够将 Phone 类型的对象值存储到 VARCHAR 类型的列上。7 全局参数设置 Settings为满足应用特定的需求,MyBatis 默认的全局参数设置可以被覆盖(overridden)掉,如下所示:
XML Code
<settings><setting name="cacheEnabled" value="true" /><setting name="lazyLoadingEnabled" value="true" /><setting name="multipleResultSetsEnabled" value="true" /><setting name="useColumnLabel" value="true" /><setting name="useGeneratedKeys" value="false" /><setting name="autoMappingBehavior" value="PARTIAL" /><setting name="defaultExecutorType" value="SIMPLE" /><setting name="defaultStatementTimeout" value="25000" /><setting name="safeRowBoundsEnabled" value="false" /><setting name="mapUnderscoreToCamelCase" value="false" /><setting name="localCacheScope" value="SESSION" /><setting name="jdbcTypeForNull" value="OTHER" /><setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode ,toString" /></settings>8 SQL 映射定义 Mappers
Mapper XML 文件中包含的 SQL 映射语句将会被应用通过使用其 statementid 来执行。我们需要在 mybatisconfig.xml 文件中配置 SQL Mapper 文件的位置。
XML Code
<mappers><mapper resource="com/mybatis3/mappers/StudentMapper.xml" /><mapper url="file:///D:/mybatisdemo/app/mappers/TutorMapper.xml" /><mapper class="com.mybatis3.mappers.TutorMapper" /><package name="com.mybatis3.mappers" /></mappers>以上每一个<mapper> 标签的属性有助于从不同类型的资源中加载映射 mapper:
? resource 属性用来指定在 classpath 中的 mapper 文件。
? url 属性用来通过完全文件系统路径或者 web URL 地址来指向 mapper 文件
? class 属性用来指向一个 mapper 接口
? package 属性用来指向可以找到 Mapper 接口的包名
原文:http://www.cnblogs.com/xiao2/p/5726804.html