1.Mybatis基本操作
1.1 查询
1.1.1查询demo_user表中ID=1的数据
public User findUserById(Integer id);
<!--
根据id查询数据
取值操作:#{id} id代表的是参数名称
-->
<select id="findUserById" resultType="com.jt.pojo.User">
select * from demo_user where id=#{id};
</select>
![在这里插入图片描述](https://img-blog.csdnimg.cn/8bb15cf8210d495591fdff82629dda5a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5piv5Lmd5Lmd6bitfg==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
@Test
public void testUser() {
int id=1;
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.findUserById(id);
System.out.println(user);
sqlSession.close();
1.2 新增
1.2.1 查询demo_user表中ID=1的数据
![在这里插入图片描述](https://img-blog.csdnimg.cn/95698d43214e4dc3ab7caeafec1929b9.png#pic_center)
public Integer saveUser(User user);
![在这里插入图片描述](https://img-blog.csdnimg.cn/117311203cdc454ca09cf123437fc944.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5piv5Lmd5Lmd6bitfg==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
<!--
实现用户的新增
1.归于对象参数传递说明:
2.mybatis取值语法:#{id}
3.用户在执行"更新"操作时,自动返回影响的行数
-->
<insert id="saveUser">
insert into demo_user(id,name,age,sex)
VALUES (null,#{name },#{age},#{sex});
</insert>
- 测试
![在这里插入图片描述](https://img-blog.csdnimg.cn/36f1947b31e34d338cdeb43095f9feb6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5piv5Lmd5Lmd6bitfg==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
@Test
public void testUserinsert() {
User user=new User(null, "西王母", 30000, "女");
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Integer rows=userMapper.saveUser(user);
System.out.println(rows);
sqlSession.commit();
sqlSession.close();
}
1.3 修改
1.3.1 将demo_user表中的嫦娥修改为嫦娥姐姐,年龄改为99
Integer updateUser(User user);
<update id="updateUser">
update demo_user set name=#{name},age=#{age}
where id=#{id};
</update>
- 测试
![在这里插入图片描述](https://img-blog.csdnimg.cn/daf2a96ca22a4e7ba0da8dbfd2adec85.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5piv5Lmd5Lmd6bitfg==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
@Test
public void testUserupdate() {
User user=new User(232, "嫦娥姐姐", 99, "女");
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Integer rows=userMapper.updateUser(user);
if(rows>0){
sqlSession.commit();
}
System.out.println("影响的行数为:"+rows);
sqlSession.close();
}
1.4 删除
1.4.1 将demo_user表中的嫦娥姐姐删除
Integer deleteUser(String user);
![在这里插入图片描述](https://img-blog.csdnimg.cn/7eb57320373848bb97763e23f4ef0142.png#pic_center)
<delete id="deleteUser">
delete from demo_user where name=#{name};
</delete>
![在这里插入图片描述](https://img-blog.csdnimg.cn/94d23f88effb4aebab69f4f2a8784ddb.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5piv5Lmd5Lmd6bitfg==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
@Test
public void testUserdelete() {
String name="嫦娥姐姐";
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Integer rows=userMapper.deleteUser(name);
if(rows>0){
sqlSession.commit();
}
System.out.println("影响的行数为:"+rows);
sqlSession.close();
}
1.5 利用Map集合封装数据
1.5.1 查询demo_user表中age>100和age<1000的数据
List<User> UserSelectAge(Map map);
<!--
语法:UserSelectAge(Map map)
取值:#{key} 根据key 获取value的数据
关于转义的说明:
xml文件中个别字母需要转义
大于 > >
小于 < <
与号 & &
转移标签 <![CDATA[ 需要转移的内容 ]]>
-->
<select id="UserSelectAge" resultType="com.jt.pojo.User">
<!--select * from demo_user
where age>#{minage} and age < #{maxage}; -->
<![CDATA[
select * from demo_user
where age>#{minage} and age<#{maxage};
]]>
</select>
![在这里插入图片描述](https://img-blog.csdnimg.cn/370b87922a294fe2be8fb55a33dd7b25.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5piv5Lmd5Lmd6bitfg==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
@Test
public void testUserSelect1() {
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Map map=new HashMap();
map.put("minage", 100);
map.put("maxage",1000);
List<User> user=userMapper.UserSelectAge(map);
System.out.println(user);
sqlSession.close();
}
1.6 利用Param集合封装数据
- 1.规则Mapper中的方法,不能重名
- 2.关于mybatis参数封装的说明
- 只支持单值传参
- 单值可以使具体的数字,字符串,对象
- 多值转化为单值
a.首选Map集合
b.@Param(“min”) int min 将参数封装为map
解析:Map={minAge=100,maxAge=1000}
1.6.1 查询demo_user表中age>100和age<1000的数据
List<User> UserParamAge(@Param("min") int min,@Param("max") int max);
<select id="UserParamAge" resultType="com.jt.pojo.User">
select * from demo_user
where age>#{min} and age < #{max};
</select>
![在这里插入图片描述](https://img-blog.csdnimg.cn/58767e9cc23541c8ab5828d53d5cdd67.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5piv5Lmd5Lmd6bitfg==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
@Test
public void testParam() {
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int min=100;
int max=1000;
List<User> userList=userMapper.UserParamAge(min,max);
System.out.println(userList);
sqlSession.close();
}
1.7 模糊查询
1.7.1 查询name中包含"乔"的用户
List<User> userSelectMohu(String name);
<select id="userSelectMohu" resultType="com.jt.pojo.User">
select * from demo_user where name like "%"#{name}"%";
</select>
![在这里插入图片描述](https://img-blog.csdnimg.cn/adf8ade340024d358defad5f4502934c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5piv5Lmd5Lmd6bitfg==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
@Test
public void testLike() {
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
String name="乔";
List<User> userList=userMapper.userSelectMohu(name);
System.out.println(userList);
sqlSession.close();
}
2.简化mybatis配置
2.1 简化mapper中的resultType
![在这里插入图片描述](https://img-blog.csdnimg.cn/ae5cd23a6aaf42e7a07e027c10ca3740.png#pic_center)
- 在mybatis-config.xml文件中进行配置(方法1:typeAlias)
- mybatis-config.xml文件中有顺序
typeAliases应该写在最前面
![在这里插入图片描述](https://img-blog.csdnimg.cn/5da98279e3dd4c32bec045e1b901d9c6.png#pic_center)
- 在mybatis-config.xml文件中进行配置(方法2:package)
![在这里插入图片描述](https://img-blog.csdnimg.cn/c80ed6501c8e43dca92564b15b4da8d4.png#pic_center)
2.1 简化mapper中的sql
![在这里插入图片描述](https://img-blog.csdnimg.cn/56842929ab204d53853cae5dad480047.png#pic_center)
3.课堂总结
3.1 简化test方法:@BeforeEach
3.2 Mybatis常用CURD操作
- 编辑接口
- 编辑映射文件,接口与映射文件必须一一对应
- insert/update/delete 自动返回影响行 / select必须有resultType
3.3 参数传递
- 基本类型的数据1个
- 可以将多个参数封装为POJO对象,不能有重名属性
- 更加通用的是封装为Map集合 @Param(“key”)
3.4 xml中转义字符的写法
3.5 模糊查询xml的写法:"%"#{属性名}"%"
3.6 简化配置