MyBatis实现CRUD操作(映射文件的方式)

MyBatis实现CRUD操作(映射文件的方式)

前面着重介绍了MyBatis的配置以及语句执行的内部逻辑,现在着眼MyBatis的使用上.

在dao接口中添加对应的接口方法

	dao接口
    /**
     * 保存用户信息
     * @param user
     */
    void saveUser(User user);
	xml文件
    <!--保存用户-->
    <insert id="saveUser" parameterType="org.zjb.domain.User">
        insert into user (username, address, sex, birthday)
            values (#{username}, #{address}, #{sex}, #{birthday});
    </insert>

注意:由于增删改都涉及表内容的改变,所以执行完这个方法后需要提交事务
提交事务的方法为 sqlSession.commit();
parameterType属性的介绍

  • parameterType这个属性代表传递过来参数的类型,即saveUser(User user)中的 User
  • 如果是自定义类一般需要给全限定名,如果是简单类(八大基本类型和对应的包装类以及String)可以直接使用类名,如传递的参数是Integer,该属性的值可以为int,INT,INTEGER,integer,java.lang.Integer
  • 当参数有多个时,需要确保xml文件中大括号中的属性名和传递参数中的属性名一一对应
  • 当只有一个参数时,这个参数名称可以随意取

新增数据后获取自增id

由于数据库表中的主键id为自增主键,在进行插入操作时不会传入这个参数,但是可能某些情况下需要在新增后得到这个id,可以使用<selectKey这个标签>
dao中的方法我们不需要改变
我们只需要改变配置文件中的内容即可

    <!--保存用户-->
    <insert id="saveUser" parameterType="org.zjb.domain.User">
        <!--插入操作后获取插入数据的id-->
        <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
            select last_insert_id();
        </selectKey>
        insert into user (username, address, sex, birthday)
            values (#{username}, #{address}, #{sex}, #{birthday});
    </insert>

可以看见我们新增加了<selectKey这个标签>
对于标签的属性我们给出解释:

  • KeyProperty : 代表domain对象中需要获取的属性,即user中的id属性
  • KeyColumn :代表数据库表中需要获得的列名,即数据库表中的id列
  • resultType : 返回的类型,即需要返回的user的id属性的类型为integer
  • order : 代表标签内部的sql语句执行的时机,为下方的主sql执行完毕之后执行

执行完毕之后的值去哪了?
由于上方KeyProperty的指定,所以框架可以将id拿回来后填充回user对象对应的属性之中了

    @Test
    public void testSave() throws IOException {
        User user = new User();
        user.setAddress("北京市");
        user.setBirthday(new Date());
        user.setSex("男");
        user.setUsername("王守玉");
        System.out.println("保存前的user" + user);
        init(); // 这个方法是自己封装的各种对象的创建方法
        userDao.saveUser(user);
        // 提交事务
        session.commit();
        destroy(); // 这个方法是自己封装的资源的释放方法
        System.out.println("保存后的user" + user);
    }

程序运行的结果为:
执行结果

dao中

    /**
     * 根据id删除用户
     * @param userId
     */
    void deleteUser(Integer userId);
    <!--根据id删除用户信息-->
    <delete id="deleteUser" parameterType="Integer">
        delete from user where id=#{uid};
    </delete>

删除用户由于只有一个参数,所以这个参数可以随便写,但是还是建议对应,比较方便代码阅读.

前面介绍过查询所有用户信息,下面介绍一些别的.

根据id查询用户信息

    /**
     * 根据id查询用户信息
     * @param userId
     * @return
     */
    User findById(Integer userId);
    <!--根据id查询用户信息-->
    <select id="findById" parameterType="Integer" resultType="org.zjb.domain.User">
        select * from user where id=#{id};
    </select>

根据姓名模糊查找

    /**
     * 根据名称模糊查询
     * @param name
     * @return
     */
    List<User> findByName(String name);
    <!--根据名称模糊查询-->
    <select id="findByName" parameterType="String" resultType="org.zjb.domain.User">
        <!--select * from user where username like #{username};-->
        select * from user where username like '%${username}%';
    </select>

模糊查找可以使用 #{username} 的方式,也可以使用 ‘%${username}%’ 的方式

  • #和 $的区别在于前者为预编译的,后者是单纯的字符串拼接.
  • 当使用前者的方式,需要在方法的调用过程中指定%为模糊词
  • 使用后者的方式,可以在sql语句编写阶段就完成模糊词的插入

查找用户总数

直接在sql中使用聚合函数即可

    /**
     * 查询总用户数
     * @return
     */
    int findTotal();
    <!--查询用户的总记录条数,使用聚合函数-->
    <select id="findTotal" resultType="INT">
        select count(id) from user;
    </select>

没什么好说的,直接上代码

    /**
     * 更新用户信息
     * @param user
     */
    void updateUser(User user);
    <!--查询用户的总记录条数,使用聚合函数-->
    <select id="findTotal" resultType="INT">
        select count(id) from user;
    </select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值