別名的設置:(別名不區分大小寫):java
設置單個別名:sql
<configuration> <properties resource="db.properties" /> <typeAliases> <!-- 設置單個別名 --> <typeAlias type="com.offcn.entity.Person" alias="person"/> <typeAlias type="com.offcn.entity.Book" alias="book"/> </typeAliases>
映射文件中直接寫別名便可:apache
<select id="queryPersonById" parameterType="int" resultType="person"> select * from person where id = #{id} </select>
批量設置別名:session
<typeAliases> <!-- 批量定義別名 ,別名不區分大小寫,會將該包下的全部文件批量設置別名--> <package name="com.offcn.entity"/> </typeAliases>
類型轉換器:app
1.MyBatis自帶的類型轉換器:ide
2.自定義的類型轉換器:測試
步驟:ui
a.建立轉換器:須要實現TypeHandler接口,實現轉換器有兩種方式:spa
i.實現接口TypeHandlercode
ii.繼承BaseTypeHander
建立converter轉換器,代碼以下:
package com.offcn.converter; 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; public class BooleanToIntConverter extends BaseTypeHandler<Boolean>{ //DB ---> java @Override //根據名字拿 public Boolean getNullableResult(ResultSet rs, String columnName) throws SQLException { // TODO Auto-generated method stub int sexNo = rs.getInt(columnName); return sexNo == 1?true:false; } //根據下標拿 @Override public Boolean getNullableResult(ResultSet rs, int columnIndex) throws SQLException { // TODO Auto-generated method stub int sexNo = rs.getInt(columnIndex); return sexNo == 1?true:false; } //根據存儲過程拿 @Override public Boolean getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { // TODO Auto-generated method stub int sexNo = cs.getInt(columnIndex); return sexNo == 1?true:false; } //java ---> DB @Override public void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbc) throws SQLException { // TODO Auto-generated method stub if(parameter) { ps.setInt(i, 1); }else { ps.setInt(i, 0); } } }
在conf.xml文件中配置類型轉換器:
<typeHandlers> <typeHandler handler="com.offcn.converter.BooleanToIntConverter" javaType="Boolean" jdbcType="INTEGER"/> </typeHandlers>
映射文件中查找的sql:(DB ---> JAVA)
<!-- 帶類型轉換器的查詢 --> <select id="queryPersonByIdWithConverter" parameterType="int" resultMap="personResult"> select * from person where id = #{id} </select> <resultMap type="person" id="personResult"> <!-- 分爲主鍵和非主鍵,主鍵用id,非主鍵用result --> <id property="id" column="id"/> <result property="name" column="name"/> <result property="bir" column="bir"/> <result property="address" column="address"/> <result property="sex" column="sex" javaType="Boolean" jdbcType="INTEGER" /> </resultMap>
接口中定義對應的方法:
Person queryPersonByIdWithConverter(int id);
測試類進行測試:
public static void queryPersonByIdWithConverter() throws IOException { //讀取conf.xml文件 Reader reader = Resources.getResourceAsReader("conf.xml"); //建立sqlSessionFactory SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader); //獲取sqlSession SqlSession session = sessionFactory.openSession(); //經過session定位映射文件 personMapper personMapper = session.getMapper(personMapper.class); //定位sql語句並執行 Person person = personMapper.queryPersonByIdWithConverter(4); //提交事務 session.commit(); System.out.println(person); //關閉鏈接 session.close(); }
映射文件中增長的sql:(JAVA --> DB)
<!-- 帶類型轉轉器的增長 --> <insert id="insertPersonWithConverter" parameterType="person" > insert into person (name,bir,address,sex) value (#{name},#{bir},#{address},#{sex,javaType=Boolean,jdbcType=INTEGER}) </insert>
接口中定義對應的方法:
測試類進行測試:
//帶轉換器的增長操做 public static void insertPersonWithConverter() throws IOException { //讀取conf.xml文件 Reader reader = Resources.getResourceAsReader("conf.xml"); //獲取sqlSessionFactory SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader); //獲取sqlSession SqlSession session = sessionFactory.openSession(); //定位映射文件的位置 personMapper personMapper = session.getMapper(personMapper.class); //定位sql並執行 Person person = new Person("小孫",new Date(),"青島",true); personMapper.insertPersonWithConverter(person); //提交事務 session.commit(); System.out.println("增長成功"); //關閉鏈接 session.close(); }
最後關於:sql標籤中何時用resultType何時用resultMap
1.若是表中字段和實體類中的屬性的類型合理識別,則用resultType,不然用resultMap
2.若是表中字段的名字和實體類中屬性名可以合理識別,則用resultType,不然用resultMap