04.MyBatis别名的设置和类型转换器
別名的設(shè)置:(別名不區(qū)分大小寫):
設(shè)置單個(gè)別名:
<configuration><properties resource="db.properties" /><typeAliases><!-- 設(shè)置單個(gè)別名 --><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>批量設(shè)置別名:
<typeAliases><!-- 批量定義別名 ,別名不區(qū)分大小寫,會(huì)將該包下的所有文件批量設(shè)置別名--><package name="com.offcn.entity"/> </typeAliases>類型轉(zhuǎn)換器:
1.MyBatis自帶的類型轉(zhuǎn)換器:
2.自定義的類型轉(zhuǎn)換器:
步驟:
a.創(chuàng)建轉(zhuǎn)換器:需要實(shí)現(xiàn)TypeHandler接口,實(shí)現(xiàn)轉(zhuǎn)換器有兩種方式:
i.實(shí)現(xiàn)接口TypeHandler
ii.繼承BaseTypeHander
創(chuàng)建converter轉(zhuǎn)換器,代碼如下:
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//根據(jù)名字拿public Boolean getNullableResult(ResultSet rs, String columnName) throws SQLException {// TODO Auto-generated method stubint sexNo = rs.getInt(columnName);return sexNo == 1?true:false;}//根據(jù)下標(biāo)拿 @Overridepublic Boolean getNullableResult(ResultSet rs, int columnIndex) throws SQLException {// TODO Auto-generated method stubint sexNo = rs.getInt(columnIndex);return sexNo == 1?true:false;}//根據(jù)存儲(chǔ)過程拿 @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文件中配置類型轉(zhuǎn)換器:
<typeHandlers><typeHandler handler="com.offcn.converter.BooleanToIntConverter" javaType="Boolean" jdbcType="INTEGER"/> </typeHandlers>映射文件中查找的sql:(DB ---> JAVA)
<!-- 帶類型轉(zhuǎn)換器的查詢 --><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>接口中定義對(duì)應(yīng)的方法:
Person queryPersonByIdWithConverter(int id);測(cè)試類進(jìn)行測(cè)試:
public static void queryPersonByIdWithConverter() throws IOException {//讀取conf.xml文件Reader reader = Resources.getResourceAsReader("conf.xml");//創(chuàng)建sqlSessionFactorySqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);//獲取sqlSessionSqlSession session = sessionFactory.openSession();//通過session定位映射文件personMapper personMapper = session.getMapper(personMapper.class);//定位sql語句并執(zhí)行Person person = personMapper.queryPersonByIdWithConverter(4);//提交事務(wù) session.commit();System.out.println(person);//關(guān)閉連接 session.close();}映射文件中增加的sql:(JAVA --> DB)
<!-- 帶類型轉(zhuǎn)轉(zhuǎn)器的增加 --><insert id="insertPersonWithConverter" parameterType="person" >insert into person (name,bir,address,sex) value (#{name},#{bir},#{address},#{sex,javaType=Boolean,jdbcType=INTEGER})</insert>接口中定義對(duì)應(yīng)的方法:
測(cè)試類進(jìn)行測(cè)試:
//帶轉(zhuǎn)換器的增加操作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并執(zhí)行Person person = new Person("小孫",new Date(),"青島",true);personMapper.insertPersonWithConverter(person);//提交事務(wù) session.commit();System.out.println("增加成功");//關(guān)閉連接 session.close();}最后關(guān)于:sql標(biāo)簽中什么時(shí)候用resultType什么時(shí)候用resultMap
1.如果表中字段和實(shí)體類中的屬性的類型合理識(shí)別,則用resultType,否則用resultMap
2.如果表中字段的名字和實(shí)體類中屬性名能夠合理識(shí)別,則用resultType,否則用resultMap
?
轉(zhuǎn)載于:https://www.cnblogs.com/man-tou/p/11335402.html
總結(jié)
以上是生活随笔為你收集整理的04.MyBatis别名的设置和类型转换器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库:MySQL和MariaDB的JD
- 下一篇: 工信部推动第二批“5G+工业互联网”实践