db.properties
- db.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/123?useSSL=FALSE&&serverTimezone=GMT
username=root
password=932567
- xml
<properties resource="db.properties"/>
<dataSource type="POOLED">
<!-- 数据库信息 -->
<property name="driver" value= "${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
Mybatis 全局参数,一般不要设置
config.xml
<settings>
<setting name="" value=""/>
</settings>
别名设置
<typeAliases>
<!-- 定义单个别名(别名忽略大小写) -->
<typeAlias type="entity.Student" alias="Student"/>
<!-- 按包定义别名(别名忽略大小写) -->
<!-- 该包下所有类别名为本身类名 -->
<package name="entity"/>
</typeAliases>
类型处理器
- Mybatis自带一些常见的类型处理器 如 int - number
- 自定义MyBatis类型处理器(以下为例)
实体类Student | 表student |
---|---|
Boolean stuSex | number stuSex |
true:男,false:女 | 1:男,2:女 |
a. 创建转换器:需要继承TypeHandler接口(一般继承其子类BaseTypeHandler)
public class BooleanAndIntConverter extends BaseTypeHandler<Boolean> {
/**
*java(boolean) -> db(number)
* ps PreparedStatement对象
* i PreparedStatement对象操作参数的位置
* parameter java值
* jdbcType jdbc操作的数据库类型
*/
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbcType) throws SQLException {
if(parameter)
ps.setInt(i,1);
else
ps.setInt(i,0);
}
/**
* db(number) -> java(boolean)
* 以下三种方法分别是结果集不同的取值方法
*/
@Override
public Boolean getNullableResult(ResultSet rs, String columnName) throws SQLException {
int i = rs.getInt(columnName);
// i = 1 || i = 0
return i == 1;
}
@Override
public Boolean getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
int i = rs.getInt(columnIndex);
// i = 1 || i = 0
return i == 1;
}
@Override
public Boolean getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
int i = cs.getInt(columnIndex);
// i = 1 || i = 0
return i == 1;
}
}
b. 配置MyBatisConfig.xml
<typeHandlers>
<typeHandler handler="typeHandler.BooleanAndIntConverter" javaType="boolean" jdbcType="INTEGER"/>
</typeHandlers>
c. 使用时StudentMapper.xml
db - > java
<!-- 如果实体类 属性 和表中字段的 类型 能够合理识别(String-varchar),可用resultType 否则用resultMap -->
<!-- 如果实体类 属性名 和表中字段的 字段名 能够合理识别(stuNo - stuNo),可用resultType 否则用resultMap -->
<select id="queryStudentByStuNoWithConverter" parameterType="int" resultMap="studentResultMap">
select * from student where stuNo = #{id}
</select>
<resultMap id="studentResultMap" type="student">
<!-- 分为主键id 和非主键result -->
<id property="stuNo" column="stuNo"/>
<result property="stuAge" column="stuAge"/>
<result property="graName" column="stuName"/>
<result property="graName" column="graName"/>
<result property="stuSex" column="stuSex" javaType="boolean" jdbcType="INTEGER"/>
</resultMap>
java -> db
<insert id="addStudentWithConverter" parameterType="student">
insert into student values (#{stuNo},#{stuName},#{stuAge},#{graName},#{stuSex,javaType=boolean,jdbcType=INTEGER})
</insert>
ResultMap
例子见上,主要两个功能:
- 类型转换
- 实体类属性-数据表字段的映射关系(类型或者名字不同时)