MyBatis代理Dao方式CRUD操作详解
一、查询所有用户
// UserMapper接口 public List<User> findAll(); <!-- UserMapper.xml --> <select id="findAll" resultType="com.qcbyjy.domain.User"> select * from user </select>
二、根据ID查询用户
public User findById(Integer userId); <select id="findById" resultType="com.qcbyjy.domain.User" parameterType="int"> select * from user where id = #{id} </select>
注意:SQL语句中使用 #{占位符名称},名称可以任意,适用于基本数据类型和String类型。
三、插入用户(保存操作)
public void insert(User user); <insert id="insert" parameterType="com.qcbyjy.domain.User"> <!-- 配置主键返回 --> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> select last_insert_id() </selectKey> insert into user (username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address}) </insert>
selectKey 标签说明:
keyProperty:要返回的属性名称
order="AFTER":插入数据后的行为
resultType:返回值的类型
四、修改用户
public void update(User user); <update id="update" parameterType="com.qcbyjy.domain.User"> update user set username = #{username},birthday = #{birthday}, sex = #{sex},address = #{address} where id = #{id} </update>
五、删除用户
public void delete(Integer userId); <delete id="delete" parameterType="Integer"> delete from user where id = #{id} </delete>
六、模糊查询
public List<User> findByName(String username); 方式一(推荐):使用 #{} 占位符,调用时传入 % 通配符 <select id="findByName" resultType="com.qcbyjy.domain.User" parameterType="string"> select * from user where username like #{username} </select>
方式二(不推荐):使用 ${value} 拼接
<select id="findByName" resultType="com.qcbyjy.domain.User" parameterType="string"> select * from user where username like '%${value}%' </select>
七、查询总记录数
public Integer findByCount(); <select id="findByCount" resultType="int"> select count(*) from user </select>
八、#{} 与 ${} 的区别
| 特性 | #{} | ¥{} |
| 底层实现 | PreparedStatement | Statement |
| SQL注入 | 有效防止 | 存在风险 |
| 类型转换 | 自动进行java类型和jdbc类型转换 | 不进行类型转换 |
| 简单类型值 | 括号中可以是value或其它名称 | 括号中只能是value |
| 推荐度 | 推荐使用 | 不推荐 |