类型处理器(类型转换器)
1.MyBatis自带一些常见的类型处理器
int-number
2.自定义MyBatis类型处理器
java-数据库(jdbc类型)
举一个例子:
注意:表和实体类的名字可以不相同,但是 属性名一定要一样。
实体类中Student:stuSex
true:男。false:女
表中student:stuSex
1:男。0:女
自定义类型转换器(boolean-number)步骤
a.创建转换器:需要实现一个接口
但是发现接口实现比较麻烦,所以继承其类,等于间接继承该类。
b.直接上代码:具体介绍代码里面有解释。
//BaseTypeHandler<java类型>
public class BoolrsnAndIntConverter extends BaseTypeHandler<Boolean>{
@Override
/**
* java-DB
* ps:PreparedStatement对象
* i:PreparedStatement对象操作参数得位置
* parameter:java值
* jdbcType:jdbc操作得数据库类型
* */
public void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbcType)
throws SQLException {
// TODO 自动生成的方法存根
if(parameter) {
//如果parameter的值是true,那么数据库中性别框子中将会存储1
ps.setInt(i, 1);
}
else {
//如果parameter的值是false,那么数据库中性别框子中将会存储0
ps.setInt(i, 0);
}
}
/**
* db-java
* */
@Override
public Boolean getNullableResult(ResultSet rs, String columnName) throws SQLException {
// TODO 自动生成的方法存根
int sexNum=rs.getInt(columnName);
if(sexNum==1) {
return true;
}else {
return false;
}
}
@Override
public Boolean getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
// TODO 自动生成的方法存根
int sexNum=rs.getInt(columnIndex);
if(sexNum==1) {
return true;
}else {
return false;
}
}
@Override
public Boolean getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
// TODO 自动生成的方法存根
int sexNum=cs.getInt(columnIndex);
if(sexNum==1) {
return true;
}else {
return false;
}
}
设置单个别名
<!-- 后续通过namespace:id -->
<!-- resultType:查询返回结果值得类型,返回类型 -->
<select id="queryStudenyByStuno" resultType="student" parameterType="int">
select * from student where stuNo =${value}
</select>
parameterType="int"这里面的是传入参数类型。
resultType=“student” 这里面的是返回类型。
然后需要在config.xml中配置
<!-- 设置单个/多个别名 -->
<typeAliases>
<typeAlias type="org.awen.entity.Student" alias="student"/>
</typeAliases>
可以将配置数据信息中的代码变得更简洁一点在src中创建一个db.properties
将数据库信息配置到其中
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://localhost:1433;databaseName =Employees
username=sa
password=1228
然后再将config.xml中得文件修改一下。
<dataSource type="POOLED">
<!-- 配置数据信息 -->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
4.statement的简单化
起初statement都是这样子写的,但是当你的命令多的时候 这样子写的时候 代码又不是很规范,而且还不是特别的简洁。
String statement="org.awen.entity.studentMapper."+"queryStudenyByStuno";
这个时候,直接新建一个包,在包中建立一个interface。在里面写一些方法,在这里需要注意,这些方法的名字 和返回的类型 还有 传进去的参数,都是和你在mapper.xml中的id=“queryStudenyByStuno” resultType=“student” parameterType=“int”
都是一一对应的。
例如在xml中有一个这样子的类似 的功能:
<select id="queryStudenyByStuno" resultType="student" parameterType="int">
select * from student where stuNo =${value}
</select>
那么你在interface中就要这样子写:
Student queryStudenyByStuno(int stuNo);
在这里还是画一张图片解释一下: