文章目录
在了解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>