小白学习日记 MyBatis回顾(2)配置优化&&类型转换器

    技术2022-07-17  86

    文章目录

    其他配置MyBatis全局参数设置别名类型转换器一.MyBatis自带一些常见的类型处理器 如 int-number二.自定义类型转换器。

    其他配置

    可以将配置信息 单独放到db.propertis中,再动态引入。 db.propertis中时<k,v>,例如:

    driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false username=root password=123456

    引入之后使用${key}

    <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="logImpl" value="LOG4J"/> <!-- 开启延迟加载 --> <setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading" value="false"/> <setting name="cacheEnabled" value="true"/> </settings>

    设置别名

    内置别名

    1.设置单个别名 <typeAliases> <typeAlias type="com.pojo.Emp" alias="emp"/> <typeAlias type="com.pojo.Address" alias="address"/> <typeAlias type="com.pojo.Grade" alias="grade"/> <typeAlias type="com.pojo.EmpBusiness" alias="empbusiness"/> </typeAliases> 2.设置多个别名 <typeAliases> <package name="com.pojo"/> </typeAliases>

    类型转换器

    一.MyBatis自带一些常见的类型处理器 如 int-number

    二.自定义类型转换器。

    java---数据库(jdbc) 实体类 Emp:int empNo 0 1 表 emp: Boolean empno true false

    自定义类型转换器的步骤

    1.创建转换器:需要实现BaseTypeHandler接口 通过阅读源码,发现此接口有一个实现类 BaseTypeHandler ,因此 要实现转换器有2种选择: i.实现接口TypeHandler接口 ii.继承BaseTypeHandler public class IntegerAndBooleanConverter extends BaseTypeHandler<Boolean> { @Override // public void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbcType) throws SQLException { // TODO 自动生成的方法存根 if(parameter) { ps.setInt(i, 1);//i为索引 } else ps.setInt(i, 0); } @Override public Boolean getNullableResult(ResultSet rs, String columnName) throws SQLException { int empNum=rs.getInt(columnName); if(empNum==1) return true; else return false; } @Override public Boolean getNullableResult(ResultSet rs, int columnIndex) throws SQLException { // TODO 自动生成的方法存根 int empNum=rs.getInt(columnIndex); if(empNum==1) return true; else return false; } @Override public Boolean getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { int empNum=cs.getInt(columnIndex); if(empNum==1) return true; else return false; } } 2 配置conf.xml <typeHandlers> <typeHandler handler="com.converter.IntegerAndBooleanConverter" javaType="Boolean" jdbcType="INTEGER"/> </typeHandlers>

    ** 需要注意的问题INTEGER**

    <select id="queryByEmpConverter" resultMap="empResult" parameterType="int"> select * from emp where empno=${value} </select> <resultMap type="emp" id="empResult"> <id property="empNo" column="empno" /> <result property="empName" column="empname" /> <result property="sex" column="sex" javaType="Boolean" jdbcType="INTEGER" /> </resultMap> 3.也可以通过resultMap的方式实现类型转换 举例:(也可以参照2的例子) <select id="queryStudentByStuno" parameterType="int" resultMap="studentMapping" > select * from student where stuno = #{stuno} </select> <resultMap type="student" id="studentMapping"> <!-- 分为主键id 和非主键 result--> <id property="id" column="stuno" /> <result property="stuName" column="stuname" /> <result property="stuAge" column="stuage" /> <result property="graName" column="graname" /> <result property="stuSex" column="stusex" javaType="boolean" jdbcType="INTEGER"/> </resultMap>
    Processed: 0.011, SQL: 9