MyBatis通过映射器配置可以生成对应的JavaBean返回给调用者。
映射器中可以定义select、insert、update、delete、sql、parameterMap、resultMap、cache、cache-ref等。
1、select
- 定义Dao接口
public int countFirstName(String firstName);
- 匹配xml文件
<select id="countFirstName" parameterType="string" resultType="int">
select count(*) as total from user_t where name like concat(#{firstName},'%')
</select>
首先id标出这条SQL,然后parameterType定义参数类型,在定义返回类型resultType
当需要传递多个参数到一个select语句中时,可以将这些参数组合成一个POJO类,利用类将参数传递进去;如:
public List<Role> findRole(string name,string role,string note);
这个接口需要传递三个参数进去,虽然可以像下面这样使用@Param注解,但是有点儿繁琐:
public List<Role> findRole(@Param("name")string name,@Param("role")string role,@Param("note")string note);
将这三个参数变成一个POJO类:
public class RoleParam(){
private String name;
private String role;
private String note;
//setter和getter方法
}
<select id="findRole" parameterType="RoleParam" resultType="Role">
select id as id,role_name as roleName,note as note from role_t
where role_name like concat('%',#{role},'%')
and name like concat('%',#{name},'%')
</select>
2、insert
Dao接口为:
public int insertRole(Role role);
使用主键回填的方式,自动递增sql数据库中的自增字段;
<insert id="insertRole" parameterType="com.hhh.demo.model.Role"
useGenerateKeys="true" keyProperty="id">
insert into role_t(role_name,note) values (#{roleName},#{note})
</insert>
也可以使用selectKey处理更复杂的插入逻辑:
<insert id="insertRole" parameterType="com.hhh.demo.model.Role"
useGenerateKeys="true" keyProperty="id">
<selectKey keyProperty="id" resultType="int" order="BEFORE">
select if(max(id) is null,1,max(id)+2) as newId from role_t
</selectKey>
insert into role_t(role_name,note) values (#{roleName},#{note})
</insert>
如果主键为null,设置为1,否则设置为主键最大值+2;
3、update和delete
在MyBatis中insert、update、delete操作执行完成之后,都会返回一个整数,指示执行语句后影响的记录条数。
<!--更新操作-->
<update id="updateUser" parameterType="com.hhh.demo.model.User">
update user_t set
user_name = #{userName},
user_num = #{userNum},
user_role = #{userRole}
where id=#{id}
</update>
<!--删除操作-->
<delete id="deleteUser" parameterType="long">
delete from user_t where id=#{id}
</delete>