
主要内容Mybatis入门实例理论回顾及代码
conf.xml中
Mybatis内置的类型处理器 自定义Mybatis类型处理器
例如:(boolean -> number )
| 实体类Student | 数据库表student |
|---|---|
| 字段 boolean stuSex | 字段 number stuSex |
| true:男,false:女 | 1:男,0:女 |
分俩步:
一、创建转换器:需要实现TypeHandler接口,TypeHandler接口有一个实现类 baseTypeHandler ,实现转换器有2种选择:
二、配置conf.xml
package org.koma.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)->数据库中(number) @Override public void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbcType) throws SQLException { if(parameter) { //true变1 ps.setInt(i, 1); }else { //false变0 ps.setInt(i, 0); } } //数据库中(number)->java中(boolean) @Override public Boolean getNullableResult(ResultSet rs, String columnName) throws SQLException { int sexNum = rs.getInt(columnName) ;//rs.getInt("stuno") ; return sexNum == 1?true:false ; } @Override public Boolean getNullableResult(ResultSet rs, int columnIndex) throws SQLException { int sexNum = rs.getInt(columnIndex) ;//rs.getInt(1) return sexNum == 1?true:false ; } @Override public Boolean getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { int sexNum = cs.getInt(columnIndex) ;//rs.getInt(1) return sexNum == 1?true:false ; } }
studengtMapper.xml 需要稍加修改:
...Mybatis内置别名 Mybatis输入参数说明select * from student where stuno = #{stuno} ... insert into student(stuno,stuname,stuage,graname,stusex) values(#{stuNo},#{stuName},#{stuAge},#{graName} ,#{stuSex ,javaType=boolean ,jdbcType=INTEGER } ) ...
parameterType类型为 简单类型(8个基本类型+String):#{任意值} 或者
${value} ,其中的标识符只能是value。
parameterType类型为 对象类型,#{属性值},${属性值} ,其中的标识符只能是属性值。
注:#{ } 会自动给String类型加上’’ "(自动类型转换), ${ } 原样输出,但是适合于动态排序(动态字段)。
适合于动态排序例子:注:#{ } 可以防止SQL注入,${ }不防止SQL注入。
模糊查询写法:
输入参数为级联属性(例子):
@Data
public class Address {
private String homeAddress;
private String schoolAddress;
}
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Student {
private int stuNo ;
private String stuName ;
private int stuAge ;
private String graName ;
private boolean stuSex ;
private Address address;//家庭、学校(嵌套属性)
输入参数为HashMap(例子):