Mybatis学习(二)—— 利用XML配置文件/注解的方式实现CRUD增删改查等操作


前言

通过前文Mybatis学习(一)—— 新手完成第一个Mybatis程序介绍的完成一个Mybatis的步骤可得,若再来新的需要操作的sql语句时,只需要更改第6步中的UserMapper接口内容,以及第7步中的Mapper.xml配置文件。很大程度简化了代码的编写。

本篇文章将从修改上述两个文件的内容,实现CURD功能。

tips:所有的增删改操作都需要事务的提交。

一、在XML配置文件中实现

1.增

UserMapper.java文件中:

public interface UserMapper {
    void addUser(User user);
}

Mapper.xml文件中:

<mapper namespace="UserMapper">
    <insert id="addUser" parameterType="com.ali.pojo.User">
    	<!-- 传值用% -->
        insert into mybatis.user (id, name, pwd) values (#{id}, #{name}, #{pwd});
    </insert>
</mapper>

测试:

@Test
 public void test1() {
     SqlSession sqlSession = MybatisUtils.getSqlSession();
     UserMapper mapper = sqlSession.getMapper(UserMapper.class);
     User user = new User(5, "dao","23");
     mapper.addUser(user);
     // 增删改事务要提交
     sqlSession.commit();
     sqlSession.close();
 }

2.删

UserMapper.java文件中:

public interface UserMapper {
    void deleteUser(int id);
}

Mapper.xml文件中:

<mapper namespace="UserMapper">
	<delete id="deleteUser" parameterType="int">
        delete from mybatis.user where id = #{id}
    </delete>
</mapper>

测试:

@Test
 public void test2() {
    qlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    mapper.deleteUser(6);
    sqlSession.commit();
    sqlSession.close();
 }

3.改

UserMapper.java文件中:

public interface UserMapper {
    void updateUser(User user);
}

Mapper.xml文件中:

<mapper namespace="UserMapper">
    <update id="updateUser" parameterType="com.ali.pojo.User">
    	<!-- #{} 括号中的名称需与字段名相同 -->
        update mybatis.user set name = #{name} where id = #{id}
    </update>
</mapper>

测试:

@Test
 public void test3() {
     SqlSession sqlSession = MybatisUtils.getSqlSession();
     UserMapper mapper = sqlSession.getMapper(UserMapper.class);
     User user = new User(5, "hiIIhi","23");
     mapper.updateUser(user);
     sqlSession.commit();
     sqlSession.close();
 }

4.查

UserMapper.java文件中:

public interface UserMapper {
    User getById(int id);
}

Mapper.xml文件中:

<mapper namespace="UserMapper">
    <select id="getById" parameterType="int" resultType="com.ali.pojo.User">
        select * from mybatis.user where id = #{id}
    </select>
</mapper>

测试:

@Test
 public void test4() {
     SqlSession sqlSession = MybatisUtils.getSqlSession();
     UserMapper mapper = sqlSession.getMapper(UserMapper.class);
     User user = mapper.getById(1);
     System.out.print(user);
     sqlSession.close();
 }

5.万能的Map

方法:使用Map<String,Object> map 传入参数
使用情况:实体类、数据库中的表,字段或者参数过多时,可通过Map传入参数,直接在sql取key值即可。
实现:下面的例子实现查询功能。

UserMapper.java文件中:

public interface UserMapper {
    User getById1(Map<String,Object> map);
}

Mapper.xml文件中:

<mapper namespace="UserMapper">
    <select id="getById1" parameterType="map" resultType="com.ali.pojo.User">
    	<!-- 这里的idnum可以任意命名,可不与表中属性名相同 -->
        select * from mybatis.user where id = #{idnum}
    </select>
</mapper>

测试:

@Test
 public void test4() {
     SqlSession sqlSession = MybatisUtils.getSqlSession();
     UserMapper mapper = sqlSession.getMapper(UserMapper.class);
     Map<String, Object> map = new HashMap<>();
     map.put("id", 2);
     User user = mapper.getById1(map);
     System.out.println(user); 
     sqlSession.commit();
     sqlSession.close();
 }

6.模糊查询LIKE

UserMapper.java文件中:

public interface UserMapper {
    List<User> getUserLike(String string);
}

Mapper.xml文件中:建议这里将模糊查询的通配符%写死,防止字符串拼接带来的sql注入。

<mapper namespace="UserMapper">
    <select id="getUserLike" resultType="com.ali.pojo.User">
        select * from mybatis.user where name like "%"#{values}"%"
    </select>
</mapper>

测试:

@Test
 public void test4() {
     SqlSession sqlSession = MybatisUtils.getSqlSession();
     UserMapper mapper = sqlSession.getMapper(UserMapper.class);
     List<User> user = mapper.getUserLike("王");
     System.out.print(user);
     sqlSession.close();
 }

7.分页

目的:通过将所有数据分段展示,减少数据的处理量
实现:

# 1.创建接口
import java.util.List;
import java.util.Map;

public interface UserMapper {
    List<User> getUserLimit(Map<String, Integer> map);
}


# 2.实现接口
<select id="getUserLimit" parameterType="map" resultType="User">
    select * from mybatis.user limit #{startIndex}, #{page}
</select>

# 3.测试
public class UserMapperTest {
	@Test
    public void test10() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        HashMap<String, Integer> map = new HashMap<>();
        map.put("startIndex", 0);
        map.put("page", 2);
        List<User> userLimit = mapper.getUserLimit(map);
        for (User user : userLimit) {
            System.out.println(user);
        }
        sqlSession.close();
    }
}

运行结果:
在这里插入图片描述
该结果加入了本文中介绍的日志功能。

二、利用注解实现

使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,建议使用 XML 来映射语句。
实现:
1)在mybatis-config.xml文件中,指定注解的类。

<mappers>
    <mapper class="com.ali.dao.UserMapper"></mapper>
</mappers>

2)在接口中添加注解,以select为例,update、delete、insert同理。

public interface UserMapper {
    // 1.对不同操作注解不同关键词,在()中写入sql语句。
    @Select("select * from mybatis.user")
    List<User> getUserList();

    // 2.若sql语句中需要传参,sql中传入的参数用#{}表示
    // 接口的参数用 【@Param("数据库中字段名") 传入的数据类型 参数名】表示
    @Select("select * from mybatis.user where id = #{id}")
    User getById(@Param("id") int id);
}

3)测试:

public class UserMapperTest {
    @Test
    public void test(){
        // 1.获取执行sal的对象sqlSession
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        // 2.获取并执行sql语句 方法:getMapper
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.getUserList();
        // 输出结果
        for (User user : userList) {
            System.out.println(user);
        }

        // 3.关闭sqlSession连接
        sqlSession.close();
    }

    @Test
    public void test1() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.getById(1);
        System.out.print(user);
        sqlSession.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值