您的位置:首页 > 其它

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

2019-08-04 18:26 519 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/nbcsdn/article/details/98471757

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>

这样我们就可以使用转换器来转换

算了,该休息了,先到这,明天要更努力呀…

愿你心如花木,向阳而生

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐