当筵意气临九霄,星离雨散不终朝。这篇文章主要讲述通过mapper接口加载映射文件相关的知识,希望能为你提供帮助。
通过 mapper 接口加载映射文件,这对于后面 ssm三大框架 的整合是非常重要的。那么什么是通过 mapper 接口加载映射文件呢?
我们首先看以前的做法,在全局配置文件 mybatis-configuration.xml 通过
<
mappers>
标签来加载映射文件,那么如果我们项目足够大,有很多映射文件呢,难道我们每一个映射文件都这样加载吗,这样肯定是不行的,那么我们就需要使用 mapper 接口来加载映射文件
以前的做法:
文章图片
改进做法:使用 mapper 接口来加载映射文件
回到顶部 1、定义 userMapper 接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | package
com.ys.mapper;
import
org.apache.ibatis.annotations.Delete;
import
org.apache.ibatis.annotations.Insert;
import
org.apache.ibatis.annotations.Select;
import
org.apache.ibatis.annotations.Update;
import
com.ys.po.User;
public
interface
UserMapper {
//根据 id 查询 user 表数据
public
User selectUserById( int
id)
throws
Exception;
//向 user 表插入一条数据
public
void
insertUser(User user)
throws
Exception;
//根据 id 修改 user 表数据
public
void
updateUserById(User user)
throws
Exception;
//根据 id 删除 user 表数据
public
void
deleteUserById( int
id)
throws
Exception;
} |
回到顶部 2、在全局配置文件 mybatis-configuration.xml 文件中加载 UserMapper 接口(单个加载映射文件)
文章图片
【通过mapper接口加载映射文件】
回到顶部 3、编写UserMapper.xml 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | <
?xml version= "1.0"
encoding= "UTF-8"
?>
<
!DOCTYPE mapper
PUBLIC
"-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<
mapper namespace= "com.ys.mapper.UserMapper" >
<
!-- 根据 id 查询 user 表中的数据
id:唯一标识符,此文件中的id值不能重复
resultType:返回值类型,一条数据库记录也就对应实体类的一个对象
parameterType:参数类型,也就是查询条件的类型
-->
<
select id= "selectUserById"
resultType= "com.ys.po.User"
parameterType= "int" >
<
!-- 这里和普通的sql 查询语句差不多,后面的 #{id}表示占位符,里面不一定要写id,写啥都可以,但是不要空着 -->
select * from user where id = #{id1}
<
/select>
<
!-- 根据 id 更新 user 表的数据 -->
<
update id= "updateUserById"
parameterType= "com.ys.po.User" >
update user u
<
!-- <
set>
<
if
test= "username != null and username != \'\'" >
u.username = #{username},
<
/ if >
<
if
test= "sex != null and sex != \'\'" >
u.sex = #{sex}
<
/ if >
<
/set>
-->
<
trim prefix= "set"
suffixOverrides= "," >
<
if
test= "username != null and username != \'\'" >
u.username = #{username},
<
/ if >
<
if
test= "sex != null and sex != \'\'" >
u.sex = #{sex},
<
/ if >
<
/trim>
where id=#{id}
<
/update>
<
!-- 向 user 表插入一条数据 -->
<
insert id= "insertUser"
parameterType= "com.ys.po.User" >
<
!-- 将插入的数据主键返回到 user 对象中
keyProperty:将查询到的主键设置到parameterType 指定到对象的那个属性
select LAST_INSERT_ID():查询上一次执行insert 操作返回的主键id值,只适用于自增主键
resultType:指定 select LAST_INSERT_ID() 的结果类型
order:AFTER,相对于 select LAST_INSERT_ID()操作的顺序
-->
<
selectKey keyProperty= "id"
resultType= "int"
order= "AFTER" >
select LAST_INSERT_ID()
<
/selectKey>
insert into user(username,sex,birthday,address)
value(#{username},#{sex},#{birthday},#{address})
<
/insert>
<
!-- 根据 id 删除 user 表的数据 -->
<
delete id= "deleteUserById"
parameterType= "int" >
delete from user where id=#{id}
<
/delete>
<
/mapper>
|
回到顶部 4、测试
1 2 3 4 5 6 7 8 9 | //根据id查询user表数据
@Test
public
void
testSelectUserById()
throws
Exception{
//获取mapper接口
UserMapper userMapper = session.getMapper(UserMapper. class );
User user = userMapper.selectUserById( 1 );
System.out.println(user);
session.close();
} |
回到顶部 5、批量加载映射文件
1 2 3 4 5 6 | <
mappers>
<
!--批量加载mapper
指定 mapper 接口的包名,mybatis自动扫描包下的mapper接口进行加载
-->
<
package
name= "com.ys.mapper" />
<
/mappers>
|
回到顶部 6、注意
1、UserMapper 接口必须要和 UserMapper.xml 文件同名且在同一个包下,也就是说 UserMapper.xml 文件中的namespace是UserMapper接口的全类名
文章图片
2、UserMapper接口中的方法名和 UserMapper.xml 文件中定义的 id 一致
3、UserMapper接口输入参数类型要和 UserMapper.xml 中定义的 parameterType 一致
4、UserMapper接口返回数据类型要和 UserMapper.xml 中定义的 resultType 一致
推荐阅读
- CodeForces - 645DRobot Rapping Results Report
- Android 资源混淆 AndResGuard
- AndroidStudio离线打包MUI集成JPush极光推送并在java后端管理推送
- android SDK SDK Manager.exe 无法打开,一闪而过最终解决办法
- Android应用更新-自动检测版本及自动升级
- vs2017创建支持多框架(net4.6.1;net4.6.2;netstandard2.0;netcoreapp2.0)版本
- AndroidStudio离线打包MUI
- Android中AsyncTask的使用
- Android程序中实现中英文切换