优化:
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; //BaseTypeHandlerpublic 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.属性-字段的映射关系