04.MyBatis别名的设置和类型转换器
生活随笔
收集整理的這篇文章主要介紹了
04.MyBatis别名的设置和类型转换器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
別名的設置:(別名不區分大小寫):
設置單個別名:
<configuration><properties resource="db.properties" /><typeAliases><!-- 設置單個別名 --><typeAlias type="com.offcn.entity.Person" alias="person"/><typeAlias type="com.offcn.entity.Book" alias="book"/></typeAliases>映射文件中直接寫別名即可:
<select id="queryPersonById" parameterType="int" resultType="person">select * from person where id = #{id} </select>批量設置別名:
<typeAliases><!-- 批量定義別名 ,別名不區分大小寫,會將該包下的所有文件批量設置別名--><package name="com.offcn.entity"/> </typeAliases>類型轉換器:
1.MyBatis自帶的類型轉換器:
2.自定義的類型轉換器:
步驟:
a.創建轉換器:需要實現TypeHandler接口,實現轉換器有兩種方式:
i.實現接口TypeHandler
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 stubint sexNo = rs.getInt(columnName);return sexNo == 1?true:false;}//根據下標拿 @Overridepublic Boolean getNullableResult(ResultSet rs, int columnIndex) throws SQLException {// TODO Auto-generated method stubint sexNo = rs.getInt(columnIndex);return sexNo == 1?true:false;}//根據存儲過程拿 @Overridepublic Boolean getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {// TODO Auto-generated method stubint sexNo = cs.getInt(columnIndex);return sexNo == 1?true:false;}//java ---> DB @Overridepublic void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbc) throws SQLException {// TODO Auto-generated method stubif(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");//創建sqlSessionFactorySqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);//獲取sqlSessionSqlSession 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");//獲取sqlSessionFactorySqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);//獲取sqlSessionSqlSession 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
?
轉載于:https://www.cnblogs.com/man-tou/p/11335402.html
總結
以上是生活随笔為你收集整理的04.MyBatis别名的设置和类型转换器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库:MySQL和MariaDB的JD
- 下一篇: 工信部推动第二批“5G+工业互联网”实践