MyBatis简单实现中出现的一些细节性的问题(进阶性问题)1.类型转换器;2.设置单个别名;3.将配置数据信息中的代码变得更简洁。4.statement的简单化

类型处理器(类型转换器
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);

在这里还是画一张图片解释一下:差不多也就是这了

猜你喜欢

转载自blog.csdn.net/guoguozgw/article/details/91356611