下面介绍如何用mybatis实现简单的增删改查功能,有两种方式,一种是通过xml配置文件实现,一种是通过注解实现。
仍然通过对user的操作进行说明,新建好项目并导入jar包后,新建数据库和表,并插入两条记录:
建表成功:
新建实体类User.java
通过XML实现
新建映射文件userMapper.xml:
在mybatis配置文件中注册上述映射文件:
编写测试类进行测试:
注意点:
- 在映射文件中,当parameterType=”int”时,sql语句中的参数名可以随便定义,例如#{id},#{_id}都可以;但是当parameterType=”com.mybatis.entities.User”时,sql语句中的参数名需要和User类中的对应字段名一致,例如#{id}对应User类中的字段id,而不能写成#{_id}。
- 在映射文件中定义getAllUsers时,只需要指明返回的集合中的元素的类型,即仅需要指明resultType=”com.mybatis.entities.User”就可以了。
通过注解实现
新建接口UserMapper.java:
在mybatis配置文件中注册该接口:
编写测试列进行测试:
可以优化的地方
一、连接数据库的配置单独放在一个properties文件中:
新建配置文件db.properties:
在mybatis配置文件中配置:
二、 可以为实体类定义别名,以简化映射文件中的引用:
在mybatis配置文件的configuration节点下配置:
那么,当要在映射文件引用User类的全类名时,只需要使用”User”即可,例如:
当要定义别名的类比较多时,还有一种更方便的方法,在mybatis配置文件的configuration节点下配置:
这将声明在映射文件中,包com.mybatis.entities下的所有类都可以用简单类名来替代全类名。
三、可以在src下加入log4j的配置文件,打印日志信息:
首先需要先导入log4j的jar包:
然后配置log4j,有两种方法:
方法一、在src目录下新建log4j.properties:
方法二、在src目录下新建log4j.xml:
然后当执行sql操作时就会在控制台打印sql语句。
解决字段名与实体类属性名不相同的冲突
在上面的例子中,我们在映射文件中按一下方式定义select操作时:
之所以能够查找成功并成功返回一个User对象,是因为实体类User的字段名和表users的列名完全一致:
User类:
users表:
当它们不一致时,就无法通过这种方式达到预期的效果。这个问题有两种解决办法,为了进行说明,我们先定义列名和字段名不一致的表orders和类Order:
新建表,并插入三条记录:
新建实体类:
在这个例子中,orders表的列为order_id,order_no,order_price,Order类的对应字段名分别为id,orderNo,price,解决方法如下:
方法一、通过在映射文件的sql语句中定义别名:
方法二: 通过映射文件中节点的resultMap属性:
其中,select节点中的resultMap需要和resultMap节点的id对应。在resultMap节点下,主键使用id节点,普通属性使用result节点,其中property指实体类中的字段名,column指数据库表中对应的列名。