MyBatis学习_动态代理实现CRUD(mybatis接口开发)_优化conf_全局参数设置_别名_类型处理器

CRUD是指在做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)
就是增删改查嘿嘿
我们现在用动态代理来实现之前的增删改查,实际就是简化之前的操作,具体简化的地方就是statement

简化statement

我们新建一个接口PersonMapper.java(用接口来当做桥梁,实现xml的标签和接口方法的映射),插入以下代码:

public interface PersonMapper {
    Person queryPersonById(int id);
    List<Person> queryAllPerson();
    void addPerson(Person person);
    void deletePersonById(int id);
    void updatePersonById(Person person);
}

需要注意的是:
在这里插入图片描述
映射关系建好了,可是怎么将接口和我们的personMapper.xm文件绑定起来,当我们调用接口的方法时自动找到我们这个personMapper里的标签呢?
在这里插入图片描述
将namespace改为我们接口的全路径即可
开始调用
在这里插入图片描述
将以上红框里的内容改为:
在这里插入图片描述
即可。
现在我们来优化conf.xml

优化conf.xml

之前我们将数据库连接信息都写在conf.xml中,看起来不够直接,现在我们将连接信息单独出来
在src文件夹下新建:db.properties文件,插入(这是我本机的,需要改成自己的):

driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
username=scott
password=tiger

然后在conf.xml中引入db.properties文件
在这里插入图片描述
引入完成,使用方法如下(${}):
在这里插入图片描述

全局参数设置

全局参数在conf.xml中设置。
在这里插入图片描述
在settings中写需要设置的全局参数
在这里插入图片描述
全局参数有不少,一般情况下不要随意更改,默认即可

别名

有时候我们需要写很长的一串类路径,很麻烦,就需要用到别名来代替,别名不区分大小写
设置别名有两种方式1、单个设置 2、批量设置,都是在conf.xml中设置
在这里插入图片描述

类型处理器(就是类型转换器)

mybatis自带:int --> number…等等
自定义类型处理器:
1、现在我们设计一个转换器类:BooleanAndIntConverter.java,这个转换器需要实现的功能是将java里的:

boolean studentSex ;//true(男) false(女)

数据库里的

number studentSex ;// 0(男) 1(女)

相互转化

2、让这个类实现TypeHandler接口或者继承TypeHandle的一个实现类BaseTypeHandler,后者比较简单一些。这里我们用继承。
在这里插入图片描述
继承之后需要实现这四个方法,get开头的是从数据库—>java,set开头的是从java—>数据库
3、插入以下代码:


public class BooleanAndIntConverter extends BaseTypeHandler<Boolean> {

    //java-->db
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Boolean aBoolean, JdbcType jdbcType) throws SQLException {
        if (aBoolean) {
            preparedStatement.setObject(i, 0);
        } else {
            preparedStatement.setObject(i, 1);
        }
    }
    //db->java   通过列名
    @Override
    public Boolean getNullableResult(ResultSet resultSet, String s) throws SQLException {
        int sexNum = resultSet.getInt(s);
        return sexNum==0?true:false;
    }
//    通过列
    @Override
    public Boolean getNullableResult(ResultSet resultSet, int i) throws SQLException {
        int sexNum = resultSet.getInt(i);
        return sexNum==0?true:false;
    }
//通过存储过程
    @Override
    public Boolean getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        int sexNum = callableStatement.getInt(i);
        return sexNum==0?true:false;
    }
}

转换器写好了,我们来配置转换器,同样在conf.xml里,注意INTEGER大写

<!--转换器配置-->
   <typeHandlers>
       <typeHandler handler="org.mybatis.cinverter.BooleanAndIntConverter" javaType="Boolean" jdbcType="INTEGER"></typeHandler>
   </typeHandlers>

接着在mapper里写,INTEGER大写

    <!--1、如果类中属性类型和表中类型可以自动识别转换,就用resultType,否则resultMap
    2、如果类中属性名和表中字段名一致,用resultType,否则resultMap-->
    <resultMap id="personResult" type="person">
        <!--主键用id  非主键用result-->
        <id property="id" column="id"></id>
        <result property="name" column="name"></result>
        <result property="age" column="age"></result>
        <!--数据库转java-->
        <result property="sex" column="sex" javaType="Boolean" jdbcType="INTEGER"></result>
    </resultMap>
    <select id="queryAllPersonWithConverter" parameterType="int" resultMap="personResult">
        select * from person where id = #{id}
    </select>

    <!--java->数据库-->
    <insert id="addPersonWithConverter" parameterType="person">
        insert into person values(#{id},#{name},#{age},#{sex,javaType=Boolean,jdbcType=INTEGER})
    </insert>

这样我们就可以使用转换器来转换
在这里插入图片描述
算了,该休息了,先到这,明天要更努力呀…

愿你心如花木,向阳而生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值