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>
这样我们就可以使用转换器来转换
算了,该休息了,先到这,明天要更努力呀…