基于MyBatis的CRUD操作原来是这样的。。。

在了解MyBatis基础之后,接下来想和小伙伴们一起分享一下基于MyBatis的CRUD操作,让我们一起更深入的了解MyBatis。

一、查询操作

1. 查询所有

public interface IUserDao {
    // 查询用户所有的信息
    List<User> findAll();
}
<select id="findAll" resultType="com.uos.domain.User">
    select * from user;
</select>

2. 查询一个

public interface IUserDao {
    // 根据id查询用户信息
    User findById(Integer id);
}
<!--根据id查询用户信息-->
<select id="findById" parameterType="Integer" resultType="com.uos.domain.User">
    select * from user where id = #{id};
</select>

3. 模糊查询

public interface IUserDao {
    // 根据用户名模糊查询
	List<User> findByName(String username);
}    

3.1 方法一

<select id="findByName" parameterType="String" resultType="com.uos.domain.User" >
    <!--方法一-->
	select * from user where username like #{username};
</select>

在测试的时候我们需要添加通配符%

 //......
 List<User> userList = userDao.findByName("%王%");
 //......

3.2 方法二

<select id="findByName" parameterType="String" resultType="com.uos.domain.User" >
    <!--方法二-->
	select * from user where username like '%${value}';
</select>

此时在测试的时候我们不再需要添加通配符

 //......
 List<User> userList = userDao.findByName("王");
 //......

注意:方法二中的SQL语句%${value}中的value值是固定的,不可随意更改其他名称,我们可以查看MyBatis源码中的TextSqlNode类,如下:
在这里插入图片描述

4. 查询总用户数(数据库有多少条记录)

public interface IUserDao {
    // 查询总用户数
    int findTotal();
}    
<select id="findTotal" resultType="integer" >
	select count(id) from user;
</select>

二、保存操作

public interface IUserDao {
	// 保存用户信息
    void saveUser(User user);
}
<!--保存用户信息-->
<insert id="saveUser" parameterType="com.uos.domain.User" >
    insert into user(username, address, sex, birthday) values(#{username}, #{address}, #{sex}, #{birthday});
</insert>

在执行保存操作的时候,如果我们需要返回最后一次插入记录的id,则需要在insert标签中添加selectKey标签。

<!--查询最后一次插入记录时的id-->
<selectKey keyProperty="id" keyColumn="id" resultType="integer" order="AFTER">
	select last_insert_id();
</selectKey>

其中,keyProperty表示Java实体类(User)的属性名称,keyColumn表示数据库中的列名,resultType表示封装的结果集的类型,order表示执行的顺序,AFTER表示在保存操作之后执行

三、删除操作

public interface IUserDao {
	// 删除用户信息
    void deleteUser(Integer id);
}
<!--删除用户信息-->
<delete id="deleteUser" parameterType="Integer">
	delete from user where id = #{id};
</delete>

四、更新操作

public interface IUserDao {
 	// 修改用户信息
    void updateUser(User user);
}
<!--更新用户信息-->
<update id="updateUser" parameterType="com.uos.domain.User" >
	update user set username = #{username}, birthday = #{birthday}, sex=#{sex}, address=#{address} where id=#{id};
</update>

五、解决实体类属性名和数据库列名不一致问题

在开发的过程中,我们可能会经常遇到实体类属性名和数据库列名不一致的问题,导致结果集无法实现封装,下面针对这一问题,提供两种解决方案。

1. 方法一:使用别名

<select id="findAll" resultType="com.uos.domain.User" >
    select id as userid,username as username,birthday as userbirthday,sex as usersex, address as useraddress from user;
</select>

2. 方法二:添加resultMap

在这里插入图片描述
这里的property指的是Java实体类(User)属性名,column是指数据库的列名。resultMap标签中的id属性值可以自定义,但是必须唯一。上面的select标签修改如下:

<select id="findAll" resultMap="usermap" >
	select * from user;
</select>
原创文章 154 获赞 48 访问量 8548

猜你喜欢

转载自blog.csdn.net/weixin_41842236/article/details/105604997