MyBatis配置详解

一.MyBatis配置详解

1.类型别名

类型别名可为java类型设置一个缩写名字,他仅用于XML配置,意在降低冗余的权限定类名书写。

1.1 typeAliases
<typeAliases>
    <typeAlias alias="别名" type="全限定名">
    </typeAliases>

这种方式一次只能写一个实体类,比较麻烦,为了解决这个问题,可以直接指定一个包名,MyBatis会在包名下搜索需要的JavaBean如下

<typeAliases>
    <package name="实体类所在的包名"/>
    </typeAliases>

在每个包下面的JavaBean,在没有注解的情况下,会使用实体类的类名小写,如果在实体类里面写了注解会使用注解里面的.

@Alias("au")
pulic class Autnor(){
    
    
} 

2.数据库命名规范和实体类命名规范不一致设置

2.1设置驼峰命名
<settings>
    <setting name="mapunderscoreTocamelcase" value="ture"> //value值默认是false
    </settings>
2.2在数据库中有自增的主键,如何去获取该键

在测试的时候给该主键给值,但是要获取该主键的值。

在执行SQL语句的的地方加上下面这句话:

<insert id="insert" parameterType="int" userGeneratedkeys="true" keyProperty="id">
    执行的SQL语句
    </insert>// userGeneratedkey使用数据库生成的自增键,keyProperty 将生成的自增的值放到实体类的哪一个属性上

如果该自增键是数据库自动生成的:

<insert id="insert" parameterType="int">
    <selectkey  keyProperty="id" order="AFTER" resultTypw="String" >
    select last_insert_id(); // keyProperty是指将select last_insert_id();执行的结果放在实体类的哪一个属性上
    </selectkey>
       执行的SQL语句
    </insert>

如果数据库没有自动生成主键,人为怎么生成

<insert id="insert" parameterType="int">
     <selectkey  keyProperty="id" order="AFTER" resultTypw="String" >
    select replace(UUID(),"-" "")
   </selectkey> 
    </selectkey>
       执行的SQL语句
    </insert>

3.模糊查询

<select id="selectName" resultType="userInfoModel">
        select * from userinfo where userName like '${userName}%';
    </select>
#{}:会被替换成 ? 作为占位符存在,然后参数注入进去
${}:直接拼接到SQL中,有SQL注入的风险

4.列和字段的映射关系

用于数据库中列和实体类中属性名不一致,如果一致,可以不写

<resultType id="user" type="userinfo">
    <id column="数据库列" property="实体字段">//用于指定主键字段
    <result column="数据库列" property="实体字段">
     <result column="数据库列" property="实体字段">//用于指定非主键字段
    </resultType>

id=“user” user是唯一标识,自定义,type="userinfo" userinfo是实体类类型

如果写了上面这段代码,在SQL语句中,要将resultType="实体类全限定名"替换成resultType="唯一标识"

5.类型处理器

数据库类型和字段类型不一致的时候

5.1 自定义类型处理器

编写一个实体类继承BaseTypeHamdler或者实现接口

public class GenderHandler extends BaseTypeHandler<String> {
/**
* 设置值时,调用此方法进行转换
*
* @param ps PreparedStatement 对象
* @param i 参数的顺序,第几个参数
* @param parame	ter 参数
* @param jdbcType 数据库类型
* @throws SQLException
*/
@Override
public void setNonNullParameter(PreparedStatement ps, int i, String
parameter, JdbcType jdbcType) throws SQLException {
if ("男".equals(parameter)) {
ps.setInt(i, 1);
} else {
ps.setInt(i, 0);
}
}
/**
* 获取到值后进行对象关系映射时调用
*
* @param rs 结果集
* @param columnName 列名
* @return 转换后的结果,用于设置对象的值
* @throws SQLException
*/
@Override
public String getNullableResult(ResultSet rs, String columnName) throws
SQLException {
return rs.getInt(columnName) == 1 ? "男" : "女";
}
/**
* 获取到值后进行对象关系映射时调用
*
* @param rs 结果集
* @param columnIndex 列序号
* @return 转换后的结果,用于设置对象的值
* @throws SQLException
*/
@Override
public String getNullableResult(ResultSet rs, int columnIndex) throws
SQLException {
return rs.getInt(columnIndex) == 1 ? "男" : "女";
}
 /**
* 用于执行存储过程等数据库操作后设置值时调用
*
* @param cs CallableStatement 对象
* @param columnIndex 列序号
* @return 转换后的结果,用于设置对象的值
* @throws SQLException
*/
@Override
public String getNullableResult(CallableStatement cs, int columnIndex)
throws SQLException {
return cs.getInt(columnIndex) == 1 ? "男" : "女";
}
}   


mybatis 的配置文件中,配置类型转换器

<!--
列和属性的映射关系
typeHandler 设置使用的类型转换器,设置这个结果集中这个字段使用自定义类型转换器
-->
<resultMap id="userinfo" type="UserInfo">
<result column="gender" property="gender" javaType="String"
jdbcType="BIT" typeHandler="com.kfm.handler.GenderHandler"/>
</resultMap>

6.Mapper映射器

6.1 resource

使用相对路径

<mapper resource="com/kfm/dao.UserInfoDao.xml" />
6.2class

​ 使用接口全限定名,和接口同名同路文件

<mapper classe="com/kfm/dao.UserInfoDao.xml" />
6.3 url

使用绝对路径

<mapper url="com/kfm/dao.UserInfoDao.xml" />
6.4 package标签
<Mappers>
    <package name="接口的全限定名">
    </Mappers>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值