总结了一下网上的三大原因
1.数据表没有设置主键
设置个主键就好
2.在mybits配置文档里设置了某些属性值为false
在mybatis配置文档里查看
enableSelectByPrimaryKey="true"
enableUpdateByPrimaryKey="true"
enableDeleteByPrimaryKey="true"
这些属性是否设置为false,如果设置了这些属性,改为true即可,如果没有设置这些属性,其默认值就是true,那就不用管它了
3。mysql-connector-java 驱动版本用的是6.x的
据说用mysql5.x版本的才能生成主键方法,用了6.x的就不行了,但问题是
5.x版本的驱动路径是:com.mysql.jdbc.Driver
6.x的驱动路径是:com.mysql.cj.jdbc.Driver
自己打开jar包找下Driver就知道了。
我的电脑本地上装的是mysql server 5.5,其driver路径是com.mysql.cj.jdbc.Driver,我不太清楚mysql server 与mysql-connector-java版本的对应关系
懒得改本地的sql版本,所以就只能用mysql-connector-java 6.x的版本了,
那 主键方法怎么办呢?
自己动手,丰衣足食啊!
我以 添加 按主键删除 为例
1.自己手动先在xxxMapper.java中写入其方法名,参数为 主键的名字
package cn.ssm.dao;
import cn.ssm.bean.User;
import cn.ssm.bean.UserExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface UserMapper {
long countByExample(UserExample example);
int deleteByExample(UserExample example);
//按主键删除。
int deleteByPrimaryKey(Integer uId);
int insert(User record);
int insertSelective(User record);
List<User> selectByExample(UserExample example);
int updateByExampleSelective(@Param("record") User record, @Param("example") UserExample example);
int updateByExample(@Param("record") User record, @Param("example") UserExample example);
}
2.然后打开xxxMapper.xml
<delete id="deleteByExample"
parameterType="cn.ssm.bean.UserExample">
delete from users
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
</delete>
<!-- 以下为 所加 代码-->
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from users
where u_id = #{uId,jdbcType=INTEGER}
</delete>
id 为方法名,parameterType为主键的属性,(我的主键为int类型的)
在<delete></delete>标签中 填入正确的sql语句
delete from users where u_id = #{uId,jdbcType=INTEGER}
{} 里面,第一个值为主键名字,jdbcTYPE为主键属性
3.测试 deleteByPrimaryKey 方法
@Autowired
UserMapper um;
/*
* 根据主键 删除信息
*/
@Test
public void testDelete() {
um.deleteByPrimaryKey(1006);
}
我的到此为止就成功了,看你的了