优化&& 类型处理器

优化:
1.可以将配置信息单独放入db.properties文件,然后再动态引入

driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:mldn
username=scott
password=tiger

db.properties:
k=v;

引入之后,使用${key}


2.MyBaties全局参数

3.别名
a.设置单个别名
b.批量设置别名







除了自定义别名外,MyBaties还内置了一些常见类的别名


类型处理器(类型转换器)
1.MyBatis自带一些常见的类型处理器
int-number

2.自定义MyBatis类型处理器
java-数据库(jdbc类型)
示例:
实体类Student:boolean stuSex
true:男
false:女
表student:number stuSex
1:男
0:女
自定义类型转换器(boolean-number)步骤
a.创建类型转换器:需要实现TypeHandler接口

通过阅读源码发现,此接口有一个实现类BaseTypeHandler,因此要实现转换器有2种选择:
i.实现接口TypeHandler
ii.继承BaseTypeHandler

/MyBatisProject3/src/org/myy/converter/BooleanAndIntConverter.java

package org.myy.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;

//BaseTypeHandler
public class BooleanAndIntConverter extends BaseTypeHandler{

    //java(boolean)->DB(number)
    /*
     * ps:PreparedStatement对象
     * i:PreparedStatement对象操作参数的位置
     * parameter:java值
     * jdbcType:jdbc操作的数据库类型
     * 2:true 1:false
     * */
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbcType)
            throws SQLException {
        if(parameter) {
            //2
            ps.setInt(i, 2);
        }else {
            //1
            ps.setInt(i, 1);
        }
        
    }
    //DB(number)->java(boolean)
    @Override
    public Boolean getNullableResult(ResultSet rs, String columnName) throws SQLException {
        int sexNum=rs.getInt(columnName);
//        if(sexNum==1) return true;
//        else  return false;
        return sexNum==2?true:false;
    }

    @Override
    public Boolean getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        int sexNum=rs.getInt(columnIndex);
        return sexNum==2?true:false;
    }

    @Override
    public Boolean getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        int sexNum=cs.getInt(columnIndex);
        return sexNum==2?true:false;
    }


}

b.配置conf.xml

/MyBatisProject3/src/conf.xml


    

/MyBatisProject3/src/org/myy/mapper/studentMapper.xml


    
        
        
        
        
        
        
    
    
        insert into student1(stuno,stuname,stuage,graname,stusex) values(#{id},#{stuName},#{stuAge},#{graName},#{stuSex,javaType=boolean,jdbcType=INTEGER})
    

 

需要的注意的问题:INTEGER

insert into student1(stuno,stuname,stuage,graname,stusex) values(#{stuNo},#{stuName},#{stuAge},#{graName},#{stuSex,javaType=boolean,jdbcType=INTEGER})
注意#{stuNo}中存放的是属性值,需要严格区分大小写

resultMap可以实现2个功能
1.类型转换
2.属性-字段的映射关系

你可能感兴趣的:(优化&& 类型处理器)