<>MyBatis中映射文件的使用

<>1、配置核心文件

<>①引入映射文件

​ 首先我们得在核心配置文件中配置mappers,引入映射文件所在的包
<mappers> <package name="com.ch.mybatis.mapper"></package> </mappers>
这里必须满足两个条件:

* 接口和映射文件所在的包必须一致
* 接口的名字和映射文件的名字必须一致

<>②配置typeAliases

typeAliases:设置类型别名,即为某个具体的类型设置一个别名。在MyBatis的范围中,就可以使用别名表示一个具体的类型。

在核心配置文件中设置typeAliases,在映射文件中则可以直接使用别名。

* 通过包设置类型别名,指定包下所有的类型将全部有用默认的别名,即类名且不区分大小写 。
* 要注意标签的先后顺序 <!-- 标签的先后顺序 properties?,settings?,typeAliases?,typeHandlers?,
objectFactory?,objectWrapperFactory?,reflectorFactory?,
plugins?,environments?,databaseIdProvider?,mappers? --> <typeAliases> <package
name="com.ch.mybatis.pojo"></package> </typeAliases>
<>③配置映射文件

namespace接口的全类名和映射文件namespace一致。
<mapper namespace="com.ch.mybatis.mapper.userMapper"> </mapper>
<>3、MyBatis的增删改查

<>创建数据表

复制进MySQL数据库中运行即可
DROP TABLE IF EXISTS `t_user`; CREATE TABLE `t_user` ( `id` int(11) NOT NULL
AUTO_INCREMENT, `username` varchar(20) CHARACTER SET utf8 COLLATE
utf8_unicode_ciDEFAULT NULL, `password` varchar(20) CHARACTER SET utf8 COLLATE
utf8_unicode_ciDEFAULT NULL, `age` int(11) DEFAULT NULL, `gender` char(2)
CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, `email` varchar(50)
CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`)
USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE =
utf8_unicode_ci ROW_FORMAT= Compact; SET FOREIGN_KEY_CHECKS = 1;

<>工具类

​ 创建一个工具类,每次测试就不用去重新写,直接调用获取返回值即可
public static SqlSession getSqlSession() { SqlSession sqlSession = null; try {
//获取核心配置文件 InputStream is = Resources.getResourceAsStream("MyBatis-config.xml");
//获取SqlSessionFactoryBuilder对象 SqlSessionFactoryBuilder sqlSessionFactoryBuilder
= new SqlSessionFactoryBuilder(); //根据核心配置文件对应的输入流获取SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//获取SqlSession对象 自动提交 sqlSession = sqlSessionFactory.openSession(true); } catch
(IOException e) { e.printStackTrace(); } return sqlSession; }
<>添加

首先得在Mapper接口中创建方法
int insertUser();
在映射文件中使用insert标签,标签中的id
要与接口中的方法名保持一致。等调用接口中的方法,它会根据mapper接口的全类名找到映射文件,然后会根据我们调用的方法的方法名,来找到当前的sql
语句,然后获取当前的sql来执行。

* 可以将接口的方法写在标签的上方,方便查看。 <!-- int insertUser(); --> <insert id="insertUser">
insert into t_user values (null, 'admin', '123456', 23, '男', '[email protected]')</
insert>
测试代码
public void testinsert(){ SqlSession sqlSession = sqlSessionUtil.getSqlSession(
); UserMapper mapper = sqlSession.getMapper(UserMapper.class); int i = mapper.
insertUser(); sqlSession.close(); }
<>修改
<!-- void updateUser(); --> <update id="updateUser"> update t_user set
username='root',password='123'where id = 1</update>
<>删除
<!-- void deleteUser(); --> <delete id="deleteUser"> delete from t_user where
id = 1 </delete>
<>查询

查询比较特殊除了得设置id还必须得设置另外一个参数resultType或resultMap

resultType:设置结果类型,即查询的数据要转换为的java的类型
resultMap:自定义映射,处理多对一或一对多的映射关系

resultType中应该写实体类的全类名,但是在核心文件中配置了typeAliases,所以这里可以直接写实体类的名字不区分大小写
<!-- User selectUser();--> <select id="selectUser" resultType="user"> select
id, username, password, age, gender, email from t_user where id = 1</select>
<>4、MyBatis获取参数值的两种方式

MyBatis获取参数值的两种方式:${}和#{}

${}的本质就是字符串拼接,#{}的本质就是占位符赋值

${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;
但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时, 可以自动添加单引号

<>单个字面量类型的参数
<!-- User getUserByUsername(String username); --> <select id="getUserByUsername
" resultType="user"> <!-- select * from t_user where username = #{username}-->
select * from t_user where username = '${username}'</select>
mapper接口方法的参数为单个的字面量类型此时可以通过#{}和${}以任意的内容获取参数值,一定要注意${}的单引号问题

<>多个字面量类型的参数
<!-- User chekLogin(String username , String password); --> <select id="
chekLogin" resultType="user"> <!-- select * from t_user where username =
#{arg0} and password = #{arg1}--> select * from t_user where username =
'${param1}' and password = '${param2}'</select>
mybatis会自动把当前参数放在一个Map集合中

放在Map集合中会以两种方式存储数据

①arg0,arg1…为键,以参数为值

②param1,param2…为键,以参数为值

<>map集合类型的参数
<!-- User chekLoginByMap(Map<String,Object> map);--> <select id="chekLoginByMap
" resultType="user"> select * from t_user where username = #{username} and
password = #{password}</select>
mapper接口方法的参数为map集合类型的参数

只需要通过#{}和${}范围map集合的键,

就可以获取相对于的值,一定要注意${}的单引号问题

测试代码
public void testChekLoginByMap() { SqlSession sqlSession = sqlSessionUtil.
getSqlSession(); userMapper mapper = sqlSession.getMapper(userMapper.class); Map
map= new HashMap<String, Object>(); map.put("username", "admin"); map.put(
"password", "123456"); User admin = mapper.chekLoginByMap(map); System.out.
println(admin); }
<>实体类类型的参数
<!-- void selectUser(User User); --> <insert id="selectUser"> insert into
t_uservalues(null,#{username},#{password},#{age},#{gender},#{email}) </insert>
mapper接口方法的参数为实体类类型的参数

只需要通过#{}和${}访问实体类中的属性名,

就可以获取相对于的属性值,一定要注意${}的单引号问题

<>使用@Param标识参数
<!-- User chekLoginByUser(@Param("username") String username
,@Param("password") String password); --> <select id="chekLoginByUser"
resultType="user"> select * from t_user where username = #{username} and
password = #{password}</select>
可以在mapper接口将这些参数上设置@param注解

此时MyBatis会将这些参数放在map中,以@Param注解的value属性值为键,以参数为值;

技术
今日推荐
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信